import * as lpc from "./_namespaces/lpc.js";
import { CompilerOptions, Diagnostic, DirectoryStructureHost, DocumentRegistry, IScriptSnapshot, JSDocParsingMode, LanguageService, LanguageServiceHost, ModuleResolutionHost, ProjectReference, TypeAcquisition, WatchOptions } from "./_namespaces/lpc.js";
import { HostCancellationToken, NormalizedPath, ProjectService, ScriptInfo } from "./_namespaces/lpc.server.js";
export declare enum ProjectKind {
    Inferred = 0,
    Configured = 1,
    External = 2,
    AutoImportProvider = 3,
    Auxiliary = 4
}
export declare abstract class Project implements LanguageServiceHost, ModuleResolutionHost, lpc.LpcFileHandlerHost {
    readonly projectKind: ProjectKind;
    readonly projectService: ProjectService;
    private documentRegistry;
    private compilerOptions;
    compileOnSaveEnabled: boolean;
    protected watchOptions: WatchOptions | undefined;
    private rootFilesMap;
    private program;
    private externalFiles;
    private missingFilesMap;
    private hasAddedorRemovedFiles;
    private hasAddedOrRemovedSymlinks;
    protected languageService: LanguageService;
    languageServiceEnabled: boolean;
    readonly trace?: (s: string) => void;
    readonly realpath?: (path: string) => string;
    /**
     * Set of files names that were updated since the last call to getChangesSinceVersion.
     */
    private updatedFileNames;
    /**
     * Set of files that was returned from the last call to getChangesSinceVersion.
     */
    private lastReportedFileNames;
    /**
     * Last version that was reported.
     */
    private lastReportedVersion;
    protected projectErrors: Diagnostic[] | undefined;
    protected isInitialLoadPending: () => boolean;
    private readonly cancellationToken;
    private exportMapCache;
    private changedFilesForExportMapCache;
    fileHandler: lpc.LpcFileHandler;
    readonly jsDocParsingMode: JSDocParsingMode | undefined;
    constructor(projectName: string, projectKind: ProjectKind, projectService: ProjectService, documentRegistry: DocumentRegistry, hasExplicitListOfFiles: boolean, lastFileExceededProgramSize: string | undefined, compilerOptions: CompilerOptions, compileOnSaveEnabled: boolean, watchOptions: WatchOptions | undefined, directoryStructureHost: DirectoryStructureHost, currentDirectory: string);
    disableLanguageService(lastFileExceededProgramSize?: string): void;
    getIncludeDirs(): string[];
    /**
     * Get all the project errors
     */
    getAllProjectErrors(): readonly Diagnostic[];
    getConfigFilePath(): lpc.server.NormalizedPath;
    getCompilationSettings(): lpc.CompilerOptions;
    getCompilerOptions(): lpc.CompilerOptions;
    getNewLine(): string;
    getProjectVersion(): string;
    getScriptInfo(uncheckedFileName: string): lpc.server.ScriptInfo;
    getRootScriptInfos(): lpc.server.ScriptInfo[];
    getProjectReferences(): readonly ProjectReference[] | undefined;
    getProjectName(): string;
    onAllFilesNeedReparse(fileNames: string[]): void;
    getScriptFileNames(): string[];
    isClosed(): boolean;
    hasRoots(): boolean;
    setTypeAcquisition(newTypeAcquisition: TypeAcquisition | undefined): void;
    enableLanguageService(): void;
    addRoot(info: ScriptInfo, fileName?: NormalizedPath): void;
    getLanguageService(ensureSynchronized?: boolean): LanguageService;
    setCompilerOptions(compilerOptions: CompilerOptions): void;
    hasConfigFile(configFilePath: NormalizedPath): boolean;
    getRootFiles(): NormalizedPath[];
    getFileNames(excludeFilesFromExternalLibraries?: boolean, excludeConfigFiles?: boolean): lpc.server.NormalizedPath[];
    private getOrCreateScriptInfoAndAttachToProject;
    getScriptKind(fileName: string): lpc.ScriptKind;
    getScriptVersion(filename: string): string;
    getScriptSnapshot(filename: string): IScriptSnapshot | undefined;
    getCancellationToken(): HostCancellationToken;
    getCurrentDirectory(): string;
    getDefaultLibFileName(): string;
    useCaseSensitiveFileNames(): boolean;
    readDirectory(path: string, extensions?: readonly string[], exclude?: readonly string[], include?: readonly string[], depth?: number): string[];
    readFile(fileName: string): string | undefined;
    writeFile(fileName: string, content: string): void;
    fileExists(file: string): boolean;
    /**
     * Get the errors that dont have any file name associated
     */
    getGlobalProjectErrors(): readonly Diagnostic[];
    setProjectErrors(projectErrors: Diagnostic[] | undefined): void;
    private isWatchedMissingFile;
    isRoot(info: ScriptInfo): boolean;
    protected removeRoot(info: ScriptInfo): void;
    removeFile(info: ScriptInfo, fileExists: boolean, detachFromProject: boolean): void;
    addMissingFileRoot(fileName: NormalizedPath): void;
    getTypeAcquisition(): lpc.TypeAcquisition;
    /**
     * Updates set of files that contribute to this project
     * @returns: true if set of files in the project stays the same and false - otherwise.
     */
    updateGraph(): boolean;
    close(): void;
    private updateGraphWorker;
    private addMissingFileWatcher;
    registerFileUpdate(fileName: string): void;
    containsScriptInfo(info: ScriptInfo): boolean;
    filesToString(writeProjectFileNames: boolean): string;
    private detachScriptInfoIfNotRoot;
    private detachScriptInfoFromProject;
    containsFile(filename: NormalizedPath, requireOpen?: boolean): boolean;
    getScriptInfoForNormalizedPath(fileName: NormalizedPath): ScriptInfo | undefined;
}
export declare class ConfiguredProject extends Project {
    readonly canonicalConfigFilePath: NormalizedPath;
    private projectReferences;
    getProjectReferences(): readonly ProjectReference[] | undefined;
    /**
     * Get all the project errors
     */
    getAllProjectErrors(): readonly Diagnostic[];
    /**
     * If the project has reload from disk pending, it reloads (and then updates graph as part of that) instead of just updating the graph
     * @returns: true if set of files in the project stays the same and false - otherwise.
     */
    updateGraph(): boolean;
    updateReferences(refs: readonly ProjectReference[] | undefined): void;
    close(): void;
    /**
     * Get the errors that dont have any file name associated
     */
    getGlobalProjectErrors(): readonly Diagnostic[];
    setProjectErrors(projectErrors: Diagnostic[]): void;
}
export declare class InferredProject extends Project {
    /** this is canonical project root path */
    readonly projectRootPath: string | undefined;
    isProjectWithSingleRoot(): boolean;
    addRoot(info: ScriptInfo): void;
    removeRoot(info: ScriptInfo): void;
    close(): void;
}
//# sourceMappingURL=project.d.ts.map