From 4781aaa90daa86fb04862b677ee9906c09543515 Mon Sep 17 00:00:00 2001 From: Eric Arellano <14852634+Eric-Arellano@users.noreply.github.com> Date: Tue, 4 Aug 2020 10:49:25 -0700 Subject: [PATCH] Remove unused `SymbolTable` (#10544) All members of the `SymbolTable` are `TargetAdaptor`, so there is no reason for this dictionary anymore. [ci skip-rust] [ci skip-build-wheels] --- .../engine/internals/build_files_test.py | 10 +++-- .../pants/engine/internals/mapper_test.py | 4 +- src/python/pants/engine/internals/parser.py | 40 +++++++------------ .../pants/engine/internals/parser_test.py | 9 ++--- src/python/pants/init/engine_initializer.py | 12 ++---- 5 files changed, 31 insertions(+), 44 deletions(-) diff --git a/src/python/pants/engine/internals/build_files_test.py b/src/python/pants/engine/internals/build_files_test.py index f6a4329ef94..14bb3af6584 100644 --- a/src/python/pants/engine/internals/build_files_test.py +++ b/src/python/pants/engine/internals/build_files_test.py @@ -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 @@ -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")], @@ -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, diff --git a/src/python/pants/engine/internals/mapper_test.py b/src/python/pants/engine/internals/mapper_test.py index 84a6321a3a2..b7f26fa0439 100644 --- a/src/python/pants/engine/internals/mapper_test.py +++ b/src/python/pants/engine/internals/mapper_test.py @@ -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 diff --git a/src/python/pants/engine/internals/parser.py b/src/python/pants/engine/internals/parser.py index 84ccabe5507..e05eb0b468a 100644 --- a/src/python/pants/engine/internals/parser.py +++ b/src/python/pants/engine/internals/parser.py @@ -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 @@ -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] @@ -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] = {} @@ -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: @@ -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 diff --git a/src/python/pants/engine/internals/parser_test.py b/src/python/pants/engine/internals/parser_test.py index 38d9bee519a..311ac1253c2 100644 --- a/src/python/pants/engine/internals/parser_test.py +++ b/src/python/pants/engine/internals/parser_test.py @@ -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()) @@ -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}, ), diff --git a/src/python/pants/init/engine_initializer.py b/src/python/pants/init/engine_initializer.py index 18bcd2b165c..d49578076f6 100644 --- a/src/python/pants/init/engine_initializer.py +++ b/src/python/pants/init/engine_initializer.py @@ -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 @@ -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, @@ -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