mirror of
https://github.com/davidhalter/jedi.git
synced 2026-05-19 23:09:43 +08:00
Merge pull request #1711 from davidhalter/deprecations
Remove Deprecations
This commit is contained in:
@@ -18,6 +18,7 @@ Unreleased
|
|||||||
- Started using annotations
|
- Started using annotations
|
||||||
- Better support for the walrus operator
|
- Better support for the walrus operator
|
||||||
- Project attributes are now read accessible
|
- Project attributes are now read accessible
|
||||||
|
- Removed all deprecations
|
||||||
|
|
||||||
This is likely going to be the last minor release before 1.0.
|
This is likely going to be the last minor release before 1.0.
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ collect_ignore = [
|
|||||||
'jedi/inference/compiled/subprocess/__main__.py',
|
'jedi/inference/compiled/subprocess/__main__.py',
|
||||||
'build/',
|
'build/',
|
||||||
'test/examples',
|
'test/examples',
|
||||||
|
'sith.py',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -169,6 +169,5 @@ Deprecations
|
|||||||
|
|
||||||
The deprecation process is as follows:
|
The deprecation process is as follows:
|
||||||
|
|
||||||
1. A deprecation is announced in the next major/minor release.
|
1. A deprecation is announced in any release.
|
||||||
2. We wait either at least a year and at least two minor releases until we
|
2. The next major release removes the deprecated functionality.
|
||||||
remove the deprecated functionality.
|
|
||||||
|
|||||||
+1
-2
@@ -29,8 +29,7 @@ load
|
|||||||
|
|
||||||
__version__ = '0.17.2'
|
__version__ = '0.17.2'
|
||||||
|
|
||||||
from jedi.api import Script, Interpreter, set_debug_function, \
|
from jedi.api import Script, Interpreter, set_debug_function, preload_module
|
||||||
preload_module, names
|
|
||||||
from jedi import settings
|
from jedi import settings
|
||||||
from jedi.api.environment import find_virtualenvs, find_system_environments, \
|
from jedi.api.environment import find_virtualenvs, find_system_environments, \
|
||||||
get_default_environment, InvalidPythonEnvironment, create_environment, \
|
get_default_environment, InvalidPythonEnvironment, create_environment, \
|
||||||
|
|||||||
+1
-98
@@ -8,7 +8,6 @@ debug messages to stdout, simply call :func:`set_debug_function` without
|
|||||||
arguments.
|
arguments.
|
||||||
"""
|
"""
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import parso
|
import parso
|
||||||
@@ -90,23 +89,16 @@ class Script:
|
|||||||
|
|
||||||
:param code: The source code of the current file, separated by newlines.
|
:param code: The source code of the current file, separated by newlines.
|
||||||
:type code: str
|
:type code: str
|
||||||
:param line: Deprecated, please use it directly on e.g. ``.complete``
|
|
||||||
:type line: int
|
|
||||||
:param column: Deprecated, please use it directly on e.g. ``.complete``
|
|
||||||
:type column: int
|
|
||||||
:param path: The path of the file in the file system, or ``''`` if
|
:param path: The path of the file in the file system, or ``''`` if
|
||||||
it hasn't been saved yet.
|
it hasn't been saved yet.
|
||||||
:type path: str or pathlib.Path or None
|
:type path: str or pathlib.Path or None
|
||||||
:param sys_path: Deprecated, use the project parameter.
|
|
||||||
:type sys_path: typing.List[str]
|
|
||||||
:param Environment environment: Provide a predefined :ref:`Environment <environments>`
|
:param Environment environment: Provide a predefined :ref:`Environment <environments>`
|
||||||
to work with a specific Python version or virtualenv.
|
to work with a specific Python version or virtualenv.
|
||||||
:param Project project: Provide a :class:`.Project` to make sure finding
|
:param Project project: Provide a :class:`.Project` to make sure finding
|
||||||
references works well, because the right folder is searched. There are
|
references works well, because the right folder is searched. There are
|
||||||
also ways to modify the sys path and other things.
|
also ways to modify the sys path and other things.
|
||||||
"""
|
"""
|
||||||
def __init__(self, code=None, line=None, column=None, path=None,
|
def __init__(self, code=None, *, path=None, environment=None, project=None):
|
||||||
sys_path=None, environment=None, project=None, source=None):
|
|
||||||
self._orig_path = path
|
self._orig_path = path
|
||||||
# An empty path (also empty string) should always result in no path.
|
# An empty path (also empty string) should always result in no path.
|
||||||
if isinstance(path, str):
|
if isinstance(path, str):
|
||||||
@@ -114,27 +106,6 @@ class Script:
|
|||||||
|
|
||||||
self.path = path.absolute() if path else None
|
self.path = path.absolute() if path else None
|
||||||
|
|
||||||
if line is not None:
|
|
||||||
warnings.warn(
|
|
||||||
"Providing the line is now done in the functions themselves "
|
|
||||||
"like `Script(...).complete(line, column)`",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
if column is not None:
|
|
||||||
warnings.warn(
|
|
||||||
"Providing the column is now done in the functions themselves "
|
|
||||||
"like `Script(...).complete(line, column)`",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
if source is not None:
|
|
||||||
code = source
|
|
||||||
warnings.warn(
|
|
||||||
"Use the code keyword argument instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
if code is None:
|
if code is None:
|
||||||
# TODO add a better warning than the traceback!
|
# TODO add a better warning than the traceback!
|
||||||
with open(path, 'rb') as f:
|
with open(path, 'rb') as f:
|
||||||
@@ -143,15 +114,6 @@ class Script:
|
|||||||
if project is None:
|
if project is None:
|
||||||
# Load the Python grammar of the current interpreter.
|
# Load the Python grammar of the current interpreter.
|
||||||
project = get_default_project(None if self.path is None else self.path.parent)
|
project = get_default_project(None if self.path is None else self.path.parent)
|
||||||
# TODO deprecate and remove sys_path from the Script API.
|
|
||||||
if sys_path is not None:
|
|
||||||
project._sys_path = sys_path
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.17.0. Use the project API instead, "
|
|
||||||
"which means Script(project=Project(dir, sys_path=sys_path)) instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
|
|
||||||
self._inference_state = InferenceState(
|
self._inference_state = InferenceState(
|
||||||
project, environment=environment, script_path=self.path
|
project, environment=environment, script_path=self.path
|
||||||
@@ -168,7 +130,6 @@ class Script:
|
|||||||
debug.speed('parsed')
|
debug.speed('parsed')
|
||||||
self._code_lines = parso.split_lines(code, keepends=True)
|
self._code_lines = parso.split_lines(code, keepends=True)
|
||||||
self._code = code
|
self._code = code
|
||||||
self._pos = line, column
|
|
||||||
|
|
||||||
cache.clear_time_caches()
|
cache.clear_time_caches()
|
||||||
debug.reset_time()
|
debug.reset_time()
|
||||||
@@ -251,14 +212,6 @@ class Script:
|
|||||||
)
|
)
|
||||||
return completion.complete()
|
return completion.complete()
|
||||||
|
|
||||||
def completions(self, fuzzy=False):
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.16.0. Use Script(...).complete instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
return self.complete(*self._pos, fuzzy=fuzzy)
|
|
||||||
|
|
||||||
@validate_line_column
|
@validate_line_column
|
||||||
def infer(self, line=None, column=None, *, only_stubs=False, prefer_stubs=False):
|
def infer(self, line=None, column=None, *, only_stubs=False, prefer_stubs=False):
|
||||||
"""
|
"""
|
||||||
@@ -303,25 +256,6 @@ class Script:
|
|||||||
# the API.
|
# the API.
|
||||||
return helpers.sorted_definitions(set(defs))
|
return helpers.sorted_definitions(set(defs))
|
||||||
|
|
||||||
def goto_definitions(self, **kwargs):
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.16.0. Use Script(...).infer instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
return self.infer(*self._pos, **kwargs)
|
|
||||||
|
|
||||||
def goto_assignments(self, follow_imports=False, follow_builtin_imports=False, **kwargs):
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.16.0. Use Script(...).goto instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
return self.goto(*self._pos,
|
|
||||||
follow_imports=follow_imports,
|
|
||||||
follow_builtin_imports=follow_builtin_imports,
|
|
||||||
**kwargs)
|
|
||||||
|
|
||||||
@validate_line_column
|
@validate_line_column
|
||||||
def goto(self, line=None, column=None, *, follow_imports=False, follow_builtin_imports=False,
|
def goto(self, line=None, column=None, *, follow_imports=False, follow_builtin_imports=False,
|
||||||
only_stubs=False, prefer_stubs=False):
|
only_stubs=False, prefer_stubs=False):
|
||||||
@@ -452,14 +386,6 @@ class Script:
|
|||||||
return [classes.Name(self._inference_state, name)]
|
return [classes.Name(self._inference_state, name)]
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def usages(self, **kwargs):
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.16.0. Use Script(...).get_references instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
return self.get_references(*self._pos, **kwargs)
|
|
||||||
|
|
||||||
@validate_line_column
|
@validate_line_column
|
||||||
def get_references(self, line=None, column=None, **kwargs):
|
def get_references(self, line=None, column=None, **kwargs):
|
||||||
"""
|
"""
|
||||||
@@ -490,14 +416,6 @@ class Script:
|
|||||||
return helpers.sorted_definitions(definitions)
|
return helpers.sorted_definitions(definitions)
|
||||||
return _references(**kwargs)
|
return _references(**kwargs)
|
||||||
|
|
||||||
def call_signatures(self):
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.16.0. Use Script(...).get_signatures instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
return self.get_signatures(*self._pos)
|
|
||||||
|
|
||||||
@validate_line_column
|
@validate_line_column
|
||||||
def get_signatures(self, line=None, column=None):
|
def get_signatures(self, line=None, column=None):
|
||||||
"""
|
"""
|
||||||
@@ -823,21 +741,6 @@ class Interpreter(Script):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def names(source=None, path=None, all_scopes=False,
|
|
||||||
definitions=True, references=False, environment=None):
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.16.0. Use Script(...).get_names instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
|
|
||||||
return Script(source, path=path).get_names(
|
|
||||||
all_scopes=all_scopes,
|
|
||||||
definitions=definitions,
|
|
||||||
references=references,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def preload_module(*modules):
|
def preload_module(*modules):
|
||||||
"""
|
"""
|
||||||
Preloading modules tells Jedi to load a module now, instead of lazy parsing
|
Preloading modules tells Jedi to load a module now, instead of lazy parsing
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ These classes are the much biggest part of the API, because they contain
|
|||||||
the interesting information about all operations.
|
the interesting information about all operations.
|
||||||
"""
|
"""
|
||||||
import re
|
import re
|
||||||
import warnings
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
@@ -451,14 +450,6 @@ class BaseName:
|
|||||||
return [self if n == self._name else Name(self._inference_state, n)
|
return [self if n == self._name else Name(self._inference_state, n)
|
||||||
for n in names]
|
for n in names]
|
||||||
|
|
||||||
def goto_assignments(self, **kwargs):
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.16.0. Use .goto.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
return self.goto(**kwargs)
|
|
||||||
|
|
||||||
@debug.increase_indent_cm('infer on name')
|
@debug.increase_indent_cm('infer on name')
|
||||||
def infer(self, *, only_stubs=False, prefer_stubs=False):
|
def infer(self, *, only_stubs=False, prefer_stubs=False):
|
||||||
"""
|
"""
|
||||||
@@ -495,28 +486,6 @@ class BaseName:
|
|||||||
return [self if n == self._name else Name(self._inference_state, n)
|
return [self if n == self._name else Name(self._inference_state, n)
|
||||||
for n in resulting_names]
|
for n in resulting_names]
|
||||||
|
|
||||||
@property # type: ignore[misc]
|
|
||||||
@memoize_method
|
|
||||||
def params(self):
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.16.0. Use get_signatures()[...].params",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
# Only return the first one. There might be multiple one, especially
|
|
||||||
# with overloading.
|
|
||||||
for signature in self._get_signatures():
|
|
||||||
return [
|
|
||||||
Name(self._inference_state, 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):
|
def parent(self):
|
||||||
"""
|
"""
|
||||||
Returns the parent scope of this identifier.
|
Returns the parent scope of this identifier.
|
||||||
@@ -779,15 +748,6 @@ class Name(BaseName):
|
|||||||
def __init__(self, inference_state, definition):
|
def __init__(self, inference_state, definition):
|
||||||
super().__init__(inference_state, definition)
|
super().__init__(inference_state, definition)
|
||||||
|
|
||||||
@property
|
|
||||||
def desc_with_module(self):
|
|
||||||
warnings.warn(
|
|
||||||
"Deprecated since version 0.17.0. No replacement for now, maybe .full_name helps",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2
|
|
||||||
)
|
|
||||||
return "%s:%s" % (self.module_name, self.description)
|
|
||||||
|
|
||||||
@memoize_method
|
@memoize_method
|
||||||
def defined_names(self):
|
def defined_names(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -253,7 +253,7 @@ def test_complex(Script, environment):
|
|||||||
|
|
||||||
|
|
||||||
def _params(Script, source, line=None, column=None):
|
def _params(Script, source, line=None, column=None):
|
||||||
signatures = Script(source, line, column).get_signatures()
|
signatures = Script(source).get_signatures(line, column)
|
||||||
assert len(signatures) == 1
|
assert len(signatures) == 1
|
||||||
return signatures[0].params
|
return signatures[0].params
|
||||||
|
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
import warnings
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
|
||||||
def check_for_warning(recwarn):
|
|
||||||
warnings.simplefilter("always")
|
|
||||||
with pytest.warns(DeprecationWarning):
|
|
||||||
yield
|
|
||||||
|
|
||||||
|
|
||||||
def test_goto_definitions(Script):
|
|
||||||
int_, = Script('x = 1\nx, y\ny', line=2, column=0).goto_definitions()
|
|
||||||
assert int_.name == 'int'
|
|
||||||
|
|
||||||
|
|
||||||
def test_completions(Script):
|
|
||||||
c1, c2 = Script('foobar = 1\nfoobaz= 2\nfoobaz, ffff\nfool = 3', line=3, column=3).completions()
|
|
||||||
assert c1.name == 'foobar'
|
|
||||||
assert c2.name == 'foobaz'
|
|
||||||
|
|
||||||
|
|
||||||
def test_goto_assignments(Script):
|
|
||||||
int_, = Script('x = 1\nx, y\ny', line=2, column=0).goto_assignments()
|
|
||||||
assert int_.get_line_code() == 'x = 1\n'
|
|
||||||
|
|
||||||
|
|
||||||
def test_usages(Script):
|
|
||||||
d1, d2 = Script('x = 1\nx, y\ny', line=2, column=0).usages()
|
|
||||||
assert d1.name == 'x'
|
|
||||||
assert d1.line == 1
|
|
||||||
assert d2.name == 'x'
|
|
||||||
assert d2.line == 2
|
|
||||||
|
|
||||||
|
|
||||||
def test_call_signatures(Script):
|
|
||||||
d1, = Script('abs(float(\nstr(', line=1, column=4).call_signatures()
|
|
||||||
assert d1.name == 'abs'
|
|
||||||
Reference in New Issue
Block a user