Enable concourse editor for task files.

This commit is contained in:
Kris De Volder
2017-01-26 10:04:46 -08:00
parent 1306dbac98
commit 6fc28357aa
14 changed files with 177 additions and 69 deletions

View File

@@ -13,11 +13,13 @@ package org.springframework.ide.vscode.concourse;
import org.eclipse.lsp4j.CompletionOptions;
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.VscodeHoverEngine;
import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter;
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
@@ -44,14 +46,22 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
VscodeCompletionEngine completionEngine = new VscodeCompletionEngineAdapter(this, yamlCompletionEngine);
HoverInfoProvider infoProvider = new YamlHoverInfoProvider(currentAsts, structureProvider, contextProvider);
VscodeHoverEngine hoverEngine = new VscodeHoverEngineAdapter(this, infoProvider);
YamlSchemaBasedReconcileEngine reconcileEngine = new YamlSchemaBasedReconcileEngine(currentAsts, schema);
YamlSchemaBasedReconcileEngine pipelineReconcileEngine = new YamlSchemaBasedReconcileEngine(currentAsts, schema);
pipelineReconcileEngine.setTypeCollector(models.getAstTypeCache());
YamlSchemaBasedReconcileEngine taskReconcileEngine = new YamlSchemaBasedReconcileEngine(currentAsts, schema.getTaskSchema());
ConcourseDefinitionFinder definitionFinder = new ConcourseDefinitionFinder(this, models, schema);
reconcileEngine.setTypeCollector(models.getAstTypeCache());
// SimpleWorkspaceService workspace = getWorkspaceService();
documents.onDidChangeContent(params -> {
TextDocument doc = params.getDocument();
validateWith(doc, reconcileEngine);
if (LanguageIds.CONCOURSE_PIPELINE.equals(doc.getLanguageId())) {
validateWith(doc, pipelineReconcileEngine);
} else if (LanguageIds.CONCOURSE_TASK.equals(doc.getLanguageId())) {
validateWith(doc, taskReconcileEngine);
} else {
validateWith(doc, IReconcileEngine.NULL);
}
});
// workspace.onDidChangeConfiguraton(settings -> {

View File

@@ -66,7 +66,6 @@ public class PipelineYmlSchema implements YamlSchema {
.collect(Collectors.toSet())
.block();
private final YBeanType TOPLEVEL_TYPE;
private final YTypeUtil TYPE_UTIL;
@@ -95,6 +94,8 @@ public class PipelineYmlSchema implements YamlSchema {
public final YAtomicType t_job_name;
public final YAtomicType t_resource_type_name;
public final YBeanType task;
private final ResourceTypeRegistry resourceTypes = new ResourceTypeRegistry();
public PipelineYmlSchema(ConcourseModel models) {
@@ -237,6 +238,10 @@ public class PipelineYmlSchema implements YamlSchema {
addProp(TOPLEVEL_TYPE, "resource_types", f.yseq(resourceType));
addProp(TOPLEVEL_TYPE, "groups", f.yseq(group));
task = f.ybean("TaskConfig");
YType t_platform = f.yenum("Platform", "windows", "linux", "darwin");
addProp(task, "platform", t_platform);
initializeDefaultResourceTypes();
}
@@ -381,4 +386,24 @@ public class PipelineYmlSchema implements YamlSchema {
public YTypeUtil getTypeUtil() {
return TYPE_UTIL;
}
public YamlSchema getTaskSchema() {
return new YamlSchema() {
@Override
public YTypeUtil getTypeUtil() {
return TYPE_UTIL;
}
@Override
public YType getTopLevelType() {
return task;
}
@Override
public String toString() {
return "TaskYamlSchema";
}
};
}
}