Skip to content

Commit

Permalink
Remove unused SymbolTable (#10544)
Browse files Browse the repository at this point in the history
All members of the `SymbolTable` are `TargetAdaptor`, so there is no reason for this dictionary anymore.

[ci skip-rust]
[ci skip-build-wheels]
  • Loading branch information
Eric-Arellano committed Aug 4, 2020
1 parent 6fd4dbb commit 4781aaa
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 44 deletions.
10 changes: 7 additions & 3 deletions src/python/pants/engine/internals/build_files_test.py
Expand Up @@ -30,7 +30,7 @@
strip_address_origins,
)
from pants.engine.internals.mapper import AddressFamily, AddressMapper
from pants.engine.internals.parser import BuildFilePreludeSymbols, Parser, SymbolTable
from pants.engine.internals.parser import BuildFilePreludeSymbols, Parser
from pants.engine.internals.scheduler import ExecutionError
from pants.engine.internals.target_adaptor import TargetAdaptor
from pants.engine.rules import RootRule
Expand All @@ -42,7 +42,9 @@

def test_parse_address_family_empty() -> None:
"""Test that parsing an empty BUILD file results in an empty AddressFamily."""
address_mapper = AddressMapper(parser=Parser(SymbolTable({}), BuildFileAliases()))
address_mapper = AddressMapper(
parser=Parser(target_type_aliases=[], object_aliases=BuildFileAliases())
)
af = run_rule(
parse_address_family,
rule_args=[address_mapper, BuildFilePreludeSymbols(FrozenDict()), Dir("/dev/null")],
Expand All @@ -60,7 +62,9 @@ def test_parse_address_family_empty() -> None:
def resolve_addresses_with_origins_from_address_specs(
address_specs: AddressSpecs, address_family: AddressFamily,
) -> AddressesWithOrigins:
address_mapper = AddressMapper(Parser(SymbolTable({}), BuildFileAliases()))
address_mapper = AddressMapper(
Parser(target_type_aliases=[], object_aliases=BuildFileAliases())
)
snapshot = Snapshot(Digest("xx", 2), ("root/BUILD",), ())
addresses_with_origins = run_rule(
addresses_with_origins_from_address_specs,
Expand Down
4 changes: 2 additions & 2 deletions src/python/pants/engine/internals/mapper_test.py
Expand Up @@ -9,14 +9,14 @@
from pants.build_graph.address import Address
from pants.build_graph.build_file_aliases import BuildFileAliases
from pants.engine.internals.mapper import AddressFamily, AddressMap, DifferingFamiliesError
from pants.engine.internals.parser import BuildFilePreludeSymbols, Parser, SymbolTable
from pants.engine.internals.parser import BuildFilePreludeSymbols, Parser
from pants.engine.internals.target_adaptor import TargetAdaptor
from pants.util.frozendict import FrozenDict


def parse_address_map(build_file: str) -> AddressMap:
path = "/dev/null"
parser = Parser(SymbolTable({"thing": TargetAdaptor}), BuildFileAliases())
parser = Parser(target_type_aliases=["thing"], object_aliases=BuildFileAliases())
address_map = AddressMap.parse(path, build_file, parser, BuildFilePreludeSymbols(FrozenDict()))
assert path == address_map.path
return address_map
Expand Down
40 changes: 15 additions & 25 deletions src/python/pants/engine/internals/parser.py
Expand Up @@ -5,7 +5,7 @@
import tokenize
from dataclasses import dataclass
from io import StringIO
from typing import Any, Dict, List, Tuple, Type, cast
from typing import Any, Dict, Iterable, List, Tuple, cast

from pants.base.exceptions import UnaddressableObjectError
from pants.base.parse_context import ParseContext
Expand All @@ -14,13 +14,6 @@
from pants.util.frozendict import FrozenDict


@dataclass(frozen=True)
class SymbolTable:
"""A symbol table dict mapping symbol name to implementation class."""

table: Dict[str, Type]


@dataclass(frozen=True)
class BuildFilePreludeSymbols:
symbols: FrozenDict[str, Any]
Expand All @@ -31,12 +24,16 @@ class ParseError(Exception):


class Parser:
def __init__(self, symbol_table: SymbolTable, aliases: BuildFileAliases) -> None:
self._symbols, self._parse_context = self._generate_symbols(symbol_table, aliases)
def __init__(
self, *, target_type_aliases: Iterable[str], object_aliases: BuildFileAliases
) -> None:
self._symbols, self._parse_context = self._generate_symbols(
target_type_aliases, object_aliases
)

@staticmethod
def _generate_symbols(
symbol_table: SymbolTable, aliases: BuildFileAliases,
target_type_aliases: Iterable[str], object_aliases: BuildFileAliases,
) -> Tuple[Dict[str, Any], ParseContext]:
symbols: Dict[str, Any] = {}

Expand All @@ -48,14 +45,11 @@ def _generate_symbols(
parse_context = ParseContext(rel_path=None, type_aliases=symbols)

class Registrar:
def __init__(self, parse_context: ParseContext, type_alias: str, object_type):
def __init__(self, parse_context: ParseContext, type_alias: str):
self._parse_context = parse_context
self._type_alias = type_alias
self._object_type = object_type

def __call__(self, *args, **kwargs):
if not issubclass(self._object_type, TargetAdaptor):
return self._object_type(*args, **kwargs)
# Target names default to the name of the directory their BUILD file is in
# (as long as it's not the root directory).
if "name" not in kwargs:
Expand All @@ -66,17 +60,13 @@ def __call__(self, *args, **kwargs):
)
kwargs["name"] = dirname
kwargs.setdefault("type_alias", self._type_alias)
obj = self._object_type(**kwargs)
self._parse_context._storage.add(obj)
return obj

for alias, symbol in symbol_table.table.items():
registrar = Registrar(parse_context, alias, object_type=symbol)
symbols[alias] = registrar

symbols.update(aliases.objects)
target_adaptor = TargetAdaptor(**kwargs)
self._parse_context._storage.add(target_adaptor)
return target_adaptor

for alias, object_factory in aliases.context_aware_object_factories.items():
symbols.update({alias: Registrar(parse_context, alias) for alias in target_type_aliases})
symbols.update(object_aliases.objects)
for alias, object_factory in object_aliases.context_aware_object_factories.items():
symbols[alias] = object_factory(parse_context)

return symbols, parse_context
Expand Down
9 changes: 4 additions & 5 deletions src/python/pants/engine/internals/parser_test.py
Expand Up @@ -4,13 +4,12 @@
import pytest

from pants.build_graph.build_file_aliases import BuildFileAliases
from pants.engine.internals.parser import BuildFilePreludeSymbols, ParseError, Parser, SymbolTable
from pants.engine.internals.target_adaptor import TargetAdaptor
from pants.engine.internals.parser import BuildFilePreludeSymbols, ParseError, Parser
from pants.util.frozendict import FrozenDict


def test_imports_banned() -> None:
parser = Parser(SymbolTable({}), BuildFileAliases())
parser = Parser(target_type_aliases=[], object_aliases=BuildFileAliases())
with pytest.raises(ParseError) as exc:
parser.parse(
"dir/BUILD", "\nx = 'hello'\n\nimport os\n", BuildFilePreludeSymbols(FrozenDict())
Expand All @@ -20,8 +19,8 @@ def test_imports_banned() -> None:

def test_unrecognized_symbol() -> None:
parser = Parser(
SymbolTable({"tgt": TargetAdaptor}),
BuildFileAliases(
target_type_aliases=["tgt"],
object_aliases=BuildFileAliases(
objects={"obj": 0},
context_aware_object_factories={"caof": lambda parse_context: lambda _: None},
),
Expand Down
12 changes: 3 additions & 9 deletions src/python/pants/init/engine_initializer.py
Expand Up @@ -19,10 +19,9 @@
from pants.engine.internals.build_files import create_graph_rules
from pants.engine.internals.mapper import AddressMapper
from pants.engine.internals.native import Native
from pants.engine.internals.parser import Parser, SymbolTable
from pants.engine.internals.parser import Parser
from pants.engine.internals.scheduler import Scheduler, SchedulerSession
from pants.engine.internals.selectors import Params
from pants.engine.internals.target_adaptor import TargetAdaptor
from pants.engine.platform import create_platform_rules
from pants.engine.process import InteractiveRunner
from pants.engine.rules import RootRule, collect_rules, rule
Expand Down Expand Up @@ -246,10 +245,9 @@ def setup_legacy_graph_extended(
union_membership = UnionMembership.from_rules(build_configuration.union_rules)

registered_target_types = RegisteredTargetTypes.create(build_configuration.target_types)
symbol_table_from_registered_targets = SymbolTable(
{target_type.alias: TargetAdaptor for target_type in registered_target_types.types}
parser = Parser(
target_type_aliases=registered_target_types.aliases, object_aliases=build_file_aliases
)
parser = Parser(symbol_table_from_registered_targets, build_file_aliases)
address_mapper = AddressMapper(
parser=parser,
prelude_glob_patterns=build_file_prelude_globs,
Expand All @@ -266,10 +264,6 @@ def glob_match_error_behavior_singleton() -> GlobMatchErrorBehavior:
def build_configuration_singleton() -> BuildConfiguration:
return build_configuration

@rule
def symbol_table_singleton() -> SymbolTable:
return symbol_table_from_registered_targets

@rule
def registered_target_types_singleton() -> RegisteredTargetTypes:
return registered_target_types
Expand Down

0 comments on commit 4781aaa

Please sign in to comment.