492 lines
No EOL
18 KiB
TypeScript
492 lines
No EOL
18 KiB
TypeScript
/**
|
|
* @param {JsdocVisitor} iterator
|
|
* @param {RuleConfig} ruleConfig
|
|
* @returns {import('eslint').Rule.RuleModule}
|
|
*/
|
|
export default function iterateJsdoc(iterator: JsdocVisitor, ruleConfig: RuleConfig): import("eslint").Rule.RuleModule;
|
|
export { parseComment } from "@es-joy/jsdoccomment";
|
|
export type Integer = number;
|
|
export type JsdocBlockWithInline = import("@es-joy/jsdoccomment").JsdocBlockWithInline;
|
|
export type ContextObject = {
|
|
disallowName?: string;
|
|
allowName?: string;
|
|
context?: string;
|
|
comment?: string;
|
|
tags?: string[];
|
|
replacement?: string;
|
|
minimum?: Integer;
|
|
message?: string;
|
|
forceRequireReturn?: boolean;
|
|
};
|
|
export type Context = string | ContextObject;
|
|
export type CheckJsdoc = (info: {
|
|
lastIndex?: Integer;
|
|
isFunctionContext?: boolean;
|
|
selector?: string;
|
|
comment?: string;
|
|
}, handler: null | ((jsdoc: import("@es-joy/jsdoccomment").JsdocBlockWithInline) => boolean | undefined), node: import("eslint").Rule.Node) => void;
|
|
export type ForEachPreferredTag = (tagName: string, arrayHandler: (matchingJsdocTag: import("@es-joy/jsdoccomment").JsdocTagWithInline, targetTagName: string) => void, skipReportingBlockedTag?: boolean | undefined) => void;
|
|
export type ReportSettings = (message: string) => void;
|
|
export type ParseClosureTemplateTag = (tag: import("comment-parser").Spec) => string[];
|
|
export type GetPreferredTagNameObject = (cfg: {
|
|
tagName: string;
|
|
}) => string | false | {
|
|
message: string;
|
|
replacement?: string | undefined;
|
|
} | {
|
|
blocked: true;
|
|
tagName: string;
|
|
};
|
|
export type BasicUtils = {
|
|
forEachPreferredTag: ForEachPreferredTag;
|
|
reportSettings: ReportSettings;
|
|
parseClosureTemplateTag: ParseClosureTemplateTag;
|
|
getPreferredTagNameObject: GetPreferredTagNameObject;
|
|
pathDoesNotBeginWith: import("./jsdocUtils.js").PathDoesNotBeginWith;
|
|
isNameOrNamepathDefiningTag: IsNamepathX;
|
|
isNamepathReferencingTag: IsNamepathX;
|
|
isNamepathOrUrlReferencingTag: IsNamepathX;
|
|
tagMightHaveNameOrNamepath: IsNamepathX;
|
|
tagMightHaveName: IsNamepathX;
|
|
};
|
|
export type IsIteratingFunction = () => boolean;
|
|
export type IsVirtualFunction = () => boolean;
|
|
export type Stringify = (tagBlock: import("comment-parser").Block, specRewire?: boolean | undefined) => string;
|
|
export type ReportJSDoc = (msg: string, tag?: import("comment-parser").Spec | {
|
|
line: Integer;
|
|
column?: Integer;
|
|
} | null | undefined, handler?: ((fixer: import("eslint").Rule.RuleFixer) => import("eslint").Rule.Fix | void) | null | undefined, specRewire?: boolean | undefined, data?: undefined | {
|
|
[key: string]: string;
|
|
}) => any;
|
|
export type GetRegexFromString = (str: string, requiredFlags?: string | undefined) => RegExp;
|
|
export type GetTagDescription = (tg: import("comment-parser").Spec, returnArray?: boolean | undefined) => string[] | string;
|
|
export type SetTagDescription = (tg: import("comment-parser").Spec, matcher: RegExp, setter: (description: string) => string) => Integer;
|
|
export type GetDescription = () => {
|
|
description: string;
|
|
descriptions: string[];
|
|
lastDescriptionLine: Integer;
|
|
};
|
|
export type SetBlockDescription = (setter: (info: {
|
|
delimiter: string;
|
|
postDelimiter: string;
|
|
start: string;
|
|
}, seedTokens: (tokens?: Partial<import("comment-parser").Tokens>) => import("comment-parser").Tokens, descLines: string[], postDelims: string[]) => import("comment-parser").Line[]) => void;
|
|
export type SetDescriptionLines = (matcher: RegExp, setter: (description: string) => string) => Integer;
|
|
export type ChangeTag = (tag: import("comment-parser").Spec, ...tokens: Partial<import("comment-parser").Tokens>[]) => void;
|
|
export type SetTag = (tag: import("comment-parser").Spec & {
|
|
line: Integer;
|
|
}, tokens?: Partial<import("comment-parser").Tokens> | undefined) => void;
|
|
export type RemoveTag = (tagIndex: Integer, cfg?: {
|
|
removeEmptyBlock?: boolean;
|
|
tagSourceOffset?: Integer;
|
|
} | undefined) => void;
|
|
export type AddTag = (targetTagName: string, number?: number | undefined, tokens?: Partial<import("comment-parser").Tokens> | undefined) => void;
|
|
export type GetFirstLine = () => Integer | undefined;
|
|
export type SeedTokens = (tokens?: Partial<import("comment-parser").Tokens> | undefined) => import("comment-parser").Tokens;
|
|
/**
|
|
* Sets tokens to empty string.
|
|
*/
|
|
export type EmptyTokens = (tokens: import("comment-parser").Tokens) => void;
|
|
export type AddLine = (sourceIndex: Integer, tokens: Partial<import("comment-parser").Tokens>) => void;
|
|
export type AddLines = (tagIndex: Integer, tagSourceOffset: Integer, numLines: Integer) => void;
|
|
export type MakeMultiline = () => void;
|
|
export type GetFunctionParameterNames = (useDefaultObjectProperties?: boolean | undefined, ignoreInterfacedParameters?: boolean | undefined) => import("./jsdocUtils.js").ParamNameInfo[];
|
|
export type HasParams = () => Integer;
|
|
export type IsGenerator = () => boolean;
|
|
export type IsConstructor = () => boolean;
|
|
export type GetJsdocTagsDeep = (tagName: string) => false | {
|
|
idx: Integer;
|
|
name: string;
|
|
type: string;
|
|
}[];
|
|
export type GetPreferredTagName = (cfg: {
|
|
tagName: string;
|
|
skipReportingBlockedTag?: boolean;
|
|
allowObjectReturn?: boolean;
|
|
defaultMessage?: string;
|
|
}) => string | undefined | false | {
|
|
message: string;
|
|
replacement?: string | undefined;
|
|
} | {
|
|
blocked: true;
|
|
tagName: string;
|
|
};
|
|
export type IsValidTag = (name: string, definedTags: string[]) => boolean;
|
|
export type HasATag = (names: string[]) => boolean;
|
|
export type HasTag = (name: string) => boolean;
|
|
export type ComparePaths = (name: string) => (otherPathName: string) => boolean;
|
|
export type DropPathSegmentQuotes = (name: string) => string;
|
|
export type AvoidDocs = () => boolean;
|
|
export type TagMightHaveNamePositionTypePosition = (tagName: string, otherModeMaps?: import("./getDefaultTagStructureForMode.js").TagStructure[] | undefined) => boolean | {
|
|
otherMode: true;
|
|
};
|
|
export type TagMustHave = (tagName: string, otherModeMaps: import("./getDefaultTagStructureForMode.js").TagStructure[]) => boolean | {
|
|
otherMode: false;
|
|
};
|
|
export type TagMissingRequiredTypeOrNamepath = (tag: import("comment-parser").Spec, otherModeMaps: import("./getDefaultTagStructureForMode.js").TagStructure[]) => boolean | {
|
|
otherMode: false;
|
|
};
|
|
export type IsNamepathX = (tagName: string) => boolean;
|
|
export type GetTagStructureForMode = (mde: import("./jsdocUtils.js").ParserMode) => import("./getDefaultTagStructureForMode.js").TagStructure;
|
|
export type MayBeUndefinedTypeTag = (tag: import("comment-parser").Spec) => boolean;
|
|
export type HasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn: boolean, allBranches?: boolean | undefined) => boolean;
|
|
export type HasYieldValue = () => boolean;
|
|
export type HasYieldReturnValue = () => boolean;
|
|
export type HasThrowValue = () => boolean;
|
|
export type IsAsync = () => boolean | undefined;
|
|
export type GetTags = (tagName: string) => import("comment-parser").Spec[];
|
|
export type GetPresentTags = (tagList: string[]) => import("@es-joy/jsdoccomment").JsdocTagWithInline[];
|
|
export type FilterTags = (filter: (tag: import("@es-joy/jsdoccomment").JsdocTagWithInline) => boolean) => import("@es-joy/jsdoccomment").JsdocTagWithInline[];
|
|
export type FilterAllTags = (filter: (tag: (import("comment-parser").Spec | import("@es-joy/jsdoccomment").JsdocInlineTagNoType)) => boolean) => (import("comment-parser").Spec | import("@es-joy/jsdoccomment").JsdocInlineTagNoType)[];
|
|
export type getInlineTags = () => (import("comment-parser").Spec | (import("@es-joy/jsdoccomment").JsdocInlineTagNoType & {
|
|
line?: number | undefined;
|
|
column?: number | undefined;
|
|
}))[];
|
|
export type GetTagsByType = (tags: import("comment-parser").Spec[]) => {
|
|
tagsWithNames: import("comment-parser").Spec[];
|
|
tagsWithoutNames: import("comment-parser").Spec[];
|
|
};
|
|
export type HasOptionTag = (tagName: string) => boolean;
|
|
export type GetClassNode = () => Node | null;
|
|
export type GetClassJsdoc = () => null | JsdocBlockWithInline;
|
|
export type ClassHasTag = (tagName: string) => boolean;
|
|
export type FindContext = (contexts: Context[], comment: string | undefined) => {
|
|
foundContext: Context | undefined;
|
|
contextStr: string;
|
|
};
|
|
export type Utils = BasicUtils & {
|
|
isIteratingFunction: IsIteratingFunction;
|
|
isIteratingFunctionOrVariable: IsIteratingFunction;
|
|
isVirtualFunction: IsVirtualFunction;
|
|
stringify: Stringify;
|
|
reportJSDoc: ReportJSDoc;
|
|
getRegexFromString: GetRegexFromString;
|
|
getTagDescription: GetTagDescription;
|
|
setTagDescription: SetTagDescription;
|
|
getDescription: GetDescription;
|
|
setBlockDescription: SetBlockDescription;
|
|
setDescriptionLines: SetDescriptionLines;
|
|
changeTag: ChangeTag;
|
|
setTag: SetTag;
|
|
removeTag: RemoveTag;
|
|
addTag: AddTag;
|
|
getFirstLine: GetFirstLine;
|
|
seedTokens: SeedTokens;
|
|
emptyTokens: EmptyTokens;
|
|
addLine: AddLine;
|
|
addLines: AddLines;
|
|
makeMultiline: MakeMultiline;
|
|
flattenRoots: import("./jsdocUtils.js").FlattenRoots;
|
|
getFunctionParameterNames: GetFunctionParameterNames;
|
|
hasParams: HasParams;
|
|
isGenerator: IsGenerator;
|
|
isConstructor: IsConstructor;
|
|
getJsdocTagsDeep: GetJsdocTagsDeep;
|
|
getPreferredTagName: GetPreferredTagName;
|
|
isValidTag: IsValidTag;
|
|
hasATag: HasATag;
|
|
hasTag: HasTag;
|
|
comparePaths: ComparePaths;
|
|
dropPathSegmentQuotes: DropPathSegmentQuotes;
|
|
avoidDocs: AvoidDocs;
|
|
tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition;
|
|
tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition;
|
|
tagMustHaveNamePosition: TagMustHave;
|
|
tagMustHaveTypePosition: TagMustHave;
|
|
tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath;
|
|
isNameOrNamepathDefiningTag: IsNamepathX;
|
|
isNamepathReferencingTag: IsNamepathX;
|
|
isNamepathOrUrlReferencingTag: IsNamepathX;
|
|
tagMightHaveNameOrNamepath: IsNamepathX;
|
|
tagMightHaveName: IsNamepathX;
|
|
tagMightHaveNamepath: IsNamepathX;
|
|
getTagStructureForMode: GetTagStructureForMode;
|
|
mayBeUndefinedTypeTag: MayBeUndefinedTypeTag;
|
|
hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue;
|
|
hasYieldValue: HasYieldValue;
|
|
hasYieldReturnValue: HasYieldReturnValue;
|
|
hasThrowValue: HasThrowValue;
|
|
isAsync: IsAsync;
|
|
getTags: GetTags;
|
|
getPresentTags: GetPresentTags;
|
|
filterTags: FilterTags;
|
|
filterAllTags: FilterAllTags;
|
|
getInlineTags: getInlineTags;
|
|
getTagsByType: GetTagsByType;
|
|
hasOptionTag: HasOptionTag;
|
|
getClassNode: GetClassNode;
|
|
getClassJsdoc: GetClassJsdoc;
|
|
classHasTag: ClassHasTag;
|
|
findContext: FindContext;
|
|
};
|
|
/**
|
|
* Should use ESLint rule's typing.
|
|
*/
|
|
export type EslintRuleMeta = import("eslint").Rule.RuleMetaData;
|
|
/**
|
|
* A plain object for tracking state as needed by rules across iterations.
|
|
*/
|
|
export type StateObject = {
|
|
globalTags: boolean;
|
|
hasDuplicates: {
|
|
[key: string]: boolean;
|
|
};
|
|
selectorMap: {
|
|
[selector: string]: {
|
|
[comment: string]: Integer;
|
|
};
|
|
};
|
|
hasTag: {
|
|
[key: string]: boolean;
|
|
};
|
|
hasNonComment: number;
|
|
hasNonCommentBeforeTag: {
|
|
[key: string]: boolean | number;
|
|
};
|
|
foundTypedefValues: string[];
|
|
};
|
|
/**
|
|
* The Node AST as supplied by the parser.
|
|
*/
|
|
export type Node = import("eslint").Rule.Node;
|
|
export type Report = (message: string, fix?: import("@eslint/core").RuleFixer | null | undefined, jsdocLoc?: {
|
|
line?: Integer;
|
|
column?: Integer;
|
|
} | (import("comment-parser").Spec & {
|
|
line?: Integer;
|
|
}) | null | undefined, data?: undefined | {
|
|
[key: string]: string;
|
|
}) => void;
|
|
export type PreferredTypes = {
|
|
[key: string]: false | string | {
|
|
message: string;
|
|
replacement?: false | string;
|
|
skipRootChecking?: boolean;
|
|
unifyParentAndChildTypeChecks?: boolean;
|
|
};
|
|
};
|
|
export type StructuredTags = {
|
|
[key: string]: {
|
|
name?: "text" | "name-defining" | "namepath-defining" | "namepath-referencing" | false;
|
|
type?: boolean | string[];
|
|
required?: ("name" | "type" | "typeOrNameRequired")[];
|
|
};
|
|
};
|
|
/**
|
|
* Settings from ESLint types.
|
|
*/
|
|
export type Settings = {
|
|
maxLines: Integer;
|
|
minLines: Integer;
|
|
tagNamePreference: import("./jsdocUtils.js").TagNamePreference;
|
|
mode: import("./jsdocUtils.js").ParserMode;
|
|
preferredTypes: PreferredTypes;
|
|
structuredTags: StructuredTags;
|
|
contexts?: Context[];
|
|
augmentsExtendsReplacesDocs?: boolean;
|
|
ignoreReplacesDocs?: boolean;
|
|
implementsReplacesDocs?: boolean;
|
|
overrideReplacesDocs?: boolean;
|
|
ignoreInternal?: boolean;
|
|
ignorePrivate?: boolean;
|
|
exemptDestructuredRootsFromChecks?: boolean;
|
|
};
|
|
export type JSDocSettings = {
|
|
settings?: {
|
|
jsdoc?: {
|
|
ignorePrivate: boolean;
|
|
ignoreInternal: boolean;
|
|
maxLines: Integer;
|
|
minLines: Integer;
|
|
tagNamePreference: import("./jsdocUtils.js").TagNamePreference;
|
|
preferredTypes: PreferredTypes;
|
|
structuredTags: StructuredTags;
|
|
overrideReplacesDocs: boolean;
|
|
ignoreReplacesDocs: boolean;
|
|
implementsReplacesDocs: boolean;
|
|
augmentsExtendsReplacesDocs: boolean;
|
|
exemptDestructuredRootsFromChecks: boolean;
|
|
mode: import("./jsdocUtils.js").ParserMode;
|
|
contexts: Context[];
|
|
};
|
|
};
|
|
};
|
|
/**
|
|
* Create the report function
|
|
*/
|
|
export type MakeReport = (context: import("eslint").Rule.RuleContext, commentNode: import("estree").Node) => Report;
|
|
export type JsdocVisitorBasic = (arg: {
|
|
context: import("eslint").Rule.RuleContext;
|
|
sourceCode: import("eslint").SourceCode;
|
|
indent?: string;
|
|
info?: {
|
|
comment?: string | undefined;
|
|
lastIndex?: Integer | undefined;
|
|
};
|
|
state?: StateObject;
|
|
globalState?: Map<string, Map<string, string>>;
|
|
jsdoc?: JsdocBlockWithInline;
|
|
jsdocNode?: import("eslint").Rule.Node & {
|
|
range: [number, number];
|
|
};
|
|
node?: Node;
|
|
allComments?: import("estree").Node[];
|
|
report?: Report;
|
|
makeReport?: MakeReport;
|
|
settings: Settings;
|
|
utils: BasicUtils;
|
|
}) => void;
|
|
export type JsdocVisitor = (arg: {
|
|
context: import("eslint").Rule.RuleContext;
|
|
sourceCode: import("eslint").SourceCode;
|
|
indent: string;
|
|
info: {
|
|
comment?: string | undefined;
|
|
lastIndex?: Integer | undefined;
|
|
};
|
|
state: StateObject;
|
|
globalState: Map<string, Map<string, string>>;
|
|
jsdoc: JsdocBlockWithInline;
|
|
jsdocNode: import("eslint").Rule.Node & {
|
|
range: [number, number];
|
|
};
|
|
node: Node | null;
|
|
allComments?: import("estree").Node[];
|
|
report: Report;
|
|
makeReport?: MakeReport;
|
|
settings: Settings;
|
|
utils: Utils;
|
|
}) => void;
|
|
export type NonCommentArgs = {
|
|
node: Node;
|
|
state: StateObject;
|
|
};
|
|
export type RuleConfig = {
|
|
/**
|
|
* ESLint rule meta
|
|
*/
|
|
meta: EslintRuleMeta;
|
|
/**
|
|
* Any default contexts
|
|
*/
|
|
contextDefaults?: jsdocUtils.DefaultContexts | undefined;
|
|
/**
|
|
* Whether to force a `contexts` check
|
|
*/
|
|
contextSelected?: true | undefined;
|
|
/**
|
|
* Modify the rule's context object
|
|
*/
|
|
modifyContext?: ((context: import("eslint").Rule.RuleContext) => import("eslint").Rule.RuleContext) | undefined;
|
|
/**
|
|
* Whether to iterate all JSDoc blocks by default
|
|
* regardless of context
|
|
*/
|
|
iterateAllJsdocs?: true | undefined;
|
|
/**
|
|
* Whether to check `@private` blocks (normally exempted)
|
|
*/
|
|
checkPrivate?: true | undefined;
|
|
/**
|
|
* Whether to check `@internal` blocks (normally exempted)
|
|
*/
|
|
checkInternal?: true | undefined;
|
|
/**
|
|
* Whether to iterates over all JSDoc blocks regardless of attachment
|
|
*/
|
|
checkFile?: true | undefined;
|
|
/**
|
|
* Whether to avoid relying on settings for global contexts
|
|
*/
|
|
nonGlobalSettings?: true | undefined;
|
|
/**
|
|
* Whether to disable the tracking of visited comment nodes (as
|
|
* non-tracked may conduct further actions)
|
|
*/
|
|
noTracking?: true | undefined;
|
|
/**
|
|
* Whether the rule expects contexts to be based on a match option
|
|
*/
|
|
matchContext?: true | undefined;
|
|
/**
|
|
* Handler to be executed upon exiting iteration of program AST
|
|
*/
|
|
exit?: ((args: {
|
|
context: import("eslint").Rule.RuleContext;
|
|
state: StateObject;
|
|
settings: Settings;
|
|
utils: BasicUtils;
|
|
}) => void) | undefined;
|
|
/**
|
|
* Handler to be executed if rule wishes
|
|
* to be supplied nodes without comments
|
|
*/
|
|
nonComment?: ((nca: NonCommentArgs) => void) | undefined;
|
|
};
|
|
/**
|
|
* @typedef {{
|
|
* [key: string]: false|string|{
|
|
* message: string,
|
|
* replacement?: false|string
|
|
* skipRootChecking?: boolean
|
|
* unifyParentAndChildTypeChecks?: boolean
|
|
* }
|
|
* }} PreferredTypes
|
|
*/
|
|
/**
|
|
* @typedef {{
|
|
* [key: string]: {
|
|
* name?: "text"|"name-defining"|"namepath-defining"|"namepath-referencing"|false,
|
|
* type?: boolean|string[],
|
|
* required?: ("name"|"type"|"typeOrNameRequired")[]
|
|
* }
|
|
* }} StructuredTags
|
|
*/
|
|
/**
|
|
* Settings from ESLint types.
|
|
* @typedef {{
|
|
* maxLines: Integer,
|
|
* minLines: Integer,
|
|
* tagNamePreference: import('./jsdocUtils.js').TagNamePreference,
|
|
* mode: import('./jsdocUtils.js').ParserMode,
|
|
* preferredTypes: PreferredTypes,
|
|
* structuredTags: StructuredTags,
|
|
* contexts?: Context[],
|
|
* augmentsExtendsReplacesDocs?: boolean,
|
|
* ignoreReplacesDocs?: boolean,
|
|
* implementsReplacesDocs?: boolean,
|
|
* overrideReplacesDocs?: boolean,
|
|
* ignoreInternal?: boolean,
|
|
* ignorePrivate?: boolean,
|
|
* exemptDestructuredRootsFromChecks?: boolean,
|
|
* }} Settings
|
|
*/
|
|
/**
|
|
* @typedef {{
|
|
* settings?: {
|
|
* jsdoc?: {
|
|
* ignorePrivate: boolean,
|
|
* ignoreInternal: boolean,
|
|
* maxLines: Integer,
|
|
* minLines: Integer,
|
|
* tagNamePreference: import('./jsdocUtils.js').TagNamePreference,
|
|
* preferredTypes: PreferredTypes,
|
|
* structuredTags: StructuredTags,
|
|
* overrideReplacesDocs: boolean,
|
|
* ignoreReplacesDocs: boolean,
|
|
* implementsReplacesDocs: boolean,
|
|
* augmentsExtendsReplacesDocs: boolean,
|
|
* exemptDestructuredRootsFromChecks: boolean,
|
|
* mode: import('./jsdocUtils.js').ParserMode,
|
|
* contexts: Context[],
|
|
* }
|
|
* }
|
|
* }} JSDocSettings
|
|
*/
|
|
/**
|
|
* @param {import('eslint').Rule.RuleContext & JSDocSettings} context
|
|
* @returns {Settings|false}
|
|
*/
|
|
export function getSettings(context: import("eslint").Rule.RuleContext & JSDocSettings): Settings | false;
|
|
import * as jsdocUtils from './jsdocUtils.js';
|
|
//# sourceMappingURL=iterateJsdoc.d.ts.map
|