From 4fd18c9a7cc47816742e140db2d598bcc040a4fd Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Thu, 26 Jan 2017 15:19:59 -0800 Subject: [PATCH] Hover info provider for tasks wired-up properly Note: still need to add the markdown blobs for most properties however. So you still won't see much info in the hovers. --- .../concourse/ConcourseLanguageServer.java | 12 +++++++- .../vscode/concourse/PipelineYmlSchema.java | 3 +- .../resources/desc/TaskConfig/platform.md | 3 ++ .../vscode/concourse/ConcourseEditorTest.java | 28 ++++++++++++++++++- 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 vscode-extensions/vscode-concourse/src/main/resources/desc/TaskConfig/platform.md diff --git a/vscode-extensions/vscode-concourse/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServer.java b/vscode-extensions/vscode-concourse/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServer.java index f2348e734..96ce4eb91 100644 --- a/vscode-extensions/vscode-concourse/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServer.java +++ b/vscode-extensions/vscode-concourse/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServer.java @@ -112,7 +112,17 @@ public class ConcourseLanguageServer extends SimpleLanguageServer { throw new IllegalStateException("Not implemented"); }); - documents.onHover(forPipelines.hoverEngine::getHover); //TODO: dispatch based on language id + documents.onHover(params -> { + TextDocument doc = documents.get(params); + if (doc!=null) { + if (LanguageIds.CONCOURSE_PIPELINE.equals(doc.getLanguageId())) { + return forPipelines.hoverEngine.getHover(params); + } else if (LanguageIds.CONCOURSE_TASK.equals(doc.getLanguageId())) { + return forTasks.hoverEngine.getHover(params); + } + } + return SimpleTextDocumentService.NO_HOVER; + }); documents.onDefinition(definitionFinder); } diff --git a/vscode-extensions/vscode-concourse/src/main/java/org/springframework/ide/vscode/concourse/PipelineYmlSchema.java b/vscode-extensions/vscode-concourse/src/main/java/org/springframework/ide/vscode/concourse/PipelineYmlSchema.java index bb79391b5..4b75e12ee 100644 --- a/vscode-extensions/vscode-concourse/src/main/java/org/springframework/ide/vscode/concourse/PipelineYmlSchema.java +++ b/vscode-extensions/vscode-concourse/src/main/java/org/springframework/ide/vscode/concourse/PipelineYmlSchema.java @@ -246,7 +246,8 @@ public class PipelineYmlSchema implements YamlSchema { } } - YType t_platform = f.yenum("Platform", "windows", "linux", "darwin"); + YAtomicType t_platform = f.yenum("Platform", "windows", "linux", "darwin"); + t_platform.parseWith(ValueParsers.NE_STRING); //no errors because in theory platform are just strings. YType t_name_and_path = f.ybean("NameAndPath" , f.yprop("name", t_ne_string).isRequired(true), diff --git a/vscode-extensions/vscode-concourse/src/main/resources/desc/TaskConfig/platform.md b/vscode-extensions/vscode-concourse/src/main/resources/desc/TaskConfig/platform.md new file mode 100644 index 000000000..ff0e53c63 --- /dev/null +++ b/vscode-extensions/vscode-concourse/src/main/resources/desc/TaskConfig/platform.md @@ -0,0 +1,3 @@ +*Required.* The platform the task should run on. By convention, `windows`, +`linux`, or `darwin` are specified. This determines the pool of workers +that the task can run against. The base deployment provides Linux workers. 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 fd5e579d8..281e8bc00 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 @@ -1480,7 +1480,6 @@ public class ConcourseEditorTest { "params: the-params\n" ); editor.assertProblems( - "a-platform|unknown 'Platform'", "name|Unknown property", "bogus-source-prop|Unknown property", "path: path/to/input|'name' is required", @@ -1512,8 +1511,35 @@ public class ConcourseEditorTest { "run:\n" + " <*>" ); + + assertTaskCompletions( + "platform: <*>" + , //=> + "platform: darwin<*>", + "platform: linux<*>", + "platform: windows<*>" + ); } + @Test public void hoversForTaskFileToplevelProperties() throws Exception { + Editor editor = harness.newEditor(LanguageIds.CONCOURSE_TASK, + "image: some-image\n" + + "image_resource:\n" + + " type: docker-image\n" + + " source:\n" + + " repository: kdvolder/sts4-build-env\n" + + "inputs: []\n" + + "outputs: []\n" + + "params: {}\n" + + "platform: linux\n" + + "run:\n" + + " path: sts4/concourse/tasks/build-vscode-extensions.sh" + ); + + editor.assertHoverContains("platform", "The platform the task should run on"); + } + + ////////////////////////////////////////////////////////////////////////////// private void assertContextualCompletions(String conText, String textBefore, String... textAfter) throws Exception {