From dcd871631c487a20b2522908832c4dbfceffc809 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Mon, 3 Apr 2017 14:57:59 -0700 Subject: [PATCH] Additional improvements for PT-140709005 For missing properties in toplevel nodes, place the error marker at the end of the document. --- .../commons/languageserver/util/DocumentRegion.java | 7 +++++++ .../commons/yaml/reconcile/YamlSchemaProblems.java | 2 ++ .../ide/vscode/languageserver/testharness/Editor.java | 11 +++++++++++ .../ide/vscode/concourse/ConcourseEditorTest.java | 5 ++++- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentRegion.java b/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentRegion.java index b4a6b9bd0..020a74f37 100644 --- a/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentRegion.java +++ b/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentRegion.java @@ -283,4 +283,11 @@ public class DocumentRegion implements CharSequence { return false; } + /** + * Create a document region of lenght 0 at the every end of the document. + */ + public static DocumentRegion endOf(IDocument doc) { + return new DocumentRegion(doc, doc.getLength(), doc.getLength()); + } + } \ No newline at end of file diff --git a/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/YamlSchemaProblems.java b/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/YamlSchemaProblems.java index ad1fcd0f2..68d8ad7fb 100644 --- a/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/YamlSchemaProblems.java +++ b/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/YamlSchemaProblems.java @@ -123,6 +123,8 @@ public class YamlSchemaProblems { return problem(MISSING_PROPERTY, msg, underline); } } + } else if (parent==null) { + return problem(MISSING_PROPERTY, msg, DocumentRegion.endOf(doc)); } return problem(MISSING_PROPERTY, msg, map); } diff --git a/vscode-extensions/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java b/vscode-extensions/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java index 469cea058..315d7b821 100644 --- a/vscode-extensions/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java +++ b/vscode-extensions/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java @@ -619,4 +619,15 @@ public class Editor { return languageId; } + /** + * Verifies that a given Range corresponds with the end of the document in the editor. + */ + public void assertIsEndOfFile(Range range) { + int documentLen = document.getText().length(); + int start = document.toOffset(range.getStart()); + int end = document.toOffset(range.getEnd()); + assertEquals(documentLen, start); + assertEquals(documentLen, end); + } + } diff --git a/vscode-extensions/vscode-concourse/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java b/vscode-extensions/vscode-concourse/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java index 777103352..ffc490c6b 100644 --- a/vscode-extensions/vscode-concourse/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java +++ b/vscode-extensions/vscode-concourse/src/test/java/org/springframework/ide/vscode/concourse/ConcourseEditorTest.java @@ -2268,7 +2268,10 @@ public class ConcourseEditorTest { editor = harness.newEditor(LanguageIds.CONCOURSE_TASK, "image: some-image" ); - editor.assertProblems("image: some-image|[platform, run] are required"); + List problems = editor.assertProblems("|[platform, run] are required"); + for (Diagnostic p : problems) { + editor.assertIsEndOfFile(p.getRange()); + } editor = harness.newEditor(LanguageIds.CONCOURSE_TASK, "platform: a-platform\n" +