Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PR: (Permanent Draft) record EKR's experiments #600

Closed
wants to merge 11 commits into from
3 changes: 2 additions & 1 deletion rope/base/arguments.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import ast

import rope.base.evaluate
from rope.base import ast


class Arguments:
Expand Down
2 changes: 1 addition & 1 deletion rope/base/builtins.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
"""This module tries to support builtin types and functions."""
import ast
import inspect
import io

import rope.base.evaluate
from rope.base import (
arguments,
ast,
pynames,
pyobjects,
utils,
Expand Down
7 changes: 4 additions & 3 deletions rope/base/evaluate.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import ast
from operator import itemgetter
from typing import Optional, Tuple

Expand All @@ -6,11 +7,11 @@
import rope.base.pyobjects
from rope.base import (
arguments,
ast,
nameanalyze,
exceptions,
pyobjects,
pyobjectsdef,
rast,
worder,
)

Expand Down Expand Up @@ -50,7 +51,7 @@ def eval_str(holding_scope, name):
def eval_str2(holding_scope, name):
try:
# parenthesizing for handling cases like 'a_var.\nattr'
node = ast.parse("(%s)" % name)
node = rast.parse("(%s)" % name)
except SyntaxError:
raise BadIdentifierError("Not a resolvable python identifier selected.")
return eval_node2(holding_scope, node)
Expand Down Expand Up @@ -158,7 +159,7 @@ def _find_module(self, module_name):
)


class StatementEvaluator(ast.RopeNodeVisitor):
class StatementEvaluator(rast.RopeNodeVisitor):
def __init__(self, scope):
self.scope = scope
self.result = None
Expand Down
6 changes: 4 additions & 2 deletions rope/base/nameanalyze.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from rope.base import ast
import ast

from rope.base import rast


def get_name_levels(node):
Expand All @@ -18,7 +20,7 @@ def get_name_levels(node):
return visitor.names


class _NodeNameCollector(ast.RopeNodeVisitor):
class _NodeNameCollector(rast.RopeNodeVisitor):
def __init__(self, levels=None):
self.names = []
self.levels = levels
Expand Down
19 changes: 10 additions & 9 deletions rope/base/oi/soa.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import rope.base.ast
import ast

import rope.base.oi.soi
import rope.base.pynames
from rope.base import pyobjects, evaluate, nameanalyze, arguments
from rope.base import arguments, pyobjects, evaluate, nameanalyze, rast


def analyze_module(pycore, pymodule, should_analyze, search_subscopes, followed_calls):
Expand Down Expand Up @@ -33,11 +34,11 @@ def _follow(pyfunction):
if not followed_calls:
_follow = None
visitor = SOAVisitor(pycore, pydefined, _follow)
for child in rope.base.ast.iter_child_nodes(pydefined.get_ast()):
for child in ast.iter_child_nodes(pydefined.get_ast()):
visitor.visit(child)


class SOAVisitor(rope.base.ast.RopeNodeVisitor):
class SOAVisitor(rast.RopeNodeVisitor):
def __init__(self, pycore, pydefined, follow_callback=None):
self.pycore = pycore
self.pymodule = pydefined.get_module()
Expand All @@ -51,7 +52,7 @@ def _ClassDef(self, node):
pass

def _Call(self, node):
for child in rope.base.ast.iter_child_nodes(node):
for child in ast.iter_child_nodes(node):
self.visit(child)
primary, pyname = evaluate.eval_node2(self.scope, node.func)
if pyname is None:
Expand Down Expand Up @@ -99,7 +100,7 @@ def _parameter_objects(self, pyfunction):
]

def _AnnAssign(self, node):
for child in rope.base.ast.iter_child_nodes(node):
for child in ast.iter_child_nodes(node):
self.visit(child)
visitor = _SOAAssignVisitor()
nodes = []
Expand All @@ -110,7 +111,7 @@ def _AnnAssign(self, node):
self._evaluate_assign_value(node, nodes, type_hint=node.annotation)

def _Assign(self, node):
for child in rope.base.ast.iter_child_nodes(node):
for child in ast.iter_child_nodes(node):
self.visit(child)
visitor = _SOAAssignVisitor()
nodes = []
Expand Down Expand Up @@ -145,7 +146,7 @@ def __init__(self):
self.nodes = []

def _added(self, node, levels):
if isinstance(node, rope.base.ast.Subscript) and isinstance(
node.slice, (rope.base.ast.Index, rope.base.ast.expr)
if isinstance(node, ast.Subscript) and isinstance(
node.slice, (ast.Index, ast.expr)
):
self.nodes.append((node, levels))
5 changes: 3 additions & 2 deletions rope/base/oi/type_hinting/providers/numpydocstrings.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
https://github.com/davidhalter/jedi/blob/b489019f5bd5750051122b94cc767df47751ecb7/jedi/evaluate/docstrings.py
Thanks to @davidhalter for this utils under MIT License.
"""
import ast
import re
from rope.base.ast import literal_eval

from rope.base.oi.type_hinting.providers import docstrings

try:
Expand All @@ -26,7 +27,7 @@ def __call__(self, docstring, param_name):
p_type = m.group(1)

if p_type.startswith("{"):
types = {type(x).__name__ for x in literal_eval(p_type)}
types = {type(x).__name__ for x in ast.literal_eval(p_type)}
return list(types)
else:
return [p_type]
Expand Down
2 changes: 1 addition & 1 deletion rope/base/prefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ def add(self, key: str, value: Any):
self[key] = []
getattr(self, key).append(value)

def get(self, key: str, default: Any = None):
def get(self, key: str, default: Any=None):
"""Get the value of the key preference"""
return getattr(self, key, default)

Expand Down
3 changes: 1 addition & 2 deletions rope/base/pynamesdef.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import rope.base.oi.soi
from rope.base import pynames
from rope.base.pynames import *
from rope.base import pynames, utils


class AssignedName(pynames.AssignedName):
Expand Down
3 changes: 2 additions & 1 deletion rope/base/pyobjects.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import ast
from typing import Optional

from rope.base import ast, exceptions, utils
from rope.base import exceptions, utils


class PyObject:
Expand Down
52 changes: 28 additions & 24 deletions rope/base/pyobjectsdef.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import ast

import rope.base.builtins
import rope.base.codeanalyze
import rope.base.evaluate
import rope.base.libutils
import rope.base.oi.soi
import rope.base.pyscopes
from rope.base import (
pynames,
pynamesdef,
exceptions,
ast,
rast,
nameanalyze,
pyobjects,
fscommands,
Expand Down Expand Up @@ -177,7 +180,7 @@ def __init__(self, pycore, source=None, resource=None, force_errors=False):
raise
else:
source = "\n"
node = ast.parse("\n")
node = rast.parse("\n")
self.source_code = source
self.star_imports = []
self.visitor_class = _GlobalVisitor
Expand All @@ -197,7 +200,7 @@ def _init_source(self, pycore, source_code, resource):
source_bytes = fscommands.unicode_to_file_data(source_code)
else:
source_bytes = source_code
ast_node = ast.parse(source_bytes, filename=filename)
ast_node = rast.parse(source_bytes, filename=filename)
except SyntaxError as e:
raise exceptions.ModuleSyntaxError(filename, e.lineno, e.msg)
except UnicodeDecodeError as e:
Expand Down Expand Up @@ -239,7 +242,7 @@ def __init__(self, pycore, resource=None, force_errors=False):
init_dot_py, force_errors=force_errors
).get_ast()
else:
ast_node = ast.parse("\n")
ast_node = rast.parse("\n")
super().__init__(pycore, ast_node, resource)

def _create_structural_attributes(self):
Expand All @@ -251,7 +254,7 @@ def _create_structural_attributes(self):
if self.resource is None:
return result
for name, resource in self._get_child_resources().items():
result[name] = pynamesdef.ImportedModule(self, resource=resource)
result[name] = pynames.ImportedModule(self, resource=resource)
return result

def _create_concluded_attributes(self):
Expand Down Expand Up @@ -291,7 +294,7 @@ def get_name(self):
return rope.base.libutils.modname(self.resource) if self.resource else ""


class _AnnAssignVisitor(ast.RopeNodeVisitor):
class _AnnAssignVisitor(rast.RopeNodeVisitor):
def __init__(self, scope_visitor):
self.scope_visitor = scope_visitor
self.assigned_ast = None
Expand All @@ -307,7 +310,7 @@ def _assigned(self, name, assignment=None):
self.scope_visitor._assigned(name, assignment)

def _Name(self, node):
assignment = pynamesdef.AssignmentValue(
assignment = pynames.AssignmentValue(
self.assigned_ast, assign_type=True, type_hint=self.type_hint
)
self._assigned(node.id, assignment)
Expand All @@ -317,7 +320,7 @@ def _Tuple(self, node):
for name, levels in names:
assignment = None
if self.assigned_ast is not None:
assignment = pynamesdef.AssignmentValue(self.assigned_ast, levels)
assignment = pynames.AssignmentValue(self.assigned_ast, levels)
self._assigned(name, assignment)

def _Annotation(self, node):
Expand All @@ -333,7 +336,7 @@ def _Slice(self, node):
pass


class _ExpressionVisitor(ast.RopeNodeVisitor):
class _ExpressionVisitor(rast.RopeNodeVisitor):
def __init__(self, scope_visitor):
self.scope_visitor = scope_visitor

Expand All @@ -360,7 +363,7 @@ def _NamedExpr(self, node):
self.visit(node.value)


class _AssignVisitor(ast.RopeNodeVisitor):
class _AssignVisitor(rast.RopeNodeVisitor):
def __init__(self, scope_visitor):
self.scope_visitor = scope_visitor
self.assigned_ast = None
Expand All @@ -377,15 +380,16 @@ def _assigned(self, name, assignment=None):
def _Name(self, node):
assignment = None
if self.assigned_ast is not None:
assignment = pynamesdef.AssignmentValue(self.assigned_ast)
assignment = pynames.AssignmentValue(self.assigned_ast)

self._assigned(node.id, assignment)

def _Tuple(self, node):
names = nameanalyze.get_name_levels(node)
for name, levels in names:
assignment = None
if self.assigned_ast is not None:
assignment = pynamesdef.AssignmentValue(self.assigned_ast, levels)
assignment = pynames.AssignmentValue(self.assigned_ast, levels)
self._assigned(name, assignment)

def _Attribute(self, node):
Expand Down Expand Up @@ -414,7 +418,7 @@ def get_module(self):

def _ClassDef(self, node):
pyclass = PyClass(self.pycore, node, self.owner_object)
self.names[node.name] = pynamesdef.DefinedName(pyclass)
self.names[node.name] = pynames.DefinedName(pyclass)
self.defineds.append(pyclass)

def _FunctionDef(self, node):
Expand All @@ -423,7 +427,7 @@ def _FunctionDef(self, node):
if isinstance(decorator, ast.Name) and decorator.id == "property":
if isinstance(self, _ClassVisitor):
type_ = rope.base.builtins.Property(pyfunction)
arg = pynamesdef.UnboundName(
arg = pynames.UnboundName(
rope.base.pyobjects.PyObject(self.owner_object)
)

Expand All @@ -434,12 +438,12 @@ def _eval(type_=type_, arg=arg):

lineno = utils.guess_def_lineno(self.get_module(), node)

self.names[node.name] = pynamesdef.EvaluatedName(
self.names[node.name] = pynames.EvaluatedName(
_eval, module=self.get_module(), lineno=lineno
)
break
else:
self.names[node.name] = pynamesdef.DefinedName(pyfunction)
self.names[node.name] = pynames.DefinedName(pyfunction)
self.defineds.append(pyfunction)

def _AsyncFunctionDef(self, node):
Expand Down Expand Up @@ -476,12 +480,12 @@ def _update_evaluated(
):
result = {}
if isinstance(targets, str):
assignment = pynamesdef.AssignmentValue(assigned, [], evaluation, eval_type)
assignment = pynames.AssignmentValue(assigned, [], evaluation, eval_type)
self._assigned(targets, assignment)
else:
names = nameanalyze.get_name_levels(targets)
for name, levels in names:
assignment = pynamesdef.AssignmentValue(
assignment = pynames.AssignmentValue(
assigned, levels, evaluation, eval_type
)
self._assigned(name, assignment)
Expand Down Expand Up @@ -519,19 +523,19 @@ def _Import(self, node):
alias = import_pair.asname
first_package = module_name.split(".")[0]
if alias is not None:
imported = pynamesdef.ImportedModule(self.get_module(), module_name)
imported = pynames.ImportedModule(self.get_module(), module_name)
if not self._is_ignored_import(imported):
self.names[alias] = imported
else:
imported = pynamesdef.ImportedModule(self.get_module(), first_package)
imported = pynames.ImportedModule(self.get_module(), first_package)
if not self._is_ignored_import(imported):
self.names[first_package] = imported

def _ImportFrom(self, node):
level = 0
if node.level:
level = node.level
imported_module = pynamesdef.ImportedModule(
imported_module = pynames.ImportedModule(
self.get_module(),
node.module or "",
level,
Expand All @@ -547,7 +551,7 @@ def _ImportFrom(self, node):
alias = imported_name.asname
if alias is not None:
imported = alias
self.names[imported] = pynamesdef.ImportedName(
self.names[imported] = pynames.ImportedName(
imported_module, imported_name.name
)

Expand Down Expand Up @@ -636,7 +640,7 @@ def _Attribute(self, node):
pyname = self.scope_visitor.names[node.attr]
if isinstance(pyname, pynamesdef.AssignedName):
pyname.assignments.append(
pynamesdef.AssignmentValue(self.assigned_ast)
pynames.AssignmentValue(self.assigned_ast)
)

def _Tuple(self, node):
Expand Down Expand Up @@ -670,5 +674,5 @@ def get_names(self):
imported = self.imported_module.get_object()
for name in imported:
if not name.startswith("_"):
result[name] = pynamesdef.ImportedName(self.imported_module, name)
result[name] = pynames.ImportedName(self.imported_module, name)
return result
Loading