From 3837c8a9e4dd00668436620fdee26ab0358e369d Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Tue, 20 Dec 2016 21:01:17 -0800 Subject: [PATCH] Completions for 'resourceName' in put and get task --- .../yaml/completion/YTypeAssistContext.java | 2 +- .../commons/yaml/schema/YTypeFactory.java | 18 ++++++---- .../vscode/commons/yaml/schema/YTypeUtil.java | 2 +- .../concourse/PipelineYamlEditorTest.java | 33 +++++++++++++++++++ .../workspace/pipeline-with-bad-resources.yml | 8 +++++ 5 files changed, 54 insertions(+), 9 deletions(-) diff --git a/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/completion/YTypeAssistContext.java b/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/completion/YTypeAssistContext.java index 17f1981be..238d56c0a 100644 --- a/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/completion/YTypeAssistContext.java +++ b/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/completion/YTypeAssistContext.java @@ -143,7 +143,7 @@ public class YTypeAssistContext extends AbstractYamlAssistContext { } private List getValueCompletions(YamlDocument doc, int offset, String query) { - YValueHint[] values = typeUtil.getHintValues(type); + YValueHint[] values = typeUtil.getHintValues(type, getSchemaContext()); if (values!=null) { ArrayList completions = new ArrayList<>(); for (YValueHint value : values) { diff --git a/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/schema/YTypeFactory.java b/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/schema/YTypeFactory.java index 281d3d446..20c02c500 100644 --- a/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/schema/YTypeFactory.java +++ b/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/schema/YTypeFactory.java @@ -97,8 +97,8 @@ public class YTypeFactory { } @Override - public YValueHint[] getHintValues(YType type) { - return ((AbstractType)type).getHintValues(); + public YValueHint[] getHintValues(YType type, DynamicSchemaContext dc) { + return ((AbstractType)type).getHintValues(dc); } @Override @@ -143,7 +143,7 @@ public class YTypeFactory { private List propertyList = new ArrayList<>(); private final List hints = new ArrayList<>(); private Map cachedPropertyMap; - private Provider> hintProvider; + private SchemaContextAware> hintProvider; public boolean isSequenceable() { return false; @@ -166,11 +166,15 @@ public class YTypeFactory { } public void addHintProvider(Provider> hintProvider) { + addHintProvider((DynamicSchemaContext dc) -> hintProvider.get()); + } + + public void addHintProvider(SchemaContextAware> hintProvider) { this.hintProvider = hintProvider; } - public YValueHint[] getHintValues() { - Collection providerHints = hintProvider != null ? hintProvider.get() : null; + public YValueHint[] getHintValues(DynamicSchemaContext dc) { + Collection providerHints = hintProvider != null ? hintProvider.withContext(dc) : null; if (providerHints == null || providerHints.isEmpty()) { return hints.toArray(new YValueHint[hints.size()]); @@ -585,8 +589,8 @@ public class YTypeFactory { public YAtomicType yenum(String name, BiFunction, String> errorMessageFormatter, SchemaContextAware> values) { YAtomicType t = yatomic(name); - t.addHintProvider(() -> { - Collection strings = values.withContext(DynamicSchemaContext.NULL); //TODO: make this really context aware! + t.addHintProvider((dc) -> { + Collection strings = values.withContext(dc); return strings==null ? null : strings.stream() diff --git a/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/schema/YTypeUtil.java b/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/schema/YTypeUtil.java index 6a6ca7aec..1b9bde220 100644 --- a/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/schema/YTypeUtil.java +++ b/vscode-extensions/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/schema/YTypeUtil.java @@ -29,7 +29,7 @@ public interface YTypeUtil { boolean isSequencable(YType type); boolean isBean(YType type); YType getDomainType(YType type); - YValueHint[] getHintValues(YType yType); + YValueHint[] getHintValues(YType yType, DynamicSchemaContext dc); String niceTypeName(YType type); YType getKeyType(YType type); ValueParser getValueParser(YType type, DynamicSchemaContext dc); diff --git a/vscode-extensions/vscode-concourse/src/test/java/org/springframework/ide/vscode/concourse/PipelineYamlEditorTest.java b/vscode-extensions/vscode-concourse/src/test/java/org/springframework/ide/vscode/concourse/PipelineYamlEditorTest.java index f601ca914..6991e0730 100644 --- a/vscode-extensions/vscode-concourse/src/test/java/org/springframework/ide/vscode/concourse/PipelineYamlEditorTest.java +++ b/vscode-extensions/vscode-concourse/src/test/java/org/springframework/ide/vscode/concourse/PipelineYamlEditorTest.java @@ -406,6 +406,39 @@ public class PipelineYamlEditorTest { "bogus-get|[sts4]", "bogus-put|[sts4]" ); + } + + @Test + public void completionsResourceReferences() throws Exception { + assertContextualCompletions( + "resources:\n" + + "- name: sts4\n" + + "- name: repo-a\n" + + "- name: repo-b\n" + + "jobs:\n" + + "- name: job1\n" + + " plan:\n" + + " - get: <*>\n" + , //////////////////// + "<*>" + , // => + "repo-a<*>", "repo-b<*>", "sts4<*>" + ); + + assertContextualCompletions( + "resources:\n" + + "- name: sts4\n" + + "- name: repo-a\n" + + "- name: repo-b\n" + + "jobs:\n" + + "- name: job1\n" + + " plan:\n" + + " - put: <*>\n" + , //////////////////// + "r<*>" + , // => + "repo-a<*>", "repo-b<*>" + ); } diff --git a/vscode-extensions/vscode-concourse/src/test/resources/workspace/pipeline-with-bad-resources.yml b/vscode-extensions/vscode-concourse/src/test/resources/workspace/pipeline-with-bad-resources.yml index 2f99314d4..6a030ef35 100644 --- a/vscode-extensions/vscode-concourse/src/test/resources/workspace/pipeline-with-bad-resources.yml +++ b/vscode-extensions/vscode-concourse/src/test/resources/workspace/pipeline-with-bad-resources.yml @@ -3,6 +3,14 @@ resources: type: git source: repository: https://github.com/kdvolder/somestuff +- name: other-repo + type: git + source: + repository: https://github.com/kdvolder/somestuff +- name: more-stuff + type: git + source: + repository: https://github.com/kdvolder/somestuff jobs: - name: job1 plan: