diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/config/LanguageServerProperties.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/config/LanguageServerProperties.java index ab3846f0c..0d7645f98 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/config/LanguageServerProperties.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/config/LanguageServerProperties.java @@ -25,6 +25,11 @@ public class LanguageServerProperties { */ private String extensionId; + /** + * List of characters that trigger completions. + */ + private String completionTriggerCharacters; + public boolean isStandalone() { return standalone; } @@ -49,4 +54,12 @@ public class LanguageServerProperties { this.extensionId = extensionId; } + public String getCompletionTriggerCharacters() { + return completionTriggerCharacters; + } + + public void setCompletionTriggerCharacters(String completionTriggerCharacters) { + this.completionTriggerCharacters = completionTriggerCharacters; + } + } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index 85c548a7e..b329e6e02 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -14,6 +14,7 @@ import java.lang.management.ManagementFactory; import java.net.URI; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -154,6 +155,8 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC private Optional completionFilter = Optional.empty(); + private String completionTriggerCharacters = null; + @Override public void connect(LanguageClient _client) { this.client = (STS4LanguageClient) _client; @@ -369,6 +372,13 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC CompletionOptions completionProvider = new CompletionOptions(); completionProvider.setResolveProvider(hasLazyCompletionResolver()); + if (this.completionTriggerCharacters!=null) { + String[] chars = new String[this.completionTriggerCharacters.length()]; + for (int i = 0; i < chars.length; i++) { + chars[i] = this.completionTriggerCharacters.substring(i, i+1); + } + completionProvider.setTriggerCharacters(ImmutableList.copyOf(chars)); + } c.setCompletionProvider(completionProvider); if (hasQuickFixes()) { @@ -710,4 +720,12 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC public void setCompletionFilter(Optional completionFilter) { this.completionFilter = completionFilter; } + + public String getCompletionTriggerCharacters() { + return completionTriggerCharacters; + } + + public void setCompletionTriggerCharacters(String completionTriggerCharacters) { + this.completionTriggerCharacters = completionTriggerCharacters; + } } diff --git a/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoConf.java b/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoConf.java index 3790b62bd..f5449f0d6 100644 --- a/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoConf.java +++ b/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoConf.java @@ -47,6 +47,7 @@ public class LanguageServerAutoConf { Optional completionFilter ) throws Exception { SimpleLanguageServer server = new SimpleLanguageServer(props.getExtensionId()); + server.setCompletionTriggerCharacters(props.getCompletionTriggerCharacters()); server.setCompletionFilter(completionFilter); severities.ifPresent(server::setDiagnosticSeverityProvider); return server; diff --git a/headless-services/spring-boot-language-server/src/main/resources/application.yml b/headless-services/spring-boot-language-server/src/main/resources/application.yml index 6c3ea8a07..0e6c8f7e2 100644 --- a/headless-services/spring-boot-language-server/src/main/resources/application.yml +++ b/headless-services/spring-boot-language-server/src/main/resources/application.yml @@ -1,2 +1,3 @@ languageserver: - extension-id: vscode-spring-boot \ No newline at end of file + extension-id: vscode-spring-boot + completion-trigger-characters: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. \ No newline at end of file