Boofity: Spring yaml and properties completion engine
This commit is contained in:
@@ -41,7 +41,7 @@ public class CompositeCompletionEngine implements ICompletionEngine {
|
||||
}
|
||||
|
||||
public void add(ICompletionEngine engine) {
|
||||
Assert.isLegal(engine instanceof LanguageSpecific, "Only LanguageSpecific completion engines are currently supported");
|
||||
Assert.isLegal(engine instanceof LanguageSpecific, "Only LanguageSpecific completion engines are currently supported "+engine.getClass().getName());
|
||||
Collection<LanguageId> languages = ((LanguageSpecific)engine).supportedLanguages();
|
||||
Assert.isLegal(!languages.isEmpty(), "Completion engine that doesn't support any language");
|
||||
for (LanguageId languageId : languages) {
|
||||
|
||||
@@ -45,9 +45,13 @@ import org.springframework.ide.vscode.boot.metadata.ClassReferenceProvider;
|
||||
import org.springframework.ide.vscode.boot.metadata.LoggerNameProvider;
|
||||
import org.springframework.ide.vscode.boot.metadata.ProjectBasedPropertyIndexProvider;
|
||||
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndex;
|
||||
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider;
|
||||
import org.springframework.ide.vscode.boot.metadata.ValueProviderRegistry;
|
||||
import org.springframework.ide.vscode.boot.metadata.types.TypeUtilProvider;
|
||||
import org.springframework.ide.vscode.boot.properties.completions.SpringPropertiesCompletionEngine;
|
||||
import org.springframework.ide.vscode.boot.xml.SpringXMLCompletionEngine;
|
||||
import org.springframework.ide.vscode.boot.yaml.completions.ApplicationYamlAssistContext;
|
||||
import org.springframework.ide.vscode.boot.yaml.completions.SpringYamlCompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.LanguageServerRunner;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.DocumentEventListenerManager;
|
||||
@@ -60,6 +64,8 @@ import org.springframework.ide.vscode.commons.yaml.ast.YamlASTProvider;
|
||||
import org.springframework.ide.vscode.commons.yaml.ast.YamlParser;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlAssistContext;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlAssistContextProvider;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlCompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlCompletionEngineOptions;
|
||||
import org.springframework.ide.vscode.commons.yaml.structure.YamlDocument;
|
||||
import org.springframework.ide.vscode.commons.yaml.structure.YamlStructureProvider;
|
||||
import org.springframework.ide.vscode.languageserver.starter.LanguageServerAutoConf;
|
||||
@@ -150,6 +156,21 @@ public class BootLanguagServerBootApp {
|
||||
return new SpringXMLCompletionEngine(server, projectFinder, symbolIndex, config);
|
||||
}
|
||||
|
||||
@Bean SpringPropertiesCompletionEngine propertiesCompletionEngine(BootLanguageServerParams params, JavaProjectFinder projectFinder, SourceLinks sourceLinks) {
|
||||
return new SpringPropertiesCompletionEngine(
|
||||
params.indexProvider,
|
||||
params.typeUtilProvider,
|
||||
projectFinder, sourceLinks);
|
||||
}
|
||||
|
||||
@Bean YamlCompletionEngine yamlCompletionEngine(YamlStructureProvider structureProvider, YamlAssistContextProvider contextProvider) {
|
||||
YamlCompletionEngineOptions options = new YamlCompletionEngineOptions() {
|
||||
@Override
|
||||
public boolean includeDeindentedProposals() { return false; };
|
||||
};
|
||||
return new SpringYamlCompletionEngine(structureProvider, contextProvider, options);
|
||||
}
|
||||
|
||||
@Bean JavaDocumentUriProvider javaDocumentUriProvider() {
|
||||
switch (LspClient.currentClient()) {
|
||||
case ECLIPSE:
|
||||
|
||||
@@ -47,7 +47,6 @@ public class ProblemSeverityConfigurer implements InitializingBean {
|
||||
Settings problemConf = settings.navigate(editorType);
|
||||
for (String code : problemConf.keys()) {
|
||||
String severity = problemConf.getString(code);
|
||||
System.out.println(code+" => "+severity);
|
||||
Assert.isLegal(!severityOverrides.containsKey(code), "Multpile entries for problem type "+code);
|
||||
severityOverrides.put(code, ProblemSeverity.valueOf(severity));
|
||||
}
|
||||
|
||||
@@ -18,33 +18,26 @@ import org.springframework.ide.vscode.boot.java.links.JavaElementLocationProvide
|
||||
import org.springframework.ide.vscode.boot.java.links.SourceLinks;
|
||||
import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider;
|
||||
import org.springframework.ide.vscode.boot.metadata.types.TypeUtilProvider;
|
||||
import org.springframework.ide.vscode.boot.properties.completions.SpringPropertiesCompletionEngine;
|
||||
import org.springframework.ide.vscode.boot.properties.hover.PropertiesHoverInfoProvider;
|
||||
import org.springframework.ide.vscode.boot.properties.quickfix.AppPropertiesQuickFixes;
|
||||
import org.springframework.ide.vscode.boot.properties.quickfix.CommonQuickfixes;
|
||||
import org.springframework.ide.vscode.boot.properties.reconcile.SpringPropertiesReconcileEngine;
|
||||
import org.springframework.ide.vscode.boot.yaml.quickfix.AppYamlQuickfixes;
|
||||
import org.springframework.ide.vscode.boot.yaml.reconcile.ApplicationYamlReconcileEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.composable.LanguageServerComponents;
|
||||
import org.springframework.ide.vscode.commons.languageserver.hover.HoverInfoProvider;
|
||||
import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver;
|
||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.HoverHandler;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
|
||||
import org.springframework.ide.vscode.commons.util.text.IDocument;
|
||||
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.ast.YamlASTProvider;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlAssistContextProvider;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlCompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlCompletionEngineOptions;
|
||||
import org.springframework.ide.vscode.commons.yaml.hover.YamlHoverInfoProvider;
|
||||
import org.springframework.ide.vscode.commons.yaml.structure.YamlStructureProvider;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
@@ -63,12 +56,7 @@ public class BootPropertiesLanguageServerComponents implements LanguageServerCom
|
||||
LanguageId.BOOT_PROPERTIES_YAML
|
||||
);
|
||||
|
||||
private static final YamlCompletionEngineOptions COMPLETION_OPTIONS = new YamlCompletionEngineOptions() {
|
||||
@Override
|
||||
public boolean includeDeindentedProposals() { return false; };
|
||||
};
|
||||
// Shared:
|
||||
private final ProjectObserver projectObserver;
|
||||
private final JavaProjectFinder javaProjectFinder;
|
||||
private final SpringPropertyIndexProvider indexProvider;
|
||||
private final TypeUtilProvider typeUtilProvider;
|
||||
@@ -96,7 +84,6 @@ public class BootPropertiesLanguageServerComponents implements LanguageServerCom
|
||||
this.indexProvider = serverParams.indexProvider;
|
||||
this.typeUtilProvider = serverParams.typeUtilProvider;
|
||||
this.javaProjectFinder = serverParams.projectFinder;
|
||||
this.projectObserver = serverParams.projectObserver;
|
||||
this.yamlStructureProvider = yamlStructureProvider;
|
||||
this.yamlAssistContextProvider = yamlAssistContextProvider;
|
||||
this.sourceLinks = sourceLinks;
|
||||
@@ -126,27 +113,6 @@ public class BootPropertiesLanguageServerComponents implements LanguageServerCom
|
||||
return LANGUAGES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<ICompletionEngine> getCompletionEngine() {
|
||||
ICompletionEngine propertiesCompletions = new SpringPropertiesCompletionEngine(indexProvider, typeUtilProvider, javaProjectFinder, sourceLinks);
|
||||
ICompletionEngine yamlCompletions = new YamlCompletionEngine(yamlStructureProvider, yamlAssistContextProvider, COMPLETION_OPTIONS);
|
||||
return Optional.of((TextDocument document, int offset) -> {
|
||||
String uri = document.getUri();
|
||||
if (uri!=null) {
|
||||
if (uri.endsWith(PROPERTIES)) {
|
||||
return propertiesCompletions.getCompletions(document, offset);
|
||||
} else {
|
||||
for (String yml : YML) {
|
||||
if (uri.endsWith(yml)) {
|
||||
return yamlCompletions.getCompletions(document, offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ImmutableList.of();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public HoverHandler getHoverProvider() {
|
||||
HoverInfoProvider propertiesHovers = new PropertiesHoverInfoProvider(indexProvider, typeUtilProvider, javaProjectFinder, sourceLinks);
|
||||
|
||||
@@ -20,13 +20,17 @@ import org.springframework.ide.vscode.boot.metadata.types.TypeUtilProvider;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionProposal;
|
||||
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.LanguageSpecific;
|
||||
import org.springframework.ide.vscode.commons.util.BadLocationException;
|
||||
import org.springframework.ide.vscode.commons.util.text.TextDocument;;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
|
||||
import com.google.common.collect.ImmutableList;;
|
||||
|
||||
/**
|
||||
* @author Kris De Volder
|
||||
*/
|
||||
public class SpringPropertiesCompletionEngine implements ICompletionEngine {
|
||||
public class SpringPropertiesCompletionEngine implements ICompletionEngine, LanguageSpecific {
|
||||
|
||||
private boolean preferLowerCaseEnums = true; //might make sense to make this user configurable
|
||||
|
||||
@@ -63,4 +67,9 @@ public class SpringPropertiesCompletionEngine implements ICompletionEngine {
|
||||
this.preferLowerCaseEnums = preferLowerCaseEnums;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<LanguageId> supportedLanguages() {
|
||||
return ImmutableList.of(LanguageId.BOOT_PROPERTIES);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2015, 2018 Pivotal, Inc.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* https://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Pivotal, Inc. - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.springframework.ide.vscode.boot.yaml.completions;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.LanguageSpecific;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlAssistContextProvider;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlCompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlCompletionEngineOptions;
|
||||
import org.springframework.ide.vscode.commons.yaml.structure.YamlStructureProvider;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class SpringYamlCompletionEngine extends YamlCompletionEngine implements LanguageSpecific {
|
||||
|
||||
public SpringYamlCompletionEngine(YamlStructureProvider structureProvider,
|
||||
YamlAssistContextProvider contextProvider, YamlCompletionEngineOptions options) {
|
||||
super(structureProvider, contextProvider, options);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<LanguageId> supportedLanguages() {
|
||||
return ImmutableList.of(LanguageId.BOOT_PROPERTIES_YAML);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user