UNPKG

pddl-workspace

Version:
158 lines (157 loc) 6.39 kB
/// <reference types="node" /> import { URI } from 'vscode-uri'; import { EventEmitter } from 'events'; import { ProblemInfo } from './ProblemInfo'; import { FileInfo } from './FileInfo'; import { HappeningsInfo } from "./HappeningsInfo"; import { PddlExtensionContext } from './PddlExtensionContext'; import { DocumentPositionResolver } from './DocumentPositionResolver'; import { DomainInfo } from './DomainInfo'; import { PlanInfo } from './PlanInfo'; import { PddlLanguage, FileStatus } from './language'; import { PddlFileParser, PddlParserOptions } from './parser/index'; import { PddlWorkspaceExtension } from './PddlWorkspaceExtension'; import { PlannerRegistrar } from './planner/PlannerRegistrar'; export declare class Folder { readonly folderPath: string; files: Map<string, FileInfo>; private readonly folderUri; constructor(folderPath: string); getFolderUri(): URI; hasFile(fileUri: URI): boolean; get(fileUri: URI): FileInfo | undefined; add(fileInfo: FileInfo): void; remove(fileInfo: FileInfo): boolean; removeByUri(fileUri: URI): boolean; getProblemFileWithName(problemName: string): ProblemInfo | undefined; getProblemFilesFor(domainInfo: DomainInfo): ProblemInfo[]; getDomainFilesFor(problemInfo: ProblemInfo): DomainInfo[]; } /** * Enumeration of file types. The types `File` and `Directory` can also be * a symbolic links, in that case use `FileType.File | FileType.SymbolicLink` and * `FileType.Directory | FileType.SymbolicLink`. */ export declare enum FileType { /** * The file type is unknown. */ Unknown = 0, /** * A regular file. */ File = 1, /** * A directory. */ Directory = 2, /** * A symbolic link to a file. */ SymbolicLink = 64 } export interface PddlFileSystem { /** * Retrieve all entries of a [directory](#FileType.Directory). * * @param uri The uri of the folder. * @return An array of name/type-tuples or a thenable that resolves to such. */ readDirectory(uri: URI): Promise<[string, FileType][]>; /** * Read the entire contents of a file. * * @param uri The uri of the file. * @return An array of bytes or a thenable that resolves to such. */ readFile(uri: URI): Promise<Uint8Array>; } export interface PddlWorkspaceOptions { epsilon: number; context?: PddlExtensionContext; parserOptions?: PddlParserOptions; fileLoader?: PddlFileSystem; } export declare class PddlWorkspace extends EventEmitter { readonly folders: Map<string, Folder>; private parsingTimeout; private defaultTimerDelayInSeconds; private pddlFileParsers; private plannerRegistrar; private _epsilon; private readonly fileLoader?; static INSERTED: symbol; static UPDATED: symbol; static REMOVING: symbol; static MAX_FILES_PER_FOLDER: number; constructor(options: PddlWorkspaceOptions); get epsilon(): number; set epsilon(value: number); getPlannerRegistrar(): PlannerRegistrar; addExtension(extension: PddlWorkspaceExtension): void; addPddlFileParser(parsers: PddlFileParser<FileInfo>[]): void; static getFolderPath(documentUri: URI): string; static getFileName(documentUri: URI): string; static getFileInfoName(fileInfo: FileInfo): string; upsertAndParseFile(fileUri: URI, language: PddlLanguage, fileVersion: number, fileText: string, positionResolver: DocumentPositionResolver): Promise<FileInfo>; upsertFile(fileUri: URI, language: PddlLanguage, fileVersion: number, fileText: string, positionResolver: DocumentPositionResolver, force?: boolean): Promise<FileInfo>; private insertFile; private loadFolder; invalidateDiagnostics(fileInfo: FileInfo, fileStatus?: FileStatus): void; markProblemsAsDirty(domainInfo: DomainInfo): void; markPlansAsDirty(problemInfo: ProblemInfo): void; scheduleParsing(): void; private cancelScheduledParsing; private parseAllDirty; reParseFile(fileInfo: FileInfo): Promise<FileInfo>; private lastVersionUpdateEmitted; /** * Emit event, unless it is stale * @param fileInfo file concerned */ private emitIfNew; private parseFile; private appendOffendingTokenToParsingProblems; upsertAndParseFolder(folderUri: URI): Promise<Folder>; getFolder(folderUri: URI): Folder | undefined; private upsertFolder; removeFile(documentUri: URI, options: FileRemovalOptions): boolean; hasExplicitAssociations(documentUri: URI): boolean; getFileInfo<T extends FileInfo>(fileUri: URI): T | undefined; getProblemFiles(domainInfo: DomainInfo): ProblemInfo[]; getPlanFiles(problemInfo: ProblemInfo): PlanInfo[]; getHappeningsFiles(problemInfo: ProblemInfo): HappeningsInfo[]; getAllFilesIf<T extends FileInfo>(predicate: (fileInfo: T) => boolean): T[]; getAllFiles(): FileInfo[]; /** * Finds a corresponding domain file * @param fileInfo a PDDL file info * @returns corresponding domain file if fileInfo is a problem file, * or `fileInfo` itself if the `fileInfo` is a domain file, or `null` otherwise. */ asDomain(fileInfo: FileInfo): DomainInfo | undefined; /** Explicit associations between problem files and domain files. */ private problemToDomainMap; associateProblemToDomain(problemInfo: ProblemInfo, domainInfo: DomainInfo): void; /** * Finds the matching domain files. * @param problemFile problem file info * @returns matching domain files (zero, one or many) */ getDomainFilesFor(problemFile: ProblemInfo): DomainInfo[]; /** * Finds the matching domain file in the same folder. * @param problemFile problem file info * @returns matching domain file, if exactly one exists in the same folder. `null` otherwise */ getDomainFileFor(problemFile: ProblemInfo): DomainInfo | undefined; /** Explicit associations between plan files and problem files. */ private planToProblemMap; associatePlanToProblem(planUri: URI, problemFileInfo: ProblemInfo): void; getProblemFileForPlan(planInfo: PlanInfo): ProblemInfo | undefined; getProblemFileForHappenings(happeningsInfo: HappeningsInfo): ProblemInfo | undefined; getFolderOf(fileInfo: FileInfo): Folder | undefined; } export interface FileRemovalOptions { removeAllReferences: boolean; }