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";
}
};
}
}

View File

@@ -20,17 +20,18 @@ import java.util.stream.Collectors;
import org.eclipse.lsp4j.DiagnosticSeverity;
import org.junit.Before;
import org.junit.Test;
import org.springframework.ide.vscode.commons.languageserver.LanguageIds;
import org.springframework.ide.vscode.commons.util.IOUtil;
import org.springframework.ide.vscode.languageserver.testharness.Editor;
import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness;
public class PipelineYamlEditorTest {
public class ConcourseEditorTest {
private static final String CURSOR = "<*>";
LanguageServerHarness harness;
@Before public void setup() throws Exception {
harness = new LanguageServerHarness(ConcourseLanguageServer::new);
harness = new LanguageServerHarness(ConcourseLanguageServer::new, LanguageIds.CONCOURSE_PIPELINE);
harness.intialize(null);
}
@@ -45,9 +46,6 @@ public class PipelineYamlEditorTest {
}
@Test public void reconcileRunsOnDocumentOpenAndChange() throws Exception {
LanguageServerHarness harness = new LanguageServerHarness(ConcourseLanguageServer::new);
harness.intialize(null);
Editor editor = harness.newEditor(
"somemap: val\n"+
"- sequence"
@@ -90,7 +88,7 @@ public class PipelineYamlEditorTest {
}
private String getClasspathResourceText(String resourceName) throws Exception {
InputStream stream = PipelineYamlEditorTest.class.getClassLoader().getResourceAsStream(resourceName);
InputStream stream = ConcourseEditorTest.class.getClassLoader().getResourceAsStream(resourceName);
return IOUtil.toString(stream);
}