UNPKG

pddl-workspace

Version:
200 lines 6.48 kB
"use strict"; /* -------------------------------------------------------------------------------------------- * Copyright (c) Jan Dolejsi. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. * ------------------------------------------------------------------------------------------ */ Object.defineProperty(exports, "__esModule", { value: true }); exports.UnknownFileInfo = exports.ParsingProblem = exports.FileInfo = exports.stripComments = void 0; const DocumentPositionResolver_1 = require("./DocumentPositionResolver"); const PddlSyntaxTree_1 = require("./parser/PddlSyntaxTree"); const PddlTokenizer_1 = require("./parser/PddlTokenizer"); const language_1 = require("./language"); const Compilations_1 = require("./Compilations"); function stripComments(pddlText) { const lines = pddlText.split(/\r?\n/g); for (let i = 0; i < lines.length; i++) { const line = lines[i]; const index = line.indexOf(';'); if (index > -1) { lines[i] = line.substring(0, index); } } return lines.join("\n"); } exports.stripComments = stripComments; /** * An abstract PDDL file. */ class FileInfo { constructor(fileUri, version, name, syntaxTree, positionResolver) { this.fileUri = fileUri; this.version = version; this.name = name; this.syntaxTree = syntaxTree; this.positionResolver = positionResolver; this.status = language_1.FileStatus.Parsed; this.parsingProblems = []; this.compilations = new Compilations_1.Compilations(); } getVersion() { return this.version; } getText() { if (this.text) { return this.text; } else { throw new Error('Accessing getText() before file was parsed'); } } setText(text) { this.text = text; } getCompiledText() { return this.getCompilations().applyAll(this.getText()); } isDomain() { return false; } isProblem() { return false; } isUnknownPddl() { return false; } isPlan() { return false; } isHappenings() { return false; } update(version, text, force = false) { const isNewerVersion = (version > this.version) || force; if (isNewerVersion) { this.setStatus(language_1.FileStatus.Dirty); this.version = version; this.text = text; } return isNewerVersion; } setStatus(status) { this.status = status; } getStatus() { return this.status; } /** * Adds a parsing problem. * @param parsingProblem parsing problems */ addProblem(parsingProblem) { this.parsingProblems.push(parsingProblem); } /** * Adds list of parsing problems. * @param parsingProblems parsing problems */ addProblems(parsingProblems) { parsingProblems.forEach(pp => this.addProblem(pp)); } getParsingProblems() { return this.parsingProblems; } getVariableReferences(variable) { const referenceLocations = []; this.syntaxTree.getDefineNode().getChildrenRecursively(node => this.isVariableReference(node, variable), node => referenceLocations.push(this.getRange(node))); return referenceLocations; } isVariableReference(node, variable) { if (node.getToken().type !== PddlTokenizer_1.PddlTokenType.OpenBracket) { return false; } const nonWhiteSpaceChildren = node.getNonWhitespaceChildren(); if (nonWhiteSpaceChildren.length < 1) { return false; } const variableNameNode = nonWhiteSpaceChildren[0]; return variableNameNode.getToken().type === PddlTokenizer_1.PddlTokenType.Other && variableNameNode.getToken().tokenText.toLowerCase() === variable.name.toLowerCase(); } getTypeReferences(typeName) { if (!this.text) { return []; } const referenceLocations = []; const pattern = `-\\s+${typeName}\\b`; const lines = stripComments(this.text).split('\n'); const regexp = new RegExp(pattern, "gi"); for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) { const line = lines[lineIdx]; regexp.lastIndex = 0; const match = regexp.exec(line); if (match) { const range = new DocumentPositionResolver_1.PddlRange({ start: new DocumentPositionResolver_1.PddlPosition(lineIdx, match.index + 2), end: new DocumentPositionResolver_1.PddlPosition(lineIdx, match.index + match[0].length) }); referenceLocations.push(range); } } return referenceLocations; } getRange(node) { return this.positionResolver.resolveToRange(node.getStart(), node.getEnd()); } setRequirements(requirements, node) { this.requirements = requirements; this.requirementsNode = node; } getRequirements() { if (this.requirements) { return this.requirements; } else { throw new Error('Accessing getRequirements() before file was parsed'); } } getRequirementsNode() { return this.requirementsNode; } getDocumentPositionResolver() { return this.positionResolver; } /** * @returns code injections, code replacements */ getCompilations() { return this.compilations; } } exports.FileInfo = FileInfo; /** * Parsing problem. */ class ParsingProblem { /** * Constructs parsing problem. * @param problem problem description to display * @param severity problem severity * @param range range where the problem is */ constructor(problem, severity, range) { this.problem = problem; this.severity = severity; this.range = range; } } exports.ParsingProblem = ParsingProblem; class UnknownFileInfo extends FileInfo { constructor(fileUri, version, positionResolver) { super(fileUri, version, "", PddlSyntaxTree_1.PddlSyntaxTree.EMPTY, positionResolver); } getLanguage() { return language_1.PddlLanguage.PDDL; } isUnknownPddl() { return true; } } exports.UnknownFileInfo = UnknownFileInfo; //# sourceMappingURL=FileInfo.js.map