Merge pull request #1663 from PeterJCLaw/tidyups

Tidyups
This commit is contained in:
Dave Halter
2021-07-25 13:44:55 +02:00
committed by GitHub
11 changed files with 53 additions and 40 deletions

View File

@@ -105,6 +105,9 @@ class Script:
self.path = path.absolute() if path else None self.path = path.absolute() if path else None
if code is None: if code is None:
if path is None:
raise ValueError("Must provide at least one of code or path")
# 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:
code = f.read() code = f.read()

View File

@@ -205,7 +205,6 @@ def filter_follow_imports(names, follow_builtin_imports=False):
class CallDetails: class CallDetails:
def __init__(self, bracket_leaf, children, position): def __init__(self, bracket_leaf, children, position):
['bracket_leaf', 'call_index', 'keyword_name_str']
self.bracket_leaf = bracket_leaf self.bracket_leaf = bracket_leaf
self._children = children self._children = children
self._position = position self._position = position

View File

@@ -106,7 +106,16 @@ class Project:
with open(self._get_json_path(self._path), 'w') as f: with open(self._get_json_path(self._path), 'w') as f:
return json.dump((_SERIALIZER_VERSION, data), f) return json.dump((_SERIALIZER_VERSION, data), f)
def __init__(self, path, **kwargs): def __init__(
self,
path,
*,
environment_path=None,
load_unsafe_extensions=False,
sys_path=None,
added_sys_path=(),
smart_sys_path=True,
) -> None:
""" """
:param path: The base path for this project. :param path: The base path for this project.
:param environment_path: The Python executable path, typically the path :param environment_path: The Python executable path, typically the path
@@ -125,25 +134,22 @@ class Project:
local directories. Otherwise you will have to rely on your packages local directories. Otherwise you will have to rely on your packages
being properly configured on the ``sys.path``. being properly configured on the ``sys.path``.
""" """
def py2_comp(path, environment_path=None, load_unsafe_extensions=False,
sys_path=None, added_sys_path=(), smart_sys_path=True):
if isinstance(path, str):
path = Path(path).absolute()
self._path = path
self._environment_path = environment_path if isinstance(path, str):
if sys_path is not None: path = Path(path).absolute()
# Remap potential pathlib.Path entries self._path = path
sys_path = list(map(str, sys_path))
self._sys_path = sys_path self._environment_path = environment_path
self._smart_sys_path = smart_sys_path if sys_path is not None:
self._load_unsafe_extensions = load_unsafe_extensions
self._django = False
# Remap potential pathlib.Path entries # Remap potential pathlib.Path entries
self.added_sys_path = list(map(str, added_sys_path)) sys_path = list(map(str, sys_path))
"""The sys path that is going to be added at the end of the """ self._sys_path = sys_path
self._smart_sys_path = smart_sys_path
py2_comp(path, **kwargs) self._load_unsafe_extensions = load_unsafe_extensions
self._django = False
# Remap potential pathlib.Path entries
self.added_sys_path = list(map(str, added_sys_path))
"""The sys path that is going to be added at the end of the """
@property @property
def path(self): def path(self):

View File

@@ -106,10 +106,7 @@ def dbg(message, *args, color='GREEN'):
debug_function(color, i + 'dbg: ' + message % tuple(repr(a) for a in args)) debug_function(color, i + 'dbg: ' + message % tuple(repr(a) for a in args))
def warning(message, *args, **kwargs): def warning(message, *args, format=True):
format = kwargs.pop('format', True)
assert not kwargs
if debug_function and enable_warning: if debug_function and enable_warning:
i = ' ' * _debug_indent i = ' ' * _debug_indent
if format: if format:

View File

@@ -8,6 +8,8 @@ import warnings
import re import re
import builtins import builtins
import typing import typing
from pathlib import Path
from typing import Optional
from jedi.inference.compiled.getattr_static import getattr_static from jedi.inference.compiled.getattr_static import getattr_static
@@ -179,9 +181,9 @@ class DirectObjectAccess:
def py__bool__(self): def py__bool__(self):
return bool(self._obj) return bool(self._obj)
def py__file__(self): def py__file__(self) -> Optional[Path]:
try: try:
return self._obj.__file__ return Path(self._obj.__file__)
except AttributeError: except AttributeError:
return None return None

View File

@@ -7,6 +7,7 @@ goals:
2. Make it possible to handle different Python versions as well as virtualenvs. 2. Make it possible to handle different Python versions as well as virtualenvs.
""" """
import collections
import os import os
import sys import sys
import queue import queue
@@ -168,7 +169,7 @@ class CompiledSubprocess:
def __init__(self, executable, env_vars=None): def __init__(self, executable, env_vars=None):
self._executable = executable self._executable = executable
self._env_vars = env_vars self._env_vars = env_vars
self._inference_state_deletion_queue = queue.deque() self._inference_state_deletion_queue = collections.deque()
self._cleanup_callable = lambda: None self._cleanup_callable = lambda: None
def __repr__(self): def __repr__(self):

View File

@@ -5,6 +5,7 @@ import re
from functools import partial from functools import partial
from inspect import Parameter from inspect import Parameter
from pathlib import Path from pathlib import Path
from typing import Optional
from jedi import debug from jedi import debug
from jedi.inference.utils import to_list from jedi.inference.utils import to_list
@@ -305,11 +306,8 @@ class CompiledModule(CompiledValue):
return () return ()
return tuple(name.split('.')) return tuple(name.split('.'))
def py__file__(self): def py__file__(self) -> Optional[Path]:
path = self.access_handle.py__file__() return self.access_handle.py__file__() # type: ignore[no-any-return]
if path is None:
return None
return Path(path)
class CompiledName(AbstractNameDefinition): class CompiledName(AbstractNameDefinition):

View File

@@ -1,5 +1,7 @@
from abc import abstractmethod from abc import abstractmethod
from contextlib import contextmanager from contextlib import contextmanager
from pathlib import Path
from typing import Optional
from parso.tree import search_ancestor from parso.tree import search_ancestor
from parso.python.tree import Name from parso.python.tree import Name
@@ -307,8 +309,8 @@ class FunctionContext(TreeContextMixin, ValueContext):
class ModuleContext(TreeContextMixin, ValueContext): class ModuleContext(TreeContextMixin, ValueContext):
def py__file__(self): def py__file__(self) -> Optional[Path]:
return self._value.py__file__() return self._value.py__file__() # type: ignore[no-any-return]
def get_filters(self, until_position=None, origin_scope=None): def get_filters(self, until_position=None, origin_scope=None):
filters = self._value.get_filters(origin_scope) filters = self._value.get_filters(origin_scope)
@@ -355,8 +357,8 @@ class NamespaceContext(TreeContextMixin, ValueContext):
def string_names(self): def string_names(self):
return self._value.string_names return self._value.string_names
def py__file__(self): def py__file__(self) -> Optional[Path]:
return self._value.py__file__() return self._value.py__file__() # type: ignore[no-any-return]
class ClassContext(TreeContextMixin, ValueContext): class ClassContext(TreeContextMixin, ValueContext):
@@ -405,8 +407,8 @@ class CompiledModuleContext(CompiledContext):
def string_names(self): def string_names(self):
return self._value.string_names return self._value.string_names
def py__file__(self): def py__file__(self) -> Optional[Path]:
return self._value.py__file__() return self._value.py__file__() # type: ignore[no-any-return]
def _get_global_filters_for_name(context, name_or_none, position): def _get_global_filters_for_name(context, name_or_none, position):

View File

@@ -431,6 +431,9 @@ class NewType(Value):
from jedi.inference.compiled.value import CompiledValueName from jedi.inference.compiled.value import CompiledValueName
return CompiledValueName(self, 'NewType') return CompiledValueName(self, 'NewType')
def __repr__(self) -> str:
return '<NewType: %s>%s' % (self.tree_node, self._type_value_set)
class CastFunction(ValueWrapper): class CastFunction(ValueWrapper):
@repack_with_argument_clinic('type, object, /') @repack_with_argument_clinic('type, object, /')

View File

@@ -186,7 +186,6 @@ def _get_buildout_script_paths(search_path: Path):
directory that look like python files. directory that look like python files.
:param search_path: absolute path to the module. :param search_path: absolute path to the module.
:type search_path: str
""" """
project_root = _get_parent_dir_with_file(search_path, 'buildout.cfg') project_root = _get_parent_dir_with_file(search_path, 'buildout.cfg')
if not project_root: if not project_root:
@@ -205,7 +204,7 @@ def _get_buildout_script_paths(search_path: Path):
except (UnicodeDecodeError, IOError) as e: except (UnicodeDecodeError, IOError) as e:
# Probably a binary file; permission error or race cond. because # Probably a binary file; permission error or race cond. because
# file got deleted. Ignore it. # file got deleted. Ignore it.
debug.warning(e) debug.warning(str(e))
continue continue

View File

@@ -1,3 +1,6 @@
from pathlib import Path
from typing import Optional
from jedi.inference.cache import inference_state_method_cache from jedi.inference.cache import inference_state_method_cache
from jedi.inference.filters import DictFilter from jedi.inference.filters import DictFilter
from jedi.inference.names import ValueNameMixin, AbstractNameDefinition from jedi.inference.names import ValueNameMixin, AbstractNameDefinition
@@ -41,7 +44,7 @@ class ImplicitNamespaceValue(Value, SubModuleDictMixin):
string_name = self.py__package__()[-1] string_name = self.py__package__()[-1]
return ImplicitNSName(self, string_name) return ImplicitNSName(self, string_name)
def py__file__(self): def py__file__(self) -> Optional[Path]:
return None return None
def py__package__(self): def py__package__(self):