From 77d66cb484c4eaff3dc17597b477436287a91a34 Mon Sep 17 00:00:00 2001 From: Leonid Baranov Date: Fri, 10 May 2024 15:22:40 +0200 Subject: [PATCH] chore: Fix tests --- .../lsp/cobol/common/mapping/ExtendedText.java | 2 -- .../lsp/cobol/common/utils/RangeUtils.java | 16 ++++++++++++++++ .../org/eclipse/lsp/db2/parser/Db2SqlParser.g4 | 2 +- .../lsp/cobol/core/visitor/CobolVisitor.java | 10 +++++++++- .../implicitDialects/sql/Db2SqlDialect.java | 2 +- ...estAsteriskBeforeCopyDoesntBreakAnalysis.java | 6 ++++-- 6 files changed, 31 insertions(+), 7 deletions(-) diff --git a/server/common/src/main/java/org/eclipse/lsp/cobol/common/mapping/ExtendedText.java b/server/common/src/main/java/org/eclipse/lsp/cobol/common/mapping/ExtendedText.java index 6b5435fb9a..54b100453f 100644 --- a/server/common/src/main/java/org/eclipse/lsp/cobol/common/mapping/ExtendedText.java +++ b/server/common/src/main/java/org/eclipse/lsp/cobol/common/mapping/ExtendedText.java @@ -23,9 +23,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.Set; import java.util.function.Consumer; -import java.util.function.Supplier; /** * Extended Text contains information about original text and current text with the mapping diff --git a/server/common/src/main/java/org/eclipse/lsp/cobol/common/utils/RangeUtils.java b/server/common/src/main/java/org/eclipse/lsp/cobol/common/utils/RangeUtils.java index 2d5dd45c63..222cc4af66 100644 --- a/server/common/src/main/java/org/eclipse/lsp/cobol/common/utils/RangeUtils.java +++ b/server/common/src/main/java/org/eclipse/lsp/cobol/common/utils/RangeUtils.java @@ -17,6 +17,7 @@ import lombok.experimental.UtilityClass; import org.eclipse.lsp.cobol.common.model.Locality; +import org.eclipse.lsp.cobol.common.model.tree.CopyNode; import org.eclipse.lsp.cobol.common.model.tree.Node; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.Range; @@ -37,6 +38,13 @@ public class RangeUtils { */ public static Optional findNodeByPosition(Node node, String uri, Position position) { Node candidate = null; + if (isFromCopybook(uri, node)) { + if (node.getChildren().isEmpty()) { + return Optional.of(node); + } + candidate = node; + } + if (isInside(uri, position, node.getLocality())) { if (node.getChildren().isEmpty()) { return Optional.of(node); @@ -53,6 +61,14 @@ public static Optional findNodeByPosition(Node node, String uri, Position return candidate == null ? Optional.empty() : Optional.of(candidate); } + private boolean isFromCopybook(String uri, Node node) { + if (!(node instanceof CopyNode)) { + return false; + } + CopyNode copyNode = (CopyNode) node; + return uri.equals(copyNode.getUri()); + } + /** * Test if one position is after the another position. * diff --git a/server/engine/src/main/antlr4/org/eclipse/lsp/db2/parser/Db2SqlParser.g4 b/server/engine/src/main/antlr4/org/eclipse/lsp/db2/parser/Db2SqlParser.g4 index af57a00793..288a6a5513 100644 --- a/server/engine/src/main/antlr4/org/eclipse/lsp/db2/parser/Db2SqlParser.g4 +++ b/server/engine/src/main/antlr4/org/eclipse/lsp/db2/parser/Db2SqlParser.g4 @@ -21,7 +21,7 @@ startRule: .*? (execRule .*?) * EOF; execRule: EXEC SQL sqlCode END_EXEC | EXEC SQL END_EXEC | EXEC SQLIMS sqlCode END_EXEC // TODO: check when should this grammar be activated. Probably based on some compiler directives - | {notifyError("cobolParser.missingEndExec");} EXEC SQL sqlCode EOF + | {notifyError("cobolParser.missingEndExec");} EXEC SQL sqlCode DOT_FS? EOF | {notifyError("cobolParser.missingEndExec");} EXEC SQL; sqlCode diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/visitor/CobolVisitor.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/visitor/CobolVisitor.java index 91d944d332..29bb992b98 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/core/visitor/CobolVisitor.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/core/visitor/CobolVisitor.java @@ -1048,7 +1048,15 @@ public List visitParagraphs(ParagraphsContext ctx) { @Override public List visitProcedureDivisionBody(ProcedureDivisionBodyContext ctx) { - return addTreeNode(ctx, ProcedureDivisionBodyNode::new); + + ParserRuleContext context = new ParserRuleContext(); + context.start = ctx.getParent().start; + context.stop = ctx.stop; + + List children = visitChildren(ctx); + return retrieveLocality(context) + .map(constructNode(ProcedureDivisionBodyNode::new, children)) + .orElse(children); } @Override diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlDialect.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlDialect.java index 6b472bc2d2..1f38f4a534 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlDialect.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/implicitDialects/sql/Db2SqlDialect.java @@ -108,7 +108,7 @@ public List getProcessors() { new ImplicitDb2VariablesProcessor()), new ProcessorDescription( Db2DataAndProcedureDivisionNode.class, - ProcessingPhase.POST_DEFINITION, + ProcessingPhase.VALIDATION, new Db2DataAndProcedureDivisionProcessor(messageService)), new ProcessorDescription( Db2DeclareVariableNode.class, diff --git a/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/TestAsteriskBeforeCopyDoesntBreakAnalysis.java b/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/TestAsteriskBeforeCopyDoesntBreakAnalysis.java index f462288af8..2367a17230 100644 --- a/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/TestAsteriskBeforeCopyDoesntBreakAnalysis.java +++ b/server/engine/src/test/java/org/eclipse/lsp/cobol/usecases/TestAsteriskBeforeCopyDoesntBreakAnalysis.java @@ -24,10 +24,11 @@ import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.DiagnosticSeverity; import org.eclipse.lsp4j.Range; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; /** - * This test checks that the an asterisk out of indicator area before the COPY statement doesn't + * This test checks that the asterisk out of indicator area before the COPY statement doesn't * break syntax analysis */ class TestAsteriskBeforeCopyDoesntBreakAnalysis { @@ -60,7 +61,8 @@ void test() { } @Test - void testРц() { + @Disabled("Experimental parser") + void testEx() { UseCaseEngine.runTest( TEXT,