From 05cdcbe85d1d772b66b9fbe76b5d9e6726ae4ec2 Mon Sep 17 00:00:00 2001 From: braunc8 Date: Fri, 24 Jan 2025 13:11:03 -0500 Subject: [PATCH] Added check for conclusion in pattern (closes #91) --- .../validators/pattern-validator.ts | 50 +++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/langium/src/language/services/validation/validators/pattern-validator.ts b/langium/src/language/services/validation/validators/pattern-validator.ts index e79e9f2..792a00f 100644 --- a/langium/src/language/services/validation/validators/pattern-validator.ts +++ b/langium/src/language/services/validation/validators/pattern-validator.ts @@ -1,5 +1,5 @@ import { diagnosticData, ValidationAcceptor } from "langium"; -import { JustificationPattern } from "../../../generated/ast.js"; +import { JustificationPattern, Variable } from "../../../generated/ast.js"; import { Validator } from "./abstract-validator.js"; //Class to validate patterns in the jpipe language @@ -7,18 +7,50 @@ export class PatternValidator extends Validator { - if(variable.kind === "@support"){ - support_found = true; - } - }); + //helper function to check existence of support variable + private static checkSupport(model: JustificationPattern, accept: ValidationAcceptor): void{ + let support_found = false; - if(!support_found){ - accept("warning", "No @support variables found in pattern", {node: model, property: "name", data: diagnosticData("noSupportInPattern")}) + model.variables.forEach( variable => { + if(variable.kind === "@support"){ + support_found = true; } + }); + + if(!support_found){ + accept("warning", "No @support variables found in pattern", {node: model, property: "name", data: diagnosticData("noSupportInPattern")}) + } + } + + //helper function to check if conclusion exists in a pattern + private static checkConclusion(model: JustificationPattern, accept: ValidationAcceptor): void{ + let conclusion_exists = PatternValidator.conclusionExists(model.variables); + + if(!conclusion_exists){ + accept("error", "All justification diagrams must have a conclusion", {node: model, property: "name", data: diagnosticData("noConclusionInPattern")}) } } + //helper function to determine if a conclusion exists in a given set of variables + private static conclusionExists(variables: Array): boolean{ + let conclusion_exists: boolean = false; + let i = 0; + + while(i < variables.length && !conclusion_exists){ + let variable = variables[i]; + + if(variable.kind === "conclusion"){ + conclusion_exists = true; + } + + i++ + } + + return conclusion_exists; + } } \ No newline at end of file