Refactor so that 'missing property' marker is created in one place
This is in preparation to change the logic of how marker location is determined.
This commit is contained in:
@@ -234,7 +234,7 @@ public class SchemaBasedYamlASTReconciler implements YamlASTReconciler {
|
||||
} else {
|
||||
message = "Properties "+missingProps+" are required for '"+type+"'";
|
||||
}
|
||||
problem(map, message, YamlSchemaProblems.MISSING_PROPERTY);
|
||||
problems.accept(YamlSchemaProblems.missingProperty(message, map));
|
||||
}
|
||||
|
||||
//Check for other constraints attached to the type
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.springframework.ide.vscode.commons.languageserver.reconcile.Reconcile
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.DocumentRegion;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YType;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YTypedProperty;
|
||||
import org.yaml.snakeyaml.nodes.MappingNode;
|
||||
import org.yaml.snakeyaml.nodes.Node;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
@@ -90,4 +91,8 @@ public class YamlSchemaProblems {
|
||||
return new ReconcileProblemImpl(problemType, msg, start, end-start);
|
||||
}
|
||||
|
||||
public static ReconcileProblem missingProperty(String msg, MappingNode map) {
|
||||
return problem(MISSING_PROPERTY, msg, map);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
package org.springframework.ide.vscode.commons.yaml.schema.constraints;
|
||||
|
||||
import static org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems.EXTRA_PROPERTY;
|
||||
import static org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems.MISSING_PROPERTY;
|
||||
import static org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems.missingProperty;
|
||||
import static org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems.problem;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -68,7 +68,7 @@ public class Constraints {
|
||||
.count();
|
||||
if (foundPropsCount==0) {
|
||||
if (!allowFewer) {
|
||||
problems.accept(problem(MISSING_PROPERTY,
|
||||
problems.accept(missingProperty(
|
||||
"One of "+requiredProps+" is required for '"+type+"'", map));
|
||||
}
|
||||
} else if (foundPropsCount>1) {
|
||||
|
||||
@@ -23,7 +23,6 @@ import org.springframework.ide.vscode.commons.yaml.ast.YamlFileAST;
|
||||
import org.springframework.ide.vscode.commons.yaml.path.YamlPath;
|
||||
import org.springframework.ide.vscode.commons.yaml.path.YamlPathSegment;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.DynamicSchemaContext;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.SchemaContextAware;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YType;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.AbstractType;
|
||||
@@ -31,12 +30,11 @@ import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.YAtomicTy
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.YBeanType;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.YBeanUnionType;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.YTypedPropertyImpl;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.constraints.Constraint;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.constraints.Constraints;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YTypeUtil;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YTypedProperty;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YValueHint;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.YamlSchema;
|
||||
import org.springframework.ide.vscode.commons.yaml.schema.constraints.Constraints;
|
||||
import org.yaml.snakeyaml.nodes.Node;
|
||||
|
||||
import reactor.core.publisher.Flux;
|
||||
|
||||
@@ -583,6 +583,28 @@ public class ConcourseEditorTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void underlineParentPropertyForMissingNode() throws Exception {
|
||||
//See: https://www.pivotaltracker.com/story/show/140709005
|
||||
|
||||
Editor editor = harness.newEditor(
|
||||
"jobs:\n" +
|
||||
"- name: hello-world\n" +
|
||||
" plan:\n" +
|
||||
" - task: say-hello\n" +
|
||||
" config:\n" +
|
||||
" image_resource:\n" +
|
||||
" type: docker-image\n" +
|
||||
" source: {repository: ubuntu}\n" +
|
||||
" run:\n" +
|
||||
" path: echo\n" +
|
||||
" args: [\"Hello, world!\"]"
|
||||
);
|
||||
editor.assertProblems(
|
||||
"config|something"
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reconcileDuplicateJobNames() throws Exception {
|
||||
Editor editor = harness.newEditor(
|
||||
|
||||
Reference in New Issue
Block a user