import ts from 'typescript'; import tsp from 'typescript/lib/protocol'; export type Nullable = T | null | undefined; export interface PluginParams { options: TPluginOptions; fileName: string; rootDir: string; text: string; sourceFile: ts.SourceFile; getDiagnostics: () => Promise; } export interface PluginDiagnostics { semanticDiagnostics: Diagnostic[]; syntacticDiagnostics: Diagnostic[]; suggestionDiagnostics: Diagnostic[]; } export type PluginResult = string | void; export interface Plugin { name: string; run(params: PluginParams): Promise | PluginResult; } export type PluginWithOptions = { plugin: Plugin; options: TPluginOptions; }; // eslint-disable-next-line no-use-before-define, @typescript-eslint/no-use-before-define export type Diagnostic = tsp.Diagnostic | tsp.DiagnosticWithLinePosition;