Property constraint violations in concourse editor are warnings.

This commit is contained in:
Kris De Volder
2017-03-01 16:49:18 -08:00
parent f2486c1a8b
commit 3267d1de7c
6 changed files with 88 additions and 23 deletions

View File

@@ -14,24 +14,26 @@ import java.util.concurrent.CompletableFuture;
import org.eclipse.lsp4j.CompletionList;
import org.eclipse.lsp4j.CompletionOptions;
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.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.reconcile.ProblemType;
import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblem;
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;
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.YamlAssistContextProvider;
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.YamlSchemaBasedReconcileEngine;
import org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems;
import org.springframework.ide.vscode.commons.yaml.schema.YamlSchema;
import org.springframework.ide.vscode.commons.yaml.structure.YamlStructureProvider;
@@ -46,13 +48,11 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
private class SchemaSpecificPieces {
final YamlSchema schema;
final VscodeCompletionEngine completionEngine;
final VscodeHoverEngineAdapter hoverEngine;
final YamlSchemaBasedReconcileEngine reconcileEngine;
SchemaSpecificPieces(YamlSchema schema) {
this.schema = schema;
SchemaBasedYamlAssistContextProvider contextProvider = new SchemaBasedYamlAssistContextProvider(schema);
YamlCompletionEngine yamlCompletionEngine = new YamlCompletionEngine(structureProvider, contextProvider);
this.completionEngine = new VscodeCompletionEngineAdapter(ConcourseLanguageServer.this, yamlCompletionEngine);
@@ -126,6 +126,14 @@ public class ConcourseLanguageServer extends SimpleLanguageServer {
documents.onDefinition(definitionFinder);
}
@Override
protected DiagnosticSeverity getDiagnosticSeverity(ReconcileProblem problem) {
ProblemType type = problem.getType();
if (YamlSchemaProblems.PROPERTY_CONSTRAINT.contains(type)) {
return DiagnosticSeverity.Warning;
}
return super.getDiagnosticSeverity(problem);
}
@Override
protected ServerCapabilities getServerCapabilities() {

View File

@@ -11,13 +11,14 @@
package org.springframework.ide.vscode.concourse;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.springframework.ide.vscode.languageserver.testharness.TestAsserts.assertContains;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.eclipse.lsp4j.Diagnostic;
import org.eclipse.lsp4j.DiagnosticSeverity;
import org.junit.Before;
import org.junit.Test;
@@ -536,6 +537,48 @@ public class ConcourseEditorTest {
);
}
@Test
public void violatedPropertyConstraintsAreWarnings() throws Exception {
Editor editor;
editor = harness.newEditor(
"jobs:\n" +
"- name: blah"
);
editor.assertProblems("name: blah|'plan' is required");
assertEquals(DiagnosticSeverity.Warning, editor.assertProblem("name: blah").getSeverity());
editor = harness.newEditor(
"jobs:\n" +
"- name: do-stuff\n" +
" plan:\n" +
" - task: foo"
);
editor.assertProblems("task: foo|One of [config, file] is required");
assertEquals(DiagnosticSeverity.Warning, editor.assertProblem("task: foo").getSeverity());
editor = harness.newEditor(
"jobs:\n" +
"- name: do-stuff\n" +
" plan:\n" +
" - task: foo\n" +
" config: {}\n" +
" file: path/to/file"
);
{
List<Diagnostic> problems = editor.assertProblems(
"config|Only one of [config, file]",
"{}|[inputs, platform, run] are required",
"{}|One of [image_resource, image]",
"file|Only one of [config, file]"
);
//All of the problems in this example are property contraint violations! So all should be warnings.
for (Diagnostic diagnostic : problems) {
assertEquals(DiagnosticSeverity.Warning, diagnostic.getSeverity());
}
}
}
@Test
public void reconcileDuplicateJobNames() throws Exception {
Editor editor = harness.newEditor(