/** * The default registered tags */ export declare const enum DefaultTags { todo = "todo", fixme = "fixme" } /** * Sometimes referred to as kind, this is usually a TODO or FIXME but can be any custom string */ export type Tag = string; export interface ExtensionConfig { /** * The associated parser name(s) used to parse this extension */ parserName: string | string[]; /** * A list of other filetypes (extensions) that might be included in this filetype (extension) */ includedFiles?: string[]; } /** * The supported extensions (filetypes) database */ export interface ExtensionsDb { [extension: string]: ExtensionConfig; } export interface ParseConfig { /** * Associate the filetypes with parsers. This allows adding support for new filetypes, or overriding the config for existing ones. * * ```js * { * '.myExt1': { parserName: 'myCustomParser1' }, * '.myExt2': { parserName: 'myCustomParser2' }, * '.myExt3': { parserName: 'defaultParser' }, * } * ``` */ associateParser?: ExtensionsDb; /** * Extend or override the parsers by parserName, for example override the defaultParser or add a new parser * * ```js * { * myCustomParser1: function (parseOptions) { * return function parse(contents, file) { * const comments = []; * // do something with contents * comments.push({ * file: file, * tag: 'TODO', * line: 42, * text: 'The comment text/body', * ref: '' * }); * return comments; * } * }, * myCustomParser2: function (parseOptions) { * // etc * }, * } * ``` */ customParsers?: CustomParsers; /** * Other tags to look for (besides todos and fixmes). * Tags are case-insensitive and are strict matching, i.e PROD tag will match PROD but not PRODUCTS */ customTags?: Tag[]; /** * The extension which identifies the filetype. Includes the dot if relevant (i.e: `.js`) */ extension: string; /** * The filename from which the content was derived from. Useful for reporting purposes */ filename?: string; /** * Whether to also parse known inline file associations (for example html in php files) */ withInlineFiles?: boolean; } export interface ParserFactoryConfig { /** * A list of custom tags to support */ customTags?: Tag[]; } /** * A parsed TODO (or other tag) comment * * ```js * [{ * file: 'parsedFile.js', * line: 8, * ref: 'reference' * tag: 'TODO', * text: 'comment text', * }] * ``` */ export interface TodoComment { /** * The filetype the comment originated from */ file: string; /** * The comment tag (usually TODO) */ tag: Tag; /** * Line number the comment was found in file */ line: number; /** * A possible reference used (either as prefix or postfix) */ ref: string; /** * The TODO (or other tag) text */ text: string; } /** * receive the contents and file and return a list of parsed items */ export type Parser = (contents: string, file: string) => TodoComment[]; /** * A factory to return a parser */ export type ParserFactory = (config: ParserFactoryConfig) => Parser; export interface CustomParsers { [parserName: string]: ParserFactory; } /** * Report the provided items */ export type ReportItems = (comments: TodoComment[], config: any) => any; export type ReporterName = string; export type TransformComment = (file: string, line: number, ref: string, tag: Tag, text: string) => string | string[]; export type TransformHeader = (tag: Tag) => string | string[]; export interface ReporterConfig { newLine?: string; padding?: number; transformComment?: TransformComment; transformHeader?: TransformHeader; } export interface TransformedComments { [tag: string]: string[]; } export declare enum BuiltinReporters { /** * @hidden */ custom = "custom", /** * Return a Gitlab code quality formatted json string of the todos */ gitlab = "gitlab", /** * Return a json string of the todos */ json = "json", /** * Return a Markdown string of the todos */ markdown = "markdown", /** * A raw reporter is the identity function for the todos */ raw = "raw", /** * Return a table representation of the todos. Useful for CLI */ table = "table", /** * Returns a markdown version of the todos customized for Visual Studio Code. The file names are * transformed as URLs and the line numbers as anchors which makes them clickable when the markdown * content produced with this reporter is opened on Visual Studio Code. */ vscode = "vscode", /** * Return an XML string of the todos */ xml = "xml" }