diff --git a/jedi/api/keywords.py b/jedi/api/keywords.py index dd57bb85..999e5dc2 100644 --- a/jedi/api/keywords.py +++ b/jedi/api/keywords.py @@ -1,18 +1,9 @@ import pydoc +from contextlib import suppress -from jedi.inference.utils import ignored from jedi.inference.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 +from pydoc_data import topics as pydoc_topics class KeywordName(AbstractArbitraryName): @@ -34,7 +25,7 @@ def imitate_pydoc(string): # with unicode strings) string = str(string) h = pydoc.help - with ignored(KeyError): + with suppress(KeyError): # try to access symbols string = h.symbols[string] string, _, related = string.partition(' ') diff --git a/jedi/api/project.py b/jedi/api/project.py index 08821e30..472507f2 100644 --- a/jedi/api/project.py +++ b/jedi/api/project.py @@ -10,7 +10,6 @@ be used across repositories. import os import errno import json -import sys from jedi import debug from jedi.api.environment import get_cached_default_environment, create_environment @@ -258,10 +257,6 @@ class Project(object): inference_state = s._inference_state empty_module_context = s._get_module_context() - if inference_state.grammar.version_info < (3, 6) or sys.version_info < (3, 6): - raise NotImplementedError( - "No support for refactorings/search on Python 2/3.5" - ) debug.dbg('Search for string %s, complete=%s', string, complete) wanted_type, wanted_names = split_search_string(string) name = wanted_names[0] diff --git a/jedi/inference/arguments.py b/jedi/inference/arguments.py index 29e7dbeb..99de7210 100644 --- a/jedi/inference/arguments.py +++ b/jedi/inference/arguments.py @@ -142,11 +142,8 @@ 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 ('*', '**'))): + if arglist.type != 'arglist' and not ( + arglist.type == 'argument' and arglist.children[0] in ('*', '**')): yield 0, arglist return diff --git a/jedi/inference/compiled/access.py b/jedi/inference/compiled/access.py index 7c425055..eb2407e7 100644 --- a/jedi/inference/compiled/access.py +++ b/jedi/inference/compiled/access.py @@ -8,7 +8,7 @@ import warnings import re import builtins -from jedi._compatibility import unicode, is_py3, py_version +from jedi._compatibility import unicode, py_version from jedi.inference.compiled.getattr_static import getattr_static ALLOWED_GETITEM_TYPES = (str, list, tuple, unicode, bytes, bytearray, dict) @@ -28,17 +28,12 @@ NOT_CLASS_TYPES = ( types.MethodType, types.ModuleType, types.TracebackType, - MethodDescriptorType + MethodDescriptorType, + types.MappingProxyType, + types.SimpleNamespace, + types.DynamicClassAttribute, ) -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__) diff --git a/jedi/inference/gradual/utils.py b/jedi/inference/gradual/utils.py index f77b5d77..fc68b7b1 100644 --- a/jedi/inference/gradual/utils.py +++ b/jedi/inference/gradual/utils.py @@ -14,7 +14,7 @@ def load_proper_stub_module(inference_state, file_io, import_names, module_node) # /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 + # Remove the stdlib/3 or third_party/3.6 part import_names = split_paths[2:] if import_names[-1] == '__init__': import_names = import_names[:-1] diff --git a/jedi/inference/helpers.py b/jedi/inference/helpers.py index 8f7052d6..7a827d72 100644 --- a/jedi/inference/helpers.py +++ b/jedi/inference/helpers.py @@ -12,7 +12,7 @@ from jedi._compatibility import unicode def is_stdlib_path(path): # Python standard library paths look like this: - # /usr/lib/python3.5/... + # /usr/lib/python3.9/... # TODO The implementation below is probably incorrect and not complete. if 'dist-packages' in path or 'site-packages' in path: return False diff --git a/jedi/inference/utils.py b/jedi/inference/utils.py index 17c53577..805aff1d 100644 --- a/jedi/inference/utils.py +++ b/jedi/inference/utils.py @@ -99,15 +99,3 @@ class PushBackIterator(object): else: self.current = next(self.iterator) return self.current - - -@contextlib.contextmanager -def ignored(*exceptions): - """ - Value manager that ignores all of the specified exceptions. This will - be in the standard library starting with Python 3.5. - """ - try: - yield - except exceptions: - pass diff --git a/jedi/inference/value/iterable.py b/jedi/inference/value/iterable.py index 34b6349d..6d5521fa 100644 --- a/jedi/inference/value/iterable.py +++ b/jedi/inference/value/iterable.py @@ -4,7 +4,6 @@ iterators in general. """ import sys -from jedi._compatibility import is_py3 from jedi.inference import compiled from jedi.inference import analysis from jedi.inference.lazy_value import LazyKnownValue, LazyKnownValues, \ diff --git a/test/completion/stdlib.py b/test/completion/stdlib.py index fc8f0f14..1b06d6ca 100644 --- a/test/completion/stdlib.py +++ b/test/completion/stdlib.py @@ -133,48 +133,6 @@ 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('') - -# From GH #1574 -#? float() -functools.wraps(functools.partial(str, 1))(lambda: 1.0)() - # ----------------- # sqlite3 (#84) # ----------------- @@ -386,8 +344,47 @@ X().name X().attr_x.attr_y.value # ----------------- -# functools Python 3.5+ +# 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('') + +# From GH #1574 +#? float() +functools.wraps(functools.partial(str, 1))(lambda: 1.0)() + class X: def function(self, a, b): return a, b @@ -440,11 +437,6 @@ X().just_partial('')[0] #? str() X().just_partial('')[1] - -# ----------------- -# functools Python 3.8 -# ----------------- - # python >= 3.8 @functools.lru_cache