Ver código fonte

Start merging .pyi files

ast_utils, grammar, and indenter
gm/2021-09-23T00Z/github.com--lark-parser-lark/1.0b
Chanic Panic 3 anos atrás
pai
commit
8d0cdeeb14
6 arquivos alterados com 51 adições e 92 exclusões
  1. +0
    -17
      lark-stubs/ast_utils.pyi
  2. +0
    -14
      lark-stubs/grammar.pyi
  3. +0
    -47
      lark-stubs/indenter.pyi
  4. +4
    -2
      lark/ast_utils.py
  5. +9
    -7
      lark/grammar.py
  6. +38
    -5
      lark/indenter.py

+ 0
- 17
lark-stubs/ast_utils.pyi Ver arquivo

@@ -1,17 +0,0 @@
import types
from typing import Optional

from .visitors import Transformer

class Ast(object):
pass

class AsList(object):
pass


def create_transformer(
ast_module: types.ModuleType,
transformer: Optional[Transformer]=None
) -> Transformer:
...

+ 0
- 14
lark-stubs/grammar.pyi Ver arquivo

@@ -1,14 +0,0 @@
from typing import Optional, Tuple


class RuleOptions:
keep_all_tokens: bool
expand1: bool
priority: int
template_source: Optional[str]
empty_indices: Tuple[bool, ...]


class Symbol:
name: str
is_term: bool

+ 0
- 47
lark-stubs/indenter.pyi Ver arquivo

@@ -1,47 +0,0 @@
# -*- coding: utf-8 -*-

from typing import Tuple, List, Iterator, Optional
from abc import ABC, abstractmethod
from .lexer import Token
from .lark import PostLex


class Indenter(PostLex, ABC):
paren_level: Optional[int]
indent_level: Optional[List[int]]

def __init__(self) -> None:
...

def handle_NL(self, token: Token) -> Iterator[Token]:
...

@property
@abstractmethod
def NL_type(self) -> str:
...

@property
@abstractmethod
def OPEN_PAREN_types(self) -> List[str]:
...

@property
@abstractmethod
def CLOSE_PAREN_types(self) -> List[str]:
...

@property
@abstractmethod
def INDENT_type(self) -> str:
...

@property
@abstractmethod
def DEDENT_type(self) -> str:
...

@property
@abstractmethod
def tab_len(self) -> int:
...

+ 4
- 2
lark/ast_utils.py Ver arquivo

@@ -3,6 +3,8 @@
"""

import inspect, re
import types
from typing import Optional

from lark import Transformer, v_args

@@ -27,7 +29,7 @@ def _call(func, _data, children, _meta):

inline = v_args(wrapper=_call)

def create_transformer(ast_module, transformer=None):
def create_transformer(ast_module: types.ModuleType, transformer: Optional[Transformer]=None) -> Transformer:
"""Collects `Ast` subclasses from the given module, and creates a Lark transformer that builds the AST.

For each class, we create a corresponding rule in the transformer, with a matching name.
@@ -49,4 +51,4 @@ def create_transformer(ast_module, transformer=None):

setattr(t, camel_to_snake(name), obj)

return t
return t

+ 9
- 7
lark/grammar.py Ver arquivo

@@ -1,3 +1,5 @@
from typing import Optional, Tuple

from .utils import Serialize

###{standalone
@@ -5,10 +7,10 @@ from .utils import Serialize
class Symbol(Serialize):
__slots__ = ('name',)

is_term = NotImplemented
is_term: bool = NotImplemented

def __init__(self, name):
self.name = name
self.name: str = name

def __eq__(self, other):
assert isinstance(other, Symbol), other
@@ -50,11 +52,11 @@ class RuleOptions(Serialize):
__serialize_fields__ = 'keep_all_tokens', 'expand1', 'priority', 'template_source', 'empty_indices'

def __init__(self, keep_all_tokens=False, expand1=False, priority=None, template_source=None, empty_indices=()):
self.keep_all_tokens = keep_all_tokens
self.expand1 = expand1
self.priority = priority
self.template_source = template_source
self.empty_indices = empty_indices
self.keep_all_tokens: bool = keep_all_tokens
self.expand1: bool = expand1
self.priority: int = priority
self.template_source: Optional[str] = template_source
self.empty_indices: Tuple[bool, ...] = empty_indices

def __repr__(self):
return 'RuleOptions(%r, %r, %r, %r)' % (


+ 38
- 5
lark/indenter.py Ver arquivo

@@ -1,5 +1,8 @@
"Provides Indentation services for languages with indentation similar to Python"

from abc import ABC, abstractmethod
from typing import Tuple, List, Iterator, Optional

from .exceptions import LarkError
from .lark import PostLex
from .lexer import Token
@@ -8,13 +11,13 @@ from .lexer import Token
class DedentError(LarkError):
pass

class Indenter(PostLex):
def __init__(self):
self.paren_level = None
self.indent_level = None
class Indenter(PostLex, ABC):
def __init__(self) -> None:
self.paren_level: Optional[int] = None
self.indent_level: Optional[List[int]] = None
assert self.tab_len > 0

def handle_NL(self, token):
def handle_NL(self, token: Token) -> Iterator[Token]:
if self.paren_level > 0:
return

@@ -64,4 +67,34 @@ class Indenter(PostLex):
def always_accept(self):
return (self.NL_type,)

@property
@abstractmethod
def NL_type(self) -> str:
...

@property
@abstractmethod
def OPEN_PAREN_types(self) -> List[str]:
...

@property
@abstractmethod
def CLOSE_PAREN_types(self) -> List[str]:
...

@property
@abstractmethod
def INDENT_type(self) -> str:
...

@property
@abstractmethod
def DEDENT_type(self) -> str:
...

@property
@abstractmethod
def tab_len(self) -> int:
...

###}

Carregando…
Cancelar
Salvar