import { EventEmitter } from "./promise-event-emitter";
import MessageType from "../shared/type/MessageType";
import type { TextlintFilterRuleContext, TextlintFilterRuleOptions, TextlintFilterRuleReporter, TextlintFilterRuleShouldIgnoreFunction, TextlintMessageFixCommand, TextlintRuleContext, TextlintRuleContextReportFunction, TextlintRuleOptions, TextlintRuleReporter, TextlintSourceCode } from "@textlint/types";
export interface IgnoreReportedMessage {
    ruleId: string;
    type: typeof MessageType.ignore;
    range: readonly [startIndex: number, endIndex: number];
    ignoringRuleId: string;
}
export interface LintReportedMessage {
    type: typeof MessageType.lint;
    ruleId: string;
    message: string;
    index: number;
    line: number;
    column: number;
    range: readonly [startIndex: number, endIndex: number];
    loc: {
        start: {
            line: number;
            column: number;
        };
        end: {
            line: number;
            column: number;
        };
    };
    severity: number;
    fix?: TextlintMessageFixCommand;
}
/**
 * CoreTask receive AST and prepare, traverse AST, emit nodeType event!
 * You can observe task and receive "message" event that is TextLintMessage.
 */
export default abstract class TextLintCoreTask extends EventEmitter {
    private ruleTypeEmitter;
    static get events(): {
        start: string;
        message: string;
        complete: string;
        error: string;
    };
    constructor();
    abstract start(): void;
    createShouldIgnore(): TextlintFilterRuleShouldIgnoreFunction;
    createReporter(sourceCode: TextlintSourceCode): TextlintRuleContextReportFunction;
    /**
     * start process and emitting events.
     * You can listen message by `task.on("message", message => {})`
     * @param {SourceCode} sourceCode
     */
    startTraverser(sourceCode: TextlintSourceCode): void;
    /**
     * try to get rule object
     */
    tryToGetRuleObject(ruleCreator: TextlintRuleReporter, ruleContext: Readonly<TextlintRuleContext>, ruleOptions?: TextlintRuleOptions): import("@textlint/types").TextlintRuleReportHandler;
    /**
     * try to get filter rule object
     */
    tryToGetFilterRuleObject(ruleCreator: TextlintFilterRuleReporter, ruleContext: Readonly<TextlintFilterRuleContext>, ruleOptions?: TextlintFilterRuleOptions): import("@textlint/types").TextlintFilterRuleReportHandler;
    /**
     * add all the node types as listeners of the rule
     * @param {Function} ruleCreator
     * @param {Readonly<RuleContext>|Readonly<FilterRuleContext>} ruleContext
     * @param {Object|boolean|undefined} ruleOptions
     * @returns {Object}
     */
    tryToAddListenRule(ruleCreator: TextlintRuleReporter | TextlintFilterRuleReporter, ruleContext: Readonly<TextlintRuleContext> | Readonly<TextlintFilterRuleContext>, ruleOptions?: TextlintRuleOptions | TextlintFilterRuleOptions): void;
}
//# sourceMappingURL=textlint-core-task.d.ts.map