import { SourceLocationRange } from '@maniascript/parser';
import { type GlobalConfig, type LinterConfig } from './config.js';
import { Severity } from './rule.js';
declare enum Emitter {
    Parser = "Parser",
    Linter = "Linter"
}
interface LinterMessage {
    emitter: Emitter;
    ruleId: string | null;
    severity: Severity;
    message: string;
    source: SourceLocationRange;
}
interface Stats {
    fileOpeningDuration: bigint;
    msApiGenerationDuration: bigint;
    parsingDuration: bigint;
    lintingDuration: bigint;
}
declare enum DisableDirectiveType {
    CurrentLine = 0,
    NextLine = 1,
    Block = 2
}
interface DisabledRuleComment {
    line: number;
    rangeStart: number;
    rangeEnd: number;
    ruleIds: string[];
    description: string;
    directiveType: DisableDirectiveType;
    directiveSource: SourceLocationRange;
    isUsed: boolean;
    usedRuleIds: string[];
}
interface LinterTextReport {
    success: boolean;
    messages: LinterMessage[];
    disabledRuleComments: DisabledRuleComment[];
    stats: Stats;
}
interface LinterFileReport {
    success: boolean;
    path: string;
    messages: LinterMessage[];
    stats: Stats;
}
interface LinterReport {
    success: boolean;
    files: LinterFileReport[];
    stats: Stats;
}
declare class Linter {
    config: GlobalConfig;
    msApiCache: Map<string, Set<string>>;
    constructor(config?: GlobalConfig | string);
    lintCode(code: string, linterConfig: LinterConfig): Promise<LinterTextReport>;
    lintFile(filePath: string, fileContent?: string): Promise<LinterFileReport>;
    lint(patterns: string | string[]): Promise<LinterReport>;
}
export { Linter, type LinterMessage, type LinterTextReport, type LinterFileReport, type LinterReport, Emitter, DisableDirectiveType };
