Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FIX: further annotation-related fixes #46

Merged
merged 4 commits into from
Jun 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
coverage:
precision: 1
round: down
status:
project:
default:
target: auto
patch:
default:
target: auto

comment:
layout: "reach, diff, flags, files"
behavior: default
require_changes: true # if true: only post the comment if coverage changes
require_base: yes # [yes :: must have a base report to post]
require_head: yes # [yes :: must have a head report to post]
6 changes: 5 additions & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
name: lint

on: [push, pull_request]
on:
push:
branches:
- master
pull_request: {}

jobs:
lint:
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
# Run available tests for all push and pull-request actions.
name: pytest

on: [push, pull_request]
on:
push:
branches:
- master
pull_request: {}

jobs:
build:
Expand Down
49 changes: 28 additions & 21 deletions blark/transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,8 @@ def get_comments_and_pragmas(self) -> Tuple[List[lark.Token], List[lark.Token]]:
if not self.comments:
return [], []

pragmas = []
comments = []
pragmas: List[lark.Token] = []
comments: List[lark.Token] = []
by_type = {
"SINGLE_LINE_COMMENT": comments,
"MULTI_LINE_COMMENT": comments,
Expand Down Expand Up @@ -504,7 +504,7 @@ class LtimeOfDay(Literal):
"""Long time of day literal value."""
hour: lark.Token
minute: lark.Token
second: lark.Token
second: Optional[lark.Token] = None
meta: Optional[Meta] = meta_field()

@property
Expand All @@ -523,7 +523,7 @@ class Date(Literal):

year: lark.Token
month: lark.Token
day: lark.Token
day: Optional[lark.Token]
meta: Optional[Meta] = meta_field()

@property
Expand Down Expand Up @@ -570,7 +570,7 @@ def from_lark(
day: lark.Token,
hour: lark.Token,
minute: lark.Token,
second: lark.Token,
second: Optional[lark.Token],
) -> DateTime:
return DateTime(
date=Date(year=year, month=month, day=day),
Expand Down Expand Up @@ -602,7 +602,7 @@ def from_lark(
day: lark.Token,
hour: lark.Token,
minute: lark.Token,
second: lark.Token,
second: Optional[lark.Token],
) -> LdateTime:
return LdateTime(
ldate=Ldate(year=year, month=month, day=day),
Expand Down Expand Up @@ -718,7 +718,7 @@ class DirectVariable(Variable):
@staticmethod
def from_lark(
location_prefix: lark.Token,
size_prefix: Optional[VariableSizePrefix],
size_prefix: Optional[lark.Token],
location: lark.Token,
*bits: lark.Token,
):
Expand Down Expand Up @@ -797,12 +797,12 @@ def __str__(self) -> str:
@dataclass
@_rule_handler("field_selector")
class FieldSelector:
field: SymbolicVariable
field: SimpleVariable
dereferenced: bool
meta: Optional[Meta] = meta_field()

@staticmethod
def from_lark(dereferenced: Optional[lark.Token], field: SymbolicVariable):
def from_lark(dereferenced: Optional[lark.Token], field: SimpleVariable):
return FieldSelector(
field=field,
dereferenced=dereferenced is not None
Expand All @@ -815,14 +815,14 @@ def __str__(self) -> str:
@dataclass
@_rule_handler("multi_element_variable")
class MultiElementVariable(Variable):
name: SymbolicVariable
name: SimpleVariable
dereferenced: bool
elements: List[Union[SubscriptList, FieldSelector]]
meta: Optional[Meta] = meta_field()

@staticmethod
def from_lark(
variable_name: SymbolicVariable,
variable_name: SimpleVariable,
*subscript_or_field: Union[SubscriptList, FieldSelector]
) -> MultiElementVariable:
return MultiElementVariable(
Expand Down Expand Up @@ -946,9 +946,10 @@ def full_type_name(self) -> str:

@staticmethod
def from_lark(
*args: lark.Token,
string_type: lark.Token,
length: Optional[lark.Token],
*value_parts: Optional[lark.Token],
) -> StringTypeInitialization:
string_type, length, *value_parts = args
spec = StringTypeSpecification(string_type, length)
_, value = value_parts or [None, None]
return StringTypeInitialization(spec=spec, value=value)
Expand Down Expand Up @@ -1164,9 +1165,11 @@ class ArraySpecification:
meta: Optional[Meta] = meta_field()

@property
def base_type_name(self) -> lark.Token:
def base_type_name(self) -> Union[str, lark.Token]:
"""The base type name."""
return self.type.type_name
if isinstance(self.type, DataType):
return self.type.type_name
return str(self.type.name)

@property
def full_type_name(self) -> str:
Expand Down Expand Up @@ -1241,7 +1244,7 @@ class ArrayTypeInitialization:
meta: Optional[Meta] = meta_field()

@property
def base_type_name(self) -> lark.Token:
def base_type_name(self) -> Union[str, lark.Token]:
"""The base type name."""
return self.spec.base_type_name

Expand Down Expand Up @@ -1587,14 +1590,18 @@ def value(self) -> str:
@staticmethod
def from_lark(
name: SymbolicVariable,
*parameters: ParameterAssignment,
first_parameter: Optional[ParameterAssignment] = None,
*remaining_parameters: ParameterAssignment,
) -> FunctionCall:
# Condition parameters (which may be `None`) to represent empty tuple
if parameters == (None, ):
if first_parameter is None:
parameters = []
else:
parameters = [first_parameter] + list(remaining_parameters)

return FunctionCall(
name=name,
parameters=list(parameters)
parameters=parameters,
)

def __str__(self) -> str:
Expand All @@ -1606,7 +1613,7 @@ def __str__(self) -> str:
@_rule_handler("var1")
class DeclaredVariable:
# Alternate name: VariableWithLocation? MaybeLocatedVariable?
variable: SymbolicVariable
variable: SimpleVariable
location: Optional[Union[IncompleteLocation, Location]]
meta: Optional[Meta] = meta_field()

Expand Down Expand Up @@ -2637,7 +2644,7 @@ class IfStatement(Statement):
def from_lark(
if_expr: Expression,
then: Optional[StatementList],
*args: Union[ElseIfClause, ElseClause]
*args: Optional[Union[ElseIfClause, ElseClause]]
) -> IfStatement:
else_clause: Optional[ElseClause] = None
if args and isinstance(args[-1], ElseClause) or args[-1] is None:
Expand Down