From 213b335cd52ef06f8660c812f87e648e9907cabe Mon Sep 17 00:00:00 2001 From: Jimmy Lai Date: Mon, 16 Sep 2019 16:33:04 -0700 Subject: [PATCH] move metadata providers its data structures to libcst.metadata --- docs/source/metadata.rst | 1 + libcst/__init__.py | 36 +---------------- libcst/_batched_visitor.py | 6 +-- .../dependent.py => _metadata_dependent.py} | 0 libcst/_visitors.py | 2 +- libcst/metadata/__init__.py | 39 +++++++++++++++++++ libcst/metadata/base_provider.py | 4 +- libcst/metadata/scope_provider.py | 8 ++-- 8 files changed, 50 insertions(+), 46 deletions(-) rename libcst/{metadata/dependent.py => _metadata_dependent.py} (100%) diff --git a/docs/source/metadata.rst b/docs/source/metadata.rst index 02c05e14..d82ed0c7 100644 --- a/docs/source/metadata.rst +++ b/docs/source/metadata.rst @@ -67,6 +67,7 @@ your provider does not use the visitor pattern for computing metadata for a tree Metadata Providers ------------------ + Position Metadata ----------------- diff --git a/libcst/__init__.py b/libcst/__init__.py index 36089b3e..e9a57b70 100644 --- a/libcst/__init__.py +++ b/libcst/__init__.py @@ -8,6 +8,7 @@ from libcst._batched_visitor import BatchableCSTVisitor, visit_batched from libcst._exceptions import MetadataException, ParserSyntaxError from libcst._helpers import ensure_type from libcst._maybe_sentinel import MaybeSentinel +from libcst._metadata_dependent import MetadataDependent from libcst._nodes._base import CSTNode, CSTValidationError from libcst._nodes._expression import ( Annotation, @@ -191,27 +192,6 @@ from libcst.metadata.base_provider import ( BatchableMetadataProvider, VisitorMetadataProvider, ) -from libcst.metadata.dependent import MetadataDependent -from libcst.metadata.expression_context_provider import ( - ExpressionContext, - ExpressionContextProvider, -) -from libcst.metadata.position_provider import ( - BasicPositionProvider, - SyntacticPositionProvider, -) -from libcst.metadata.scope_provider import ( - Access, - Assignment, - BaseAssignment, - BuiltinAssignmemt, - ClassScope, - ComprehensionScope, - FunctionScope, - GlobalScope, - Scope, - ScopeProvider, -) from libcst.metadata.wrapper import MetadataWrapper @@ -403,19 +383,5 @@ __all__ = [ "BatchableMetadataProvider", "VisitorMetadataProvider", "MetadataDependent", - "BasicPositionProvider", - "SyntacticPositionProvider", "MetadataWrapper", - "ExpressionContext", - "ExpressionContextProvider", - "BaseAssignment", - "Assignment", - "BuiltinAssignmemt", - "Access", - "Scope", - "GlobalScope", - "FunctionScope", - "ClassScope", - "ComprehensionScope", - "ScopeProvider", ] diff --git a/libcst/_batched_visitor.py b/libcst/_batched_visitor.py index 82c7d9c0..98daa7f5 100644 --- a/libcst/_batched_visitor.py +++ b/libcst/_batched_visitor.py @@ -16,15 +16,13 @@ from typing import ( cast, ) +from libcst._metadata_dependent import MetadataDependent from libcst._typed_visitor import CSTTypedVisitorFunctions from libcst._visitors import CSTNodeT, CSTVisitor -from libcst.metadata.dependent import MetadataDependent if TYPE_CHECKING: from libcst._nodes._base import CSTNode # noqa: F401 - from libcst.metadata.base_provider import ProviderT # noqa: F401 - VisitorMethod = Callable[["CSTNode"], None] _VisitorMethodCollection = Mapping[str, List[VisitorMethod]] @@ -76,7 +74,7 @@ def visit_batched( methods from each visitor in ``visitor`` are executed by the batched visitor. This function does not handle metadata dependency resolution for ``visitors``. - See :func:`~libcst.MetadataWrapper.visit_batched` from + See :func:`~libcst.MetadataWrapper.visit_batched` from :class:`~libcst.MetadataWrapper` for batched traversal with metadata dependency resolution. """ diff --git a/libcst/metadata/dependent.py b/libcst/_metadata_dependent.py similarity index 100% rename from libcst/metadata/dependent.py rename to libcst/_metadata_dependent.py diff --git a/libcst/_visitors.py b/libcst/_visitors.py index ac0dfdd0..7f07f9d2 100644 --- a/libcst/_visitors.py +++ b/libcst/_visitors.py @@ -6,10 +6,10 @@ # pyre-strict from typing import TYPE_CHECKING, Union +from libcst._metadata_dependent import MetadataDependent from libcst._removal_sentinel import RemovalSentinel from libcst._typed_visitor import CSTTypedTransformerFunctions, CSTTypedVisitorFunctions from libcst._types import CSTNodeT -from libcst.metadata.dependent import MetadataDependent if TYPE_CHECKING: diff --git a/libcst/metadata/__init__.py b/libcst/metadata/__init__.py index 09af7bcf..3ec62770 100644 --- a/libcst/metadata/__init__.py +++ b/libcst/metadata/__init__.py @@ -4,3 +4,42 @@ # LICENSE file in the root directory of this source tree. # pyre-strict + +from libcst.metadata.expression_context_provider import ( + ExpressionContext, + ExpressionContextProvider, +) +from libcst.metadata.position_provider import ( + BasicPositionProvider, + SyntacticPositionProvider, +) +from libcst.metadata.scope_provider import ( + Access, + Assignment, + BaseAssignment, + BuiltinAssignment, + ClassScope, + ComprehensionScope, + FunctionScope, + GlobalScope, + Scope, + ScopeProvider, +) + + +__all__ = [ + "BasicPositionProvider", + "SyntacticPositionProvider", + "ExpressionContext", + "ExpressionContextProvider", + "BaseAssignment", + "Assignment", + "BuiltinAssignment", + "Access", + "Scope", + "GlobalScope", + "FunctionScope", + "ClassScope", + "ComprehensionScope", + "ScopeProvider", +] diff --git a/libcst/metadata/base_provider.py b/libcst/metadata/base_provider.py index 0eb912ad..47c7743c 100644 --- a/libcst/metadata/base_provider.py +++ b/libcst/metadata/base_provider.py @@ -18,12 +18,12 @@ from typing import ( ) from libcst._batched_visitor import BatchableCSTVisitor -from libcst._visitors import CSTVisitor -from libcst.metadata.dependent import ( +from libcst._metadata_dependent import ( _T as _MetadataT, _UNDEFINED_DEFAULT, MetadataDependent, ) +from libcst._visitors import CSTVisitor if TYPE_CHECKING: diff --git a/libcst/metadata/scope_provider.py b/libcst/metadata/scope_provider.py index b916931a..801729f4 100644 --- a/libcst/metadata/scope_provider.py +++ b/libcst/metadata/scope_provider.py @@ -73,7 +73,7 @@ class Assignment(BaseAssignment): super().__init__(name, scope) -class BuiltinAssignmemt(BaseAssignment): +class BuiltinAssignment(BaseAssignment): """ A BuiltinAssignment represents an value provide by Python as a builtin, including `functions `_, @@ -137,7 +137,7 @@ class Scope(abc.ABC): class GlobalScope(Scope): """ - A GlobalScope is the scope of module. All module level assignments are recorded in GlobalScope. + A GlobalScope is the scope of module. All module level assignments are recorded in GlobalScope. """ def __init__(self) -> None: @@ -147,9 +147,9 @@ class GlobalScope(Scope): def __getitem__(self, name: str) -> Tuple[BaseAssignment, ...]: if hasattr(builtins, name): if not any( - isinstance(i, BuiltinAssignmemt) for i in self._assignments[name] + isinstance(i, BuiltinAssignment) for i in self._assignments[name] ): - self._assignments[name].append(BuiltinAssignmemt(name, self)) + self._assignments[name].append(BuiltinAssignment(name, self)) return tuple(self._assignments[name]) def record_global_overwrite(self, name: str) -> None: