From fa2b93b8b1be1b7ba3b60e5b5998e0a080151e99 Mon Sep 17 00:00:00 2001 From: Eryk Mroczek Date: Wed, 29 Nov 2023 17:57:59 +0100 Subject: [PATCH 1/3] Reproduce the bug Update test samples --- tests/style/samples/classes/classes-input.mo | 5 +++++ tests/style/samples/classes/classes-output.mo | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/tests/style/samples/classes/classes-input.mo b/tests/style/samples/classes/classes-input.mo index c1c43eb..bc92c58 100644 --- a/tests/style/samples/classes/classes-input.mo +++ b/tests/style/samples/classes/classes-input.mo @@ -79,3 +79,8 @@ end Tank; partial record 'Quoted "record"' import It.is.empty; end 'Quoted "record"'; + +block Foo +import Modelica.Units.SI; + .Modelica.Blocks.Interfaces.BooleanInput b; +end Foo; diff --git a/tests/style/samples/classes/classes-output.mo b/tests/style/samples/classes/classes-output.mo index 42cfa2d..467ff7f 100644 --- a/tests/style/samples/classes/classes-output.mo +++ b/tests/style/samples/classes/classes-output.mo @@ -105,3 +105,10 @@ partial record 'Quoted "record"' import It.is.empty; end 'Quoted "record"'; + +block Foo + + import Modelica.Units.SI; + .Modelica.Blocks.Interfaces.BooleanInput b; + +end Foo; From 2d233a5fb5f0a39b4c5573336c56ef1c9d728bb0 Mon Sep 17 00:00:00 2001 From: Eryk Mroczek Date: Thu, 30 Nov 2023 07:40:19 +0100 Subject: [PATCH 2/3] Update handling of dot tokens --- mofmt/parsing/parser.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/mofmt/parsing/parser.py b/mofmt/parsing/parser.py index d007f15..88f6068 100644 --- a/mofmt/parsing/parser.py +++ b/mofmt/parsing/parser.py @@ -13,7 +13,6 @@ ModelicaLexer.RCURLY, ModelicaLexer.SEMICOLON, ModelicaLexer.COMMA, - ModelicaLexer.DOT, ModelicaLexer.COLON, ) @@ -118,8 +117,13 @@ def visitTerminal(self, node: antlr.TerminalNode) -> None: self.bracket_counter -= 1 elif kind == ModelicaLexer.FOR: self.break_or_space() - if kind not in NO_SPACE_BEFORE and self.prev_token not in NO_SPACE_AFTER: + elif kind == ModelicaLexer.DOT: + # Only first dot in type specifiers etc. can be preceded with a space + if self.prev_token not in (ModelicaLexer.IDENT, ModelicaLexer.RBRACK): + self.collector.add_space() + elif kind not in NO_SPACE_BEFORE and self.prev_token not in NO_SPACE_AFTER: self.collector.add_space() + self.collector.add_token(token.text) if kind == ModelicaLexer.ANNOTATION: self.collector.add_space() @@ -127,6 +131,7 @@ def visitTerminal(self, node: antlr.TerminalNode) -> None: self.prev_token_line = line def enter_grouped_rule(self, ctx: antlr.ParserRuleContext) -> None: + """If the rule was wrapped add info to the stack and increase indent""" self.group_stack.append(False) if is_multiline(ctx): self.group_stack[-1] = True @@ -140,6 +145,7 @@ def enter_grouped_rule(self, ctx: antlr.ParserRuleContext) -> None: self.collector.add_indent() def exit_grouped_rule(self, ctx: antlr.ParserRuleContext) -> None: + """Decrease indent when leaving wrapped group""" if self.group_stack[-1]: if ctx.getRuleIndex() == Modelica.RULE_if_expression: if get_preceding_token(ctx, self.stream).type == ModelicaLexer.EQUAL: @@ -152,6 +158,7 @@ def exit_grouped_rule(self, ctx: antlr.ParserRuleContext) -> None: self.group_stack.pop() def break_or_space(self): + """Insert line break or space""" if self.group_stack[-1]: self.collector.add_break() else: @@ -159,6 +166,7 @@ def break_or_space(self): self.collector.add_space() def wrap_expression(self, ctx: antlr.ParserRuleContext): + """Wrap the expression""" next_token = get_following_token(ctx, self.stream) # Check if there was a line break around the wrap point if next_token.line > self.prev_token_line: @@ -302,9 +310,6 @@ def enterEveryRule(self, ctx: antlr.ParserRuleContext) -> None: ): self.break_or_space() self.wrap_stack.append(False) - elif rule == Modelica.RULE_type_specifier: - if ctx.start.type == ModelicaLexer.DOT: - self.collector.add_space() def exitEveryRule(self, ctx: antlr.ParserRuleContext) -> None: """ From fdc865ddeddec6f108693351e4aeb0bf04eb4b3c Mon Sep 17 00:00:00 2001 From: Eryk Mroczek Date: Thu, 30 Nov 2023 07:43:59 +0100 Subject: [PATCH 3/3] Add space before left bracket --- mofmt/parsing/parser.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mofmt/parsing/parser.py b/mofmt/parsing/parser.py index 88f6068..df60f9e 100644 --- a/mofmt/parsing/parser.py +++ b/mofmt/parsing/parser.py @@ -113,6 +113,8 @@ def visitTerminal(self, node: antlr.TerminalNode) -> None: # Handle special cases if kind == ModelicaLexer.LBRACK: self.bracket_counter += 1 + if self.prev_token != ModelicaLexer.IDENT: + self.collector.add_space() elif kind == ModelicaLexer.RBRACK: self.bracket_counter -= 1 elif kind == ModelicaLexer.FOR: