Add quickfix for missing properties in concourse editor
This commit is contained in:
@@ -18,7 +18,6 @@ import org.eclipse.lsp4j.DiagnosticSeverity;
|
||||
import org.eclipse.lsp4j.ServerCapabilities;
|
||||
import org.eclipse.lsp4j.TextDocumentSyncKind;
|
||||
import org.springframework.ide.vscode.commons.languageserver.LanguageIds;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter;
|
||||
import org.springframework.ide.vscode.commons.languageserver.hover.HoverInfoProvider;
|
||||
import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter;
|
||||
@@ -32,6 +31,7 @@ import org.springframework.ide.vscode.commons.yaml.ast.YamlASTProvider;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.SchemaBasedYamlAssistContextProvider;
|
||||
import org.springframework.ide.vscode.commons.yaml.completion.YamlCompletionEngine;
|
||||
import org.springframework.ide.vscode.commons.yaml.hover.YamlHoverInfoProvider;
|
||||
import org.springframework.ide.vscode.commons.yaml.reconcile.YamlQuickfixes;
|
||||
import org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaBasedReconcileEngine;
|
||||
import org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YamlSchema;
|
||||
@@ -47,6 +47,7 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
|
||||
YamlASTProvider currentAsts = models.getAstProvider(false);
|
||||
private SchemaSpecificPieces forPipelines;
|
||||
private SchemaSpecificPieces forTasks;
|
||||
private final YamlQuickfixes yamlQuickfixes;
|
||||
|
||||
private class SchemaSpecificPieces {
|
||||
|
||||
@@ -62,7 +63,7 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
|
||||
HoverInfoProvider infoProvider = new YamlHoverInfoProvider(currentAsts, structureProvider, contextProvider);
|
||||
this.hoverEngine = new VscodeHoverEngineAdapter(ConcourseLanguageServer.this, infoProvider);
|
||||
|
||||
this.reconcileEngine = new YamlSchemaBasedReconcileEngine(currentAsts, schema);
|
||||
this.reconcileEngine = new YamlSchemaBasedReconcileEngine(currentAsts, schema, yamlQuickfixes);
|
||||
reconcileEngine.setTypeCollector(models.getAstTypeCache());
|
||||
}
|
||||
|
||||
@@ -73,6 +74,7 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
|
||||
|
||||
public ConcourseLanguageServer() {
|
||||
PipelineYmlSchema pipelineSchema = new PipelineYmlSchema(models);
|
||||
this.yamlQuickfixes = new YamlQuickfixes(getQuickfixRegistry(), documents, structureProvider);
|
||||
|
||||
this.forPipelines = new SchemaSpecificPieces(pipelineSchema);
|
||||
this.forTasks = new SchemaSpecificPieces(pipelineSchema.getTaskSchema());
|
||||
@@ -158,6 +160,8 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
|
||||
|
||||
c.setDefinitionProvider(true);
|
||||
|
||||
c.setCodeActionProvider(true);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ package org.springframework.ide.vscode.concourse;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.springframework.ide.vscode.commons.util.RegexpParser;
|
||||
import org.springframework.ide.vscode.commons.util.StringUtil;
|
||||
import org.springframework.ide.vscode.commons.util.ValueParseException;
|
||||
import org.springframework.ide.vscode.commons.util.ValueParser;
|
||||
import org.springframework.ide.vscode.commons.util.text.IDocument;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.SchemaContextAware;
|
||||
@@ -53,13 +55,24 @@ public class ConcourseValueParsers {
|
||||
public static SchemaContextAware<ValueParser> acceptOnlyUniqueNames(
|
||||
Function<IDocument, Multiset<String>> getDefinedNameCounts,
|
||||
String typeName
|
||||
) {
|
||||
return acceptOnlyUniqueNames(getDefinedNameCounts, typeName, false);
|
||||
}
|
||||
|
||||
public static SchemaContextAware<ValueParser> acceptOnlyUniqueNames(
|
||||
Function<IDocument, Multiset<String>> getDefinedNameCounts,
|
||||
String typeName,
|
||||
boolean allowEmptyName
|
||||
) {
|
||||
return (dc) -> {
|
||||
Multiset<String> resourceNames = getDefinedNameCounts.apply(dc.getDocument());
|
||||
return (String input) -> {
|
||||
if (!allowEmptyName && !StringUtil.hasText(input)) {
|
||||
throw new ValueParseException("'"+typeName +"' should not be blank");
|
||||
}
|
||||
Multiset<String> resourceNames = getDefinedNameCounts.apply(dc.getDocument());
|
||||
if (resourceNames.count(input)<=1) {
|
||||
//okay
|
||||
return resourceNames;
|
||||
return input;
|
||||
}
|
||||
throw new IllegalArgumentException("Duplicate "+typeName+" '"+input+"'");
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user