Skip to content

Commit 5d6957b

Browse files
committed
syntax: Fix bugs found by static typing
1 parent 5924373 commit 5d6957b

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

fluent.syntax/fluent/syntax/parser.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def get_entry_or_junk(self, ps: FluentParserStream) -> ast.EntryType:
123123
junk = ast.Junk(slice)
124124
if self.with_spans:
125125
junk.add_span(entry_start_pos, next_entry_start)
126-
annot = ast.Annotation(err.code, err.args, err.message)
126+
annot = ast.Annotation(err.code, list(err.args) if err.args else None, err.message)
127127
annot.add_span(error_index, error_index)
128128
junk.add_annotation(annot)
129129
return junk
@@ -240,6 +240,9 @@ def get_attributes(self, ps: FluentParserStream) -> List[ast.Attribute]:
240240
@with_span
241241
def get_identifier(self, ps: FluentParserStream) -> ast.Identifier:
242242
name = ps.take_id_start()
243+
if name is None:
244+
raise ParseError('E0004', 'a-zA-Z')
245+
243246
ch = ps.take_id_char()
244247
while ch:
245248
name += ch

fluent.syntax/fluent/syntax/serializer.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ def serialize_entry(self, entry: ast.EntryType, state: int = 0) -> str:
8282

8383

8484
def serialize_comment(comment: Union[ast.Comment, ast.GroupComment, ast.ResourceComment], prefix: str = "#") -> str:
85+
if not comment.content:
86+
return f'{prefix}\n'
87+
8588
prefixed = "\n".join([
8689
prefix if len(line) == 0 else f"{prefix} {line}"
8790
for line in comment.content.split("\n")
@@ -91,7 +94,7 @@ def serialize_comment(comment: Union[ast.Comment, ast.GroupComment, ast.Resource
9194

9295

9396
def serialize_junk(junk: ast.Junk) -> str:
94-
return junk.content
97+
return junk.content or ''
9598

9699

97100
def serialize_message(message: ast.Message) -> str:
@@ -165,6 +168,7 @@ def serialize_placeable(placeable: ast.Placeable) -> str:
165168
return "{{ {}}}".format(serialize_expression(expr))
166169
if isinstance(expr, ast.Expression):
167170
return "{{ {} }}".format(serialize_expression(expr))
171+
raise Exception('Unknown expression type: {}'.format(type(expr)))
168172

169173

170174
def serialize_expression(expression: Union[ast.Expression, ast.Placeable]) -> str:

0 commit comments

Comments
 (0)