@fimbul/wotan
Version:
Pluggable TypeScript and JavaScript linter
57 lines (56 loc) • 2.4 kB
TypeScript
import * as ts from 'typescript';
import { DependencyResolver, DependencyResolverFactory, DependencyResolverHost } from './dependency-resolver';
import { ContentId, Finding, StatePersistence } from '@fimbul/ymir';
export interface ProgramState {
update(program: ts.Program, updatedFile: string): void;
getUpToDateResult(fileName: string, configHash: string): readonly Finding[] | undefined;
setFileResult(fileName: string, configHash: string, result: readonly Finding[]): void;
save(): void;
}
export declare class ProgramStateFactory {
private resolverFactory;
private statePersistence;
private contentId;
constructor(resolverFactory: DependencyResolverFactory, statePersistence: StatePersistence, contentId: ContentId);
create(program: ts.Program, host: ProgramStateHost & DependencyResolverHost, tsconfigPath: string): ProgramStateImpl;
}
export declare type ProgramStateHost = Pick<ts.CompilerHost, 'useCaseSensitiveFileNames'>;
declare const oldStateSymbol: unique symbol;
declare class ProgramStateImpl implements ProgramState {
private host;
private program;
private resolver;
private statePersistence;
private contentId;
private project;
private projectDirectory;
private caseSensitive;
private canonicalProjectDirectory;
private optionsHash;
private assumeChangesOnlyAffectDirectDependencies;
private contentIds;
private fileResults;
private relativePathNames;
private [oldStateSymbol];
private recheckOldState;
private dependenciesUpToDate;
private contentIdHost;
constructor(host: ProgramStateHost, program: ts.Program, resolver: DependencyResolver, statePersistence: StatePersistence, contentId: ContentId, project: string);
/** get old state if global files didn't change */
private tryReuseOldState;
update(program: ts.Program, updatedFile: string): void;
private getContentId;
private computeContentId;
private getRelativePath;
private makeRelativePath;
getUpToDateResult(fileName: string, configHash: string): readonly Finding[] | undefined;
setFileResult(fileName: string, configHash: string, result: ReadonlyArray<Finding>): void;
private isFileUpToDate;
private fileDependenciesUpToDate;
save(): void;
private aggregate;
private sortById;
private lookupFileIndex;
private remapFileNames;
}
export {};