Skip to content

Commit

Permalink
use get_docstring pref
Browse files Browse the repository at this point in the history
  • Loading branch information
bagel897 committed Jan 10, 2024
1 parent 3099c2a commit de88e8e
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 21 deletions.
37 changes: 22 additions & 15 deletions rope/contrib/autoimport/parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,33 +42,35 @@ def get_names_from_file(
package_name: str = "",
underlined: bool = False,
process_imports: bool = False,
get_docstring: bool = False,
) -> Generator[PartialName, None, None]:
"""Get all the names from a given file using ast."""
try:
root_node = ast.parse(module.read_bytes())
except SyntaxError as error:
print(error)
return
mod_desc: str = ast.get_docstring(root_node) or ""
mod_desc: str = ast.get_docstring(root_node) or "" if get_docstring else ""
for node in ast.iter_child_nodes(root_node):
if isinstance(node, ast.Assign):
for target in node.targets:
try:
assert isinstance(target, ast.Name)
if underlined or not target.id.startswith("_"):
try:
doc = ast.get_docstring(node.value, clean=True)
except:
logger.debug(
"failed to get doc for %r, a value for %r",
node.value,
target.id,
)
doc = ""
doc = ""
if get_docstring:
try:
doc = ast.get_docstring(node.value, clean=True)
except:
logger.debug(
"failed to get doc for %r, a value for %r",
node.value,
target.id,
)
yield PartialName(
target.id,
get_type_ast(node),
doc,
doc or "",
mod_desc,
)
except (AttributeError, AssertionError):
Expand Down Expand Up @@ -114,11 +116,15 @@ def get_type_object(imported_object) -> NameType:
return NameType.Variable


def get_names(module: ModuleInfo, package: Package) -> List[Name]:
def get_names(
module: ModuleInfo, package: Package, get_docstring: bool = False
) -> List[Name]:
"""Get all names from a module and package."""
if isinstance(module, ModuleCompiled):
return list(
get_names_from_compiled(package.name, package.source, module.underlined)
get_names_from_compiled(
package.name, package.source, module.underlined, get_docstring
)
)
if isinstance(module, ModuleFile):
return [
Expand All @@ -137,6 +143,7 @@ def get_names_from_compiled(
package: str,
source: Source,
underlined: bool = False,
get_docstring: bool = False,
) -> Generator[Name, None, None]:
"""
Get the names from a compiled module.
Expand All @@ -162,7 +169,7 @@ def get_names_from_compiled(
logger.error(f"{package} could not be imported for autoimport analysis")
return
else:
mod_desc: str = inspect.getdoc(module) or ""
mod_desc: str = inspect.getdoc(module) or "" if get_docstring else ""
for name, value in inspect.getmembers(module):
if underlined or not name.startswith("_"):
if (
Expand All @@ -176,7 +183,7 @@ def get_names_from_compiled(
package,
source,
get_type_object(value),
inspect.getdoc(value) or "",
inspect.getdoc(value) or "" if get_docstring else "",
mod_desc,
)

Expand Down
25 changes: 19 additions & 6 deletions rope/contrib/autoimport/sqlite.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from packaging.requirements import Requirement

from rope.base import exceptions, libutils, resourceobserver, taskhandle, versioning
from rope.base.prefs import AutoimportPrefs
from rope.base.prefs import AutoimportPrefs, DocumentationMode
from rope.base.project import Project
from rope.base.resources import Resource
from rope.contrib.autoimport import models
Expand All @@ -44,15 +44,18 @@


def get_future_names(
packages: List[Package], underlined: bool, job_set: taskhandle.BaseJobSet
packages: List[Package],
underlined: bool,
job_set: taskhandle.BaseJobSet,
get_docstring: bool,
) -> Generator[Future, None, None]:
"""Get all names as futures."""
with ProcessPoolExecutor() as executor:
for package in packages:
for module in get_files(package, underlined):
job_set.started_job(module.modname)
job_set.increment()
yield executor.submit(get_names, module, package)
yield executor.submit(get_names, module, package, get_docstring)


def filter_packages(
Expand Down Expand Up @@ -457,12 +460,16 @@ def generate_modules_cache(
for package in packages:
for module in get_files(package, underlined):
job_set.started_job(module.modname)
for name in get_names(module, package):
for name in get_names(
module, package, self._should_preproccess_docstring
):
self._add_name(name)
job_set.finished_job()
else:
for future_name in as_completed(
get_future_names(packages, underlined, job_set)
get_future_names(
packages, underlined, job_set, self._should_preproccess_docstring
)
):
self._add_names(future_name.result())
job_set.finished_job()
Expand Down Expand Up @@ -560,7 +567,9 @@ def update_resource(
underlined = underlined if underlined else self.prefs.underlined
module = self._resource_to_module(resource, underlined)
self._del_if_exist(module_name=module.modname, commit=False)
for name in get_names(module, self.project_package):
for name in get_names(
module, self.project_package, self._should_preproccess_docstring
):
self._add_name(name)
if commit:
self.connection.commit()
Expand Down Expand Up @@ -697,3 +706,7 @@ def _execute(self, query: models.FinalQuery, *args, **kwargs):
def _executemany(self, query: models.FinalQuery, *args, **kwargs):
assert isinstance(query, models.FinalQuery)
return self.connection.executemany(query._query, *args, **kwargs)

@property
def _should_preproccess_docstring(self) -> bool:
return self.prefs.documentation is DocumentationMode.ENABLED

0 comments on commit de88e8e

Please sign in to comment.