瀏覽代碼

Start merging .pyi files

ast_utils, grammar, and indenter
gm/2021-09-23T00Z/github.com--lark-parser-lark/1.0b
Chanic Panic 3 年之前
父節點
當前提交
8d0cdeeb14
共有 6 個文件被更改,包括 51 次插入92 次删除
  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 查看文件

@@ -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 查看文件

@@ -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 查看文件

@@ -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 查看文件

@@ -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 查看文件

@@ -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 查看文件

@@ -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:
...

###}

Loading…
取消
儲存