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

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 

6 

7from typing import Any, Iterable, Mapping, Sequence 

8 

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 

16 

17 

18class PythonCSTParser(BaseParser[Token, TokenType, Any]): 

19 config: ParserConfig 

20 terminal_conversions: Mapping[str, TerminalConversion] 

21 nonterminal_conversions: Mapping[str, NonterminalConversion] 

22 

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 ) 

42 

43 def convert_nonterminal(self, nonterminal: str, children: Sequence[Any]) -> Any: 

44 return self.nonterminal_conversions[nonterminal](self.config, children) 

45 

46 def convert_terminal(self, token: Token) -> Any: 

47 return self.terminal_conversions[token.type.name](self.config, token)