Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/libcst/_parser/python_parser.py: 71%
21 statements
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-25 06:43 +0000
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-25 06:43 +0000
1# Copyright (c) Meta Platforms, Inc. and affiliates.
2#
3# This source code is licensed under the MIT license found in the
4# LICENSE file in the root directory of this source tree.
5# pyre-unsafe
7from typing import Any, Iterable, Mapping, Sequence
9from libcst._parser.base_parser import BaseParser
10from libcst._parser.grammar import get_nonterminal_conversions, get_terminal_conversions
11from libcst._parser.parso.pgen2.generator import Grammar
12from libcst._parser.parso.python.token import TokenType
13from libcst._parser.types.config import ParserConfig
14from libcst._parser.types.conversions import NonterminalConversion, TerminalConversion
15from libcst._parser.types.token import Token
18class PythonCSTParser(BaseParser[Token, TokenType, Any]):
19 config: ParserConfig
20 terminal_conversions: Mapping[str, TerminalConversion]
21 nonterminal_conversions: Mapping[str, NonterminalConversion]
23 def __init__(
24 self,
25 *,
26 tokens: Iterable[Token],
27 config: ParserConfig,
28 pgen_grammar: "Grammar[TokenType]",
29 start_nonterminal: str = "file_input",
30 ) -> None:
31 super().__init__(
32 tokens=tokens,
33 lines=config.lines,
34 pgen_grammar=pgen_grammar,
35 start_nonterminal=start_nonterminal,
36 )
37 self.config = config
38 self.terminal_conversions = get_terminal_conversions()
39 self.nonterminal_conversions = get_nonterminal_conversions(
40 config.version, config.future_imports
41 )
43 def convert_nonterminal(self, nonterminal: str, children: Sequence[Any]) -> Any:
44 return self.nonterminal_conversions[nonterminal](self.config, children)
46 def convert_terminal(self, token: Token) -> Any:
47 return self.terminal_conversions[token.type.name](self.config, token)