From f43942ed579fe592154433e6112f4a24219bc361 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Thu, 15 Nov 2018 12:13:04 -0800 Subject: [PATCH] Consistent treatment of valuhints in yaml See: https://www.pivotaltracker.com/story/show/161964105 --- .../completion/AbstractYamlAssistContext.java | 4 +- .../boot/common/CommonLanguageTools.java | 10 +++++ .../vscode/boot/metadata/PropertyInfo.java | 14 ++----- .../boot/metadata/hints/HintProviders.java | 15 ++----- .../ApplicationYamlAssistContext.java | 2 +- .../boot/test/ApplicationYamlEditorTest.java | 42 +++++++++++++++++++ 6 files changed, 61 insertions(+), 26 deletions(-) diff --git a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/completion/AbstractYamlAssistContext.java b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/completion/AbstractYamlAssistContext.java index 3e775681e..bb3bef27a 100644 --- a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/completion/AbstractYamlAssistContext.java +++ b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/completion/AbstractYamlAssistContext.java @@ -70,7 +70,7 @@ public abstract class AbstractYamlAssistContext implements YamlAssistContext { private static PrefixFinder prefixfinder = new PrefixFinder() { @Override protected boolean isPrefixChar(char c) { - return !Character.isWhitespace(c); + return !(Character.isWhitespace(c) || c==','); } }; @@ -87,7 +87,7 @@ public abstract class AbstractYamlAssistContext implements YamlAssistContext { valueStart++; } if (offset>=valueStart) { - return doc.textBetween(valueStart, offset); + return prefixfinder.getPrefix(doc.getDocument(), offset, valueStart); } else { //only whitespace, or nothing found upto the cursor return ""; diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/common/CommonLanguageTools.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/common/CommonLanguageTools.java index fb37add51..9f2099c1a 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/common/CommonLanguageTools.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/common/CommonLanguageTools.java @@ -33,6 +33,7 @@ import org.springframework.ide.vscode.commons.util.Log; import org.springframework.ide.vscode.commons.util.text.DocumentRegion; import org.springframework.ide.vscode.commons.util.text.LanguageId; import org.springframework.ide.vscode.commons.util.text.TextDocument; +import org.springframework.ide.vscode.commons.yaml.path.YamlPathSegment; public class CommonLanguageTools { @@ -84,6 +85,15 @@ public class CommonLanguageTools { PropertyInfo prop = index.findLongestCommonPrefixEntry(propertyName); if (prop!=null) { HintProvider hintProvider = prop.getHints(typeUtil, false); + if (prop.getId().length() getValueHints(String query) { - if (dimensionAware) { - //pickier, completions only suggested in the domain of map, but not for map itself. - return ImmutableList.of(); - } else { - return valueProvider.getValueHints(query); - } + return ImmutableList.of(); } @Override diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/ApplicationYamlAssistContext.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/ApplicationYamlAssistContext.java index 06b732904..b0a245b55 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/ApplicationYamlAssistContext.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/ApplicationYamlAssistContext.java @@ -515,7 +515,7 @@ public abstract class ApplicationYamlAssistContext extends AbstractYamlAssistCon } else if (subIndex.getExactMatch()!=null) { IndexContext asIndexContext = new IndexContext(getDocument(), documentSelector, contextPath.append(s), subIndex, completionFactory, typeUtil, conf, javaElementLocationProvider); PropertyInfo prop = subIndex.getExactMatch(); - return new TypeContext(asIndexContext, contextPath.append(s), TypeParser.parse(prop.getType()), completionFactory, typeUtil, conf, prop.getHints(typeUtil, true), javaElementLocationProvider); + return new TypeContext(asIndexContext, contextPath.append(s), TypeParser.parse(prop.getType()), completionFactory, typeUtil, conf, prop.getHints(typeUtil, false), javaElementLocationProvider); } } //Unsuported navigation => no context for assist diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java index 7a685874d..c0aba935f 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java @@ -256,6 +256,48 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { ); } + @Test public void userDefinedLoggingGroupsValueCompletions() throws Exception { + useProject(createPredefinedMavenProject("empty-boot-2.1.0-app")); + + assertCompletionWithLabel( + "logging:\n" + + " group:\n"+ + " whatever:\n" + + " - demo<*>" + , //============== + "com.example.demo", + //=> + "logging:\n" + + " group:\n"+ + " whatever:\n" + + " - com.example.demo<*>" + ); + + assertCompletionWithLabel( + "logging:\n" + + " group:\n"+ + " whatever: demo<*>" + , //============== + "com.example.demo", + //=> + "logging:\n" + + " group:\n"+ + " whatever: com.example.demo<*>" + ); + + assertCompletionWithLabel( + "logging:\n" + + " group:\n"+ + " whatever: stuff,demo<*>" + , //============== + "com.example.demo", + //=> + "logging:\n" + + " group:\n"+ + " whatever: stuff,com.example.demo<*>" + ); + } + ///////////////////// ported tests from old STS code base //////////////////////////////////////////////// @Test public void testHovers() throws Exception {