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:
Kris De Volder
2017-04-03 11:36:58 -07:00
parent 3e73814aa9
commit f64b90e19c
5 changed files with 31 additions and 6 deletions

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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(