blob: c98c83687c03df6e69c6393d2cf67d407905e7ad [file] [log] [blame]
export interface Rules {
/** Checks that `@access` tags have a valid value. */
"jsdoc/check-access": [];
/** Reports invalid alignment of JSDoc block asterisks. */
"jsdoc/check-alignment":
| []
| [
{
/**
* Set to 0 if you wish to avoid the normal requirement for an inner indentation of
* one space. Defaults to 1 (one space of normal inner indentation).
*/
innerIndent?: number;
}
];
/** @deprecated - Use `getJsdocProcessorPlugin` processor; ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules. */
"jsdoc/check-examples":
| []
| [
{
allowInlineConfig?: boolean;
baseConfig?: {
[k: string]: unknown;
};
captionRequired?: boolean;
checkDefaults?: boolean;
checkEslintrc?: boolean;
checkParams?: boolean;
checkProperties?: boolean;
configFile?: string;
exampleCodeRegex?: string;
matchingFileName?: string;
matchingFileNameDefaults?: string;
matchingFileNameParams?: string;
matchingFileNameProperties?: string;
noDefaultExampleRules?: boolean;
paddedIndent?: number;
rejectExampleCodeRegex?: string;
reportUnusedDisableDirectives?: boolean;
}
];
/** Reports invalid padding inside JSDoc blocks. */
"jsdoc/check-indentation":
| []
| [
{
/**
* Array of tags (e.g., `['example', 'description']`) whose content will be
* "hidden" from the `check-indentation` rule. Defaults to `['example']`.
*
* By default, the whole JSDoc block will be checked for invalid padding.
* That would include `@example` blocks too, which can get in the way
* of adding full, readable examples of code without ending up with multiple
* linting issues.
*
* When disabled (by passing `excludeTags: []` option), the following code *will*
* report a padding issue:
*
* ```js
* /**
* * @example
* * anArray.filter((a) => {
* * return a.b;
* * });
* * /
* ```
*/
excludeTags?: string[];
}
];
/** Reports invalid alignment of JSDoc block lines. */
"jsdoc/check-line-alignment":
| []
| ["always" | "never" | "any"]
| [
"always" | "never" | "any",
{
/**
* An object with any of the following spacing keys set to an integer.
* If a spacing is not defined, it defaults to one.
*
*/
customSpacings?: {
/**
* Affects spacing after the asterisk (e.g., `* @param`)
*/
postDelimiter?: number;
/**
* Affects spacing after any hyphens in the description (e.g., `* @param {someType} name - A description`)
*/
postHyphen?: number;
/**
* Affects spacing after the name (e.g., `* @param {someType} name `)
*/
postName?: number;
/**
* Affects spacing after the tag (e.g., `* @param `)
*/
postTag?: number;
/**
* Affects spacing after the type (e.g., `* @param {someType} `)
*/
postType?: number;
};
/**
* Disables `wrapIndent`; existing wrap indentation is preserved without changes.
*/
disableWrapIndent?: boolean;
/**
* A boolean to determine whether to preserve the post-delimiter spacing of the
* main description. If `false` or unset, will be set to a single space.
*/
preserveMainDescriptionPostDelimiter?: boolean;
/**
* Use this to change the tags which are sought for alignment changes. Defaults to an array of
* `['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return', 'template']`.
*/
tags?: string[];
/**
* The indent that will be applied for tag text after the first line.
* Default to the empty string (no indent).
*/
wrapIndent?: string;
}
];
/** Checks for dupe `@param` names, that nested param names have roots, and that parameter names in function declarations match JSDoc param names. */
"jsdoc/check-param-names":
| []
| [
{
/**
* If set to `true`, this option will allow extra `@param` definitions (e.g.,
* representing future expected or virtual params) to be present without needing
* their presence within the function signature. Other inconsistencies between
* `@param`'s and present function parameters will still be reported.
*/
allowExtraTrailingParamDocs?: boolean;
/**
* Whether to check destructured properties. Defaults to `true`.
*/
checkDestructured?: boolean;
/**
* If set to `true`, will require that rest properties are documented and
* that any extraneous properties (which may have been within the rest property)
* are documented. Defaults to `false`.
*/
checkRestProperty?: boolean;
/**
* Defines a regular expression pattern to indicate which types should be
* checked for destructured content (and that those not matched should not
* be checked).
*
* When one specifies a type, unless it is of a generic type, like `object`
* or `array`, it may be considered unnecessary to have that object's
* destructured components required, especially where generated docs will
* link back to the specified type. For example:
*
* ```js
* /**
* * @param {SVGRect} bbox - a SVGRect
* * /
* export const bboxToObj = function ({x, y, width, height}) {
* return {x, y, width, height};
* };
* ```
*
* By default `checkTypesPattern` is set to
* `/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v`,
* meaning that destructuring will be required only if the type of the `@param`
* (the text between curly brackets) is a match for "Object" or "Array" (with or
* without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or
* if no type is present). So in the above example, the lack of a match will
* mean that no complaint will be given about the undocumented destructured
* parameters.
*
* Note that the `/` delimiters are optional, but necessary to add flags.
*
* Defaults to using (only) the `v` flag, so to add your own flags, encapsulate
* your expression as a string, but like a literal, e.g., `/^object$/vi`.
*
* You could set this regular expression to a more expansive list, or you
* could restrict it such that even types matching those strings would not
* need destructuring.
*/
checkTypesPattern?: string;
/**
* Whether to check for extra destructured properties. Defaults to `false`. Change
* to `true` if you want to be able to document properties which are not actually
* destructured. Keep as `false` if you expect properties to be documented in
* their own types. Note that extra properties will always be reported if another
* item at the same level is destructured as destructuring will prevent other
* access and this option is only intended to permit documenting extra properties
* that are available and actually used in the function.
*/
disableExtraPropertyReporting?: boolean;
/**
* Whether to avoid checks for missing `@param` definitions. Defaults to `false`. Change to `true` if you want to be able to omit properties.
*/
disableMissingParamChecks?: boolean;
/**
* Set to `true` to auto-remove `@param` duplicates (based on identical
* names).
*
* Note that this option will remove duplicates of the same name even if
* the definitions do not match in other ways (e.g., the second param will
* be removed even if it has a different type or description).
*/
enableFixer?: boolean;
/**
* Set to `true` if you wish to avoid reporting of child property documentation
* where instead of destructuring, a whole plain object is supplied as default
* value but you wish its keys to be considered as signalling that the properties
* are present and can therefore be documented. Defaults to `false`.
*/
useDefaultObjectProperties?: boolean;
}
];
/** Ensures that property names in JSDoc are not duplicated on the same block and that nested properties have defined roots. */
"jsdoc/check-property-names":
| []
| [
{
/**
* Set to `true` to auto-remove `@property` duplicates (based on
* identical names).
*
* Note that this option will remove duplicates of the same name even if
* the definitions do not match in other ways (e.g., the second property will
* be removed even if it has a different type or description).
*/
enableFixer?: boolean;
}
];
/** Reports against syntax not valid for the mode (e.g., Google Closure Compiler in non-Closure mode). */
"jsdoc/check-syntax": [];
/** Reports invalid block tag names. */
"jsdoc/check-tag-names":
| []
| [
{
/**
* Use an array of `definedTags` strings to configure additional, allowed tags.
* The format is as follows:
*
* ```json
* {
* "definedTags": ["note", "record"]
* }
* ```
*/
definedTags?: string[];
/**
* Set to `false` to disable auto-removal of types that are redundant with the [`typed` option](#typed).
*/
enableFixer?: boolean;
/**
* List of tags to allow inline.
*
* Defaults to array of `'link', 'linkcode', 'linkplain', 'tutorial'`
*/
inlineTags?: string[];
/**
* If this is set to `true`, all of the following tags used to control JSX output are allowed:
*
* ```
* jsx
* jsxFrag
* jsxImportSource
* jsxRuntime
* ```
*
* For more information, see the [babel documentation](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx).
*/
jsxTags?: boolean;
/**
* If this is set to `true`, additionally checks for tag names that are redundant when using a type checker such as TypeScript.
*
* These tags are always unnecessary when using TypeScript or similar:
*
* ```
* augments
* callback
* class
* enum
* implements
* private
* property
* protected
* public
* readonly
* this
* type
* typedef
* ```
*
* These tags are unnecessary except when inside a TypeScript `declare` context:
*
* ```
* abstract
* access
* class
* constant
* constructs
* default
* enum
* export
* exports
* function
* global
* inherits
* instance
* interface
* member
* memberof
* memberOf
* method
* mixes
* mixin
* module
* name
* namespace
* override
* property
* requires
* static
* this
* ```
*/
typed?: boolean;
}
];
/** Checks that any `@template` names are actually used in the connected `@typedef` or type alias. */
"jsdoc/check-template-names": [];
/** Reports types deemed invalid (customizable and with defaults, for preventing and/or recommending replacements). */
"jsdoc/check-types":
| []
| [
{
/**
* Avoids reporting when a bad type is found on a specified tag.
*/
exemptTagContexts?: {
/**
* Set a key `tag` to the tag to exempt
*/
tag?: string;
/**
* Set to `true` to indicate that any types on that tag will be allowed,
* or to an array of strings which will only allow specific bad types.
* If an array of strings is given, these must match the type exactly,
* e.g., if you only allow `"object"`, it will not allow
* `"object<string, string>"`. Note that this is different from the
* behavior of `settings.jsdoc.preferredTypes`. This option is useful
* for normally restricting generic types like `object` with
* `preferredTypes`, but allowing `typedef` to indicate that its base
* type is `object`.
*/
types?: boolean | string[];
}[];
/**
* Insists that only the supplied option type
* map is to be used, and that the default preferences (such as "string"
* over "String") will not be enforced. The option's default is `false`.
*/
noDefaults?: boolean;
/**
* @deprecated Use the `preferredTypes[preferredType]` setting of the same name instead.
* If this option is `true`, will currently override `unifyParentAndChildTypeChecks` on the `preferredTypes` setting.
*/
unifyParentAndChildTypeChecks?: boolean;
}
];
/** This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`. */
"jsdoc/check-values":
| []
| [
{
/**
* An array of allowable author values. If absent, only non-whitespace will
* be checked for.
*/
allowedAuthors?: string[];
/**
* An array of allowable license values or `true` to allow any license text.
* If present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/).
*/
allowedLicenses?: string[] | boolean;
/**
* A string to be converted into a `RegExp` (with `v` flag) and whose first
* parenthetical grouping, if present, will match the portion of the license
* description to check (if no grouping is present, then the whole portion
* matched will be used). Defaults to `/([^\n\r]*)/gv`, i.e., the SPDX expression
* is expected before any line breaks.
*
* Note that the `/` delimiters are optional, but necessary to add flags.
*
* Defaults to using the `v` flag, so to add your own flags, encapsulate
* your expression as a string, but like a literal, e.g., `/^mit$/vi`.
*/
licensePattern?: string;
/**
* Whether to enable validation that `@variation` must be a number. Defaults to
* `false`.
*/
numericOnlyVariation?: boolean;
}
];
/** Converts non-JSDoc comments preceding or following nodes into JSDoc ones */
"jsdoc/convert-to-jsdoc-comments":
| []
| [
{
/**
* An array of prefixes to allow at the beginning of a comment.
*
* Defaults to `['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']`.
*
* Supplying your own value overrides the defaults.
*/
allowedPrefixes?: string[];
/**
* The contexts array which will be checked for preceding content.
*
* Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean.
*
* Defaults to `ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`, `TSDeclareFunction`.
*
*/
contexts?: (
| string
| {
context?: string;
inlineCommentBlock?: boolean;
}
)[];
/**
* The contexts array which will be checked for content on the same line after.
*
* Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean.
*
* Defaults to an empty array.
*/
contextsAfter?: (
| string
| {
context?: string;
inlineCommentBlock?: boolean;
}
)[];
/**
* The contexts array which will be checked for content before and on the same
* line after.
*
* Can either be strings or an object with a `context` string and an optional, default `false` `inlineCommentBlock` boolean.
*
* Defaults to `VariableDeclarator`, `TSPropertySignature`, `PropertyDefinition`.
*/
contextsBeforeAndAfter?: (
| string
| {
context?: string;
inlineCommentBlock?: boolean;
}
)[];
/**
* Set to `false` to disable fixing.
*/
enableFixer?: boolean;
/**
* What policy to enforce on the conversion of non-JSDoc comments without
* line breaks. (Non-JSDoc (mulitline) comments with line breaks will always
* be converted to `multi` style JSDoc comments.)
*
* - `multi` - Convert to multi-line style
* ```js
* /**
* * Some text
* * /
* ```
* - `single` - Convert to single-line style
* ```js
* /** Some text * /
* ```
*
* Defaults to `multi`.
*
*/
enforceJsdocLineStyle?: "multi" | "single";
/**
* What style of comments to which to apply JSDoc conversion.
*
* - `block` - Applies to block-style comments (`/* ... * /`)
* - `line` - Applies to line-style comments (`// ...`)
* - `both` - Applies to both block and line-style comments
*
* Defaults to `both`.
*/
lineOrBlockStyle?: "block" | "line" | "both";
}
];
/** Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content */
"jsdoc/empty-tags":
| []
| [
{
/**
* If you want additional tags to be checked for their descriptions, you may
* add them within this option.
*
* ```js
* {
* 'jsdoc/empty-tags': ['error', {tags: ['event']}]
* }
* ```
*
*/
tags?: string[];
}
];
/** Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors). */
"jsdoc/implements-on-classes":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
}
];
/** Reports if JSDoc `import()` statements point to a package which is not listed in `dependencies` or `devDependencies` */
"jsdoc/imports-as-dependencies": [];
/** This rule reports doc comments that only restate their attached name. */
"jsdoc/informative-docs":
| []
| [
{
/**
* The `aliases` option allows indicating words as synonyms (aliases) of each other.
*
* For example, with `{ aliases: { emoji: ["smiley", "winkey"] } }`, the following comment would be considered uninformative:
*
* ```js
* /** A smiley/winkey. * /
* let emoji;
* ```
*
* The default `aliases` option is:
*
* ```json
* {
* "a": ["an", "our"]
* }
* ```
*
*/
aliases?: {
/**
* This interface was referenced by `undefined`'s JSON-Schema definition
* via the `patternProperty` ".*".
*/
[k: string]: string[];
};
/**
* Tags that should not be checked for valid contents.
*
* For example, with `{ excludedTags: ["category"] }`, the following comment would not be considered uninformative:
*
* ```js
* /** @category Types * /
* function computeTypes(node) {
* // ...
* }
* ```
*
* No tags are excluded by default.
*
*/
excludedTags?: string[];
/**
* Words that are ignored when searching for one that adds meaning.
*
* For example, with `{ uselessWords: ["our"] }`, the following comment would be considered uninformative:
*
* ```js
* /** Our text. * /
* let text;
* ```
*
* The default `uselessWords` option is:
*
* ```json
* ["a", "an", "i", "in", "of", "s", "the"]
* ```
*
*/
uselessWords?: string[];
}
];
/** Enforces minimum number of newlines before JSDoc comment blocks */
"jsdoc/lines-before-block":
| []
| [
{
/**
* Whether to additionally check the start of blocks, such as classes or functions.
* Defaults to `false`.
*
*/
checkBlockStarts?: boolean;
/**
* An array of tags whose presence in the JSDoc block will prevent the
* application of the rule. Defaults to `['type']` (i.e., if `@type` is present,
* lines before the block will not be added).
*
*/
excludedTags?: string[];
/**
* This option excludes cases where the JSDoc block occurs on the same line as a
* preceding code or comment. Defaults to `true`.
*
*/
ignoreSameLine?: boolean;
/**
* This option excludes cases where the JSDoc block is only one line long.
* Defaults to `true`.
*
*/
ignoreSingleLines?: boolean;
/**
* The minimum number of lines to require. Defaults to 1.
*/
lines?: number;
}
];
/** Enforces a regular expression pattern on descriptions. */
"jsdoc/match-description":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied (e.g.,
* `ClassDeclaration` for ES6 classes).
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want the rule to apply to any
* JSDoc block throughout your files.
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* If you wish to override the main block description without changing the
* default `match-description` (which can cascade to the `tags` with `true`),
* you may use `mainDescription`:
*
* ```js
* {
* 'jsdoc/match-description': ['error', {
* mainDescription: '[A-Z].*\\.',
* tags: {
* param: true,
* returns: true
* }
* }]
* }
* ```
*
* There is no need to add `mainDescription: true`, as by default, the main
* block description (and only the main block description) is linted, though you
* may disable checking it by setting it to `false`.
*
* You may also provide an object with `message`:
*
* ```js
* {
* 'jsdoc/match-description': ['error', {
* mainDescription: {
* message: 'Capitalize first word of JSDoc block descriptions',
* match: '[A-Z].*\\.'
* },
* tags: {
* param: true,
* returns: true
* }
* }]
* }
* ```
*/
mainDescription?:
| string
| boolean
| {
match?: string | boolean;
message?: string;
};
/**
* You can supply your own expression to override the default, passing a
* `matchDescription` string on the options object.
*
* Defaults to using (only) the `v` flag, so
* to add your own flags, encapsulate your expression as a string, but like a
* literal, e.g., `/[A-Z].*\./vi`.
*
* ```js
* {
* 'jsdoc/match-description': ['error', {matchDescription: '[A-Z].*\\.'}]
* }
* ```
*/
matchDescription?: string;
/**
* You may provide a custom default message by using the following format:
*
* ```js
* {
* 'jsdoc/match-description': ['error', {
* message: 'The default description should begin with a capital letter.'
* }]
* }
* ```
*
* This can be overridden per tag or for the main block description by setting
* `message` within `tags` or `mainDescription`, respectively.
*
*/
message?: string;
/**
* If not set to `false`, will enforce that the following tags have at least
* some content:
*
* - `@copyright`
* - `@example`
* - `@see`
* - `@todo`
*
* If you supply your own tag description for any of the above tags in `tags`,
* your description will take precedence.
*/
nonemptyTags?: boolean;
/**
* If you want different regular expressions to apply to tags, you may use
* the `tags` option object:
*
* ```js
* {
* 'jsdoc/match-description': ['error', {tags: {
* param: '\\- [A-Z].*\\.',
* returns: '[A-Z].*\\.'
* }}]
* }
* ```
*
* In place of a string, you can also add `true` to indicate that a particular
* tag should be linted with the `matchDescription` value (or the default).
*
* ```js
* {
* 'jsdoc/match-description': ['error', {tags: {
* param: true,
* returns: true
* }}]
* }
* ```
*
* Alternatively, you may supply an object with a `message` property to indicate
* the error message for that tag.
*
* ```js
* {
* 'jsdoc/match-description': ['error', {tags: {
* param: {message: 'Begin with a hyphen', match: '\\- [A-Z].*\\.'},
* returns: {message: 'Capitalize for returns (the default)', match: true}
* }}]
* }
* ```
*
* The tags `@param`/`@arg`/`@argument` and `@property`/`@prop` will be properly
* parsed to ensure that the matched "description" text includes only the text
* after the name.
*
* All other tags will treat the text following the tag name, a space, and
* an optional curly-bracketed type expression (and another space) as part of
* its "description" (e.g., for `@returns {someType} some description`, the
* description is `some description` while for `@some-tag xyz`, the description
* is `xyz`).
*/
tags?: {
/**
* This interface was referenced by `undefined`'s JSON-Schema definition
* via the `patternProperty` ".*".
*/
[k: string]:
| string
| true
| {
match?: string | true;
message?: string;
};
};
}
];
/** Reports the name portion of a JSDoc tag if matching or not matching a given regular expression. */
"jsdoc/match-name":
| []
| [
{
/**
* `match` is a required option containing an array of objects which determine
* the conditions whereby a name is reported as being problematic.
*
* These objects can have any combination of the following groups of optional
* properties, all of which act to confine one another.
*
* Note that `comment`, even if targeting a specific tag, is used to match the
* whole block. So if a `comment` finds its specific tag, it may still apply
* fixes found by the likes of `disallowName` even when a different tag has the
* disallowed name. An alternative is to ensure that `comment` finds the specific
* tag of the desired tag and/or name and no `disallowName` (or `allowName`) is
* supplied. In such a case, only one error will be reported, but no fixer will
* be applied, however.
*
*/
match: {
/**
* Indicates which names are allowed for the given tag (or `*`).
* Accepts a string regular expression (optionally wrapped between two
* `/` delimiters followed by optional flags) used to match the name.
*/
allowName?: string;
/**
* As with `context` but AST for the JSDoc block comment and types.
*/
comment?: string;
/**
* AST to confine the allowing or disallowing to JSDoc blocks
* associated with a particular context. See the
* ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
context?: string;
/**
* As with `allowName` but indicates names that are not allowed.
*/
disallowName?: string;
/**
* An optional custom message to use when there is a match.
*/
message?: string;
/**
* If `disallowName` is supplied and this value is present, it
* will replace the matched `disallowName` text.
*/
replacement?: string;
/**
* This array should include tag names or `*` to indicate the
* match will apply for all tags (except as confined by any context
* properties). If `*` is not used, then these rules will only apply to
* the specified tags. If `tags` is omitted, then `*` is assumed.
*/
tags?: string[];
}[];
}
];
/** Controls how and whether JSDoc blocks can be expressed as single or multiple line blocks. */
"jsdoc/multiline-blocks":
| []
| [
{
/**
* If `noMultilineBlocks` is set to `true` with this option and multiple tags are
* found in a block, an error will not be reported.
*
* Since multiple-tagged lines cannot be collapsed into a single line, this option
* prevents them from being reported. Set to `false` if you really want to report
* any blocks.
*
* This option will also be applied when there is a block description and a single
* tag (since a description cannot precede a tag on a single line, and also
* cannot be reliably added after the tag either).
*
* Defaults to `true`.
*/
allowMultipleTags?: boolean;
/**
* If `noMultilineBlocks` is set with this numeric option, multiline blocks will
* be permitted if containing at least the given amount of text.
*
* If not set, multiline blocks will not be permitted regardless of length unless
* a relevant tag is present and `multilineTags` is set.
*
* Defaults to not being in effect.
*/
minimumLengthForMultiline?: number;
/**
* If `noMultilineBlocks` is set with this option, multiline blocks may be allowed
* regardless of length as long as a tag or a tag of a certain type is present.
*
* If `*` is included in the array, the presence of a tags will allow for
* multiline blocks (but not when without any tags unless the amount of text is
* over an amount specified by `minimumLengthForMultiline`).
*
* If the array does not include `*` but lists certain tags, the presence of
* such a tag will cause multiline blocks to be allowed.
*
* You may set this to an empty array to prevent any tag from permitting multiple
* lines.
*
* Defaults to `['*']`.
*
*/
multilineTags?: "*" | string[];
/**
* For multiline blocks, any non-whitespace text preceding the `* /` on the final
* line will be reported. (Text preceding a newline is not reported.)
*
* `noMultilineBlocks` will have priority over this rule if it applies.
*
* Defaults to `true`.
*/
noFinalLineText?: boolean;
/**
* Requires that JSDoc blocks are restricted to single lines only unless impacted
* by the options `minimumLengthForMultiline`, `multilineTags`, or
* `allowMultipleTags`.
*
* Defaults to `false`.
*/
noMultilineBlocks?: boolean;
/**
* If this is `true`, any single line blocks will be reported, except those which
* are whitelisted in `singleLineTags`.
*
* Defaults to `false`.
*
*/
noSingleLineBlocks?: boolean;
/**
* For multiline blocks, any non-whitespace text immediately after the `/**` and
* space will be reported. (Text after a newline is not reported.)
*
* `noMultilineBlocks` will have priority over this rule if it applies.
*
* Defaults to `true`.
*/
noZeroLineText?: boolean;
/**
* If this number is set, it indicates a minimum line width for a single line of
* JSDoc content spread over a multi-line comment block. If a single line is under
* the minimum length, it will be reported so as to enforce single line JSDoc blocks
* for such cases. Blocks are not reported which have multi-line descriptions,
* multiple tags, a block description and tag, or tags with multi-line types or
* descriptions.
*
* Defaults to `null`.
*
*/
requireSingleLineUnderCount?: number;
/**
* An array of tags which can nevertheless be allowed as single line blocks when
* `noSingleLineBlocks` is set. You may set this to a empty array to
* cause all single line blocks to be reported. If `'*'` is present, then
* the presence of a tag will allow single line blocks (but not if a tag is
* missing).
*
* Defaults to `['lends', 'type']`.
*/
singleLineTags?: string[];
}
];
/** This rule checks for multi-line-style comments which fail to meet the criteria of a JSDoc block. */
"jsdoc/no-bad-blocks":
| []
| [
{
/**
* An array of directives that will not be reported if present at the beginning of
* a multi-comment block and at-sign `/* @`.
*
* Defaults to `['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck']`
* (some directives [used by TypeScript](https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html#ts-check)).
*
*/
ignore?: string[];
/**
* A boolean (defaulting to `false`) which if `true` will prevent all
* JSDoc-like blocks with more than two initial asterisks even those without
* apparent tag content.
*/
preventAllMultiAsteriskBlocks?: boolean;
}
];
/** If tags are present, this rule will prevent empty lines in the block description. If no tags are present, this rule will prevent extra empty lines in the block description. */
"jsdoc/no-blank-block-descriptions": [];
/** Removes empty blocks with nothing but possibly line breaks */
"jsdoc/no-blank-blocks":
| []
| [
{
/**
* Whether or not to auto-remove the blank block. Defaults to `false`.
*/
enableFixer?: boolean;
}
];
/** This rule reports defaults being used on the relevant portion of `@param` or `@default`. */
"jsdoc/no-defaults":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* Set this to `true` to report the presence of optional parameters. May be
* used if the project is insisting on optionality being indicated by
* the presence of ES6 default parameters (bearing in mind that such
* "defaults" are only applied when the supplied value is missing or
* `undefined` but not for `null` or other "falsey" values).
*/
noOptionalParamNames?: boolean;
}
];
/** Reports when certain comment structures are always expected. */
"jsdoc/no-missing-syntax":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Use the `minimum` property (defaults to 1) to indicate how many are required
* for the rule to be reported.
*
* Use the `message` property to indicate the specific error to be shown when an
* error is reported for that context being found missing. You may use
* `{{context}}` and `{{comment}}` with such messages. Defaults to
* `"Syntax is required: {{context}}"`, or with a comment, to
* `"Syntax is required: {{context}} with {{comment}}"`.
*
* Set to `"any"` if you want the rule to apply to any JSDoc block throughout
* your files (as is necessary for finding function blocks not attached to a
* function declaration or expression, i.e., `@callback` or `@function` (or its
* aliases `@func` or `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
message?: string;
minimum?: number;
}
)[];
}
];
/** Prevents use of multiple asterisks at the beginning of lines. */
"jsdoc/no-multi-asterisks":
| []
| [
{
/**
* Set to `true` if you wish to allow asterisks after a space (as with Markdown):
*
* ```js
* /**
* * *bold* text
* * /
* ```
*
* Defaults to `false`.
*/
allowWhitespace?: boolean;
/**
* Prevent the likes of this:
*
* ```js
* /**
* *
* *
* ** /
* ```
*
* Defaults to `true`.
*/
preventAtEnd?: boolean;
/**
* Prevent the likes of this:
*
* ```js
* /**
* *
* **
* * /
* ```
*
* Defaults to `true`.
*/
preventAtMiddleLines?: boolean;
}
];
/** Reports when certain comment structures are present. */
"jsdoc/no-restricted-syntax":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Use the `message` property to indicate the specific error to be shown when an
* error is reported for that context being found. Defaults to
* `"Syntax is restricted: {{context}}"`, or with a comment, to
* `"Syntax is restricted: {{context}} with {{comment}}"`.
*
* Set to `"any"` if you want the rule to apply to any JSDoc block throughout
* your files (as is necessary for finding function blocks not attached to a
* function declaration or expression, i.e., `@callback` or `@function` (or its
* aliases `@func` or `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts: (
| string
| {
comment?: string;
context?: string;
message?: string;
}
)[];
}
];
/** This rule reports types being used on `@param` or `@returns` (redundant with TypeScript). */
"jsdoc/no-types":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`, `TSDeclareFunction`, `TSMethodSignature`,
* `ClassDeclaration`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
}
];
/** Besides some expected built-in types, prohibits any types not specified as globals or within `@typedef`. */
"jsdoc/no-undefined-types":
| []
| [
{
/**
* Whether to check typedefs for use within the file
*/
checkUsedTypedefs?: boolean;
/**
* This array can be populated to indicate other types which
* are automatically considered as defined (in addition to globals, etc.).
* Defaults to an empty array.
*/
definedTypes?: string[];
/**
* Whether to disable reporting of errors. Defaults to
* `false`. This may be set to `true` in order to take advantage of only
* marking defined variables as used or checking used typedefs.
*/
disableReporting?: boolean;
/**
* Whether to mark variables as used for the purposes
* of the `no-unused-vars` rule when they are not found to be undefined.
* Defaults to `true`. May be set to `false` to enforce a practice of not
* importing types unless used in code.
*/
markVariablesAsUsed?: boolean;
}
];
/** Prefer `@import` tags to inline `import()` statements. */
"jsdoc/prefer-import-tag":
| []
| [
{
/**
* Whether or not to enable the fixer to add `@import` tags.
*/
enableFixer?: boolean;
/**
* Whether to allow `import()` statements within `@typedef`
*/
exemptTypedefs?: boolean;
/**
* What kind of `@import` to generate when no matching `@typedef` or `@import` is found
*/
outputType?: "named-import" | "namespaced-import";
}
];
/** Reports use of `any` or `*` type */
"jsdoc/reject-any-type": [];
/** Reports use of `Function` type */
"jsdoc/reject-function-type": [];
/** Requires that each JSDoc line starts with an `*`. */
"jsdoc/require-asterisk-prefix":
| []
| ["always" | "never" | "any"]
| [
"always" | "never" | "any",
{
/**
* If you want different values to apply to specific tags, you may use
* the `tags` option object. The keys are `always`, `never`, or `any` and
* the values are arrays of tag names or the special value `*description`
* which applies to the main JSDoc block description.
*
* ```js
* {
* 'jsdoc/require-asterisk-prefix': ['error', 'always', {
* tags: {
* always: ['*description'],
* any: ['example', 'license'],
* never: ['copyright']
* }
* }]
* }
* ```
*
*/
tags?: {
/**
* If it is `"always"` then a problem is raised when there is no asterisk
* prefix on a given JSDoc line.
*/
always?: string[];
/**
* No problem is raised regardless of asterisk presence or non-presence.
*/
any?: string[];
/**
* If it is `"never"` then a problem is raised
* when there is an asterisk present.
*/
never?: string[];
};
}
];
/** Requires that all functions (and potentially other contexts) have a description. */
"jsdoc/require-description":
| []
| [
{
/**
* A value indicating whether `constructor`s should be
* checked. Defaults to `true`.
*/
checkConstructors?: boolean;
/**
* A value indicating whether getters should be checked.
* Defaults to `true`.
*/
checkGetters?: boolean;
/**
* A value indicating whether setters should be checked.
* Defaults to `true`.
*/
checkSetters?: boolean;
/**
* Set to an array of strings representing the AST context
* where you wish the rule to be applied (e.g., `ClassDeclaration` for ES6
* classes).
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`,
* `FunctionDeclaration`, `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* Whether to accept implicit descriptions (`"body"`) or
* `@description` tags (`"tag"`) as satisfying the rule. Set to `"any"` to
* accept either style. Defaults to `"body"`.
*/
descriptionStyle?: "body" | "tag" | "any";
/**
* Array of tags (e.g., `['type']`) whose presence on the
* document block avoids the need for a `@description`. Defaults to an
* array with `inheritdoc`. If you set this array, it will overwrite the
* default, so be sure to add back `inheritdoc` if you wish its presence
* to cause exemption of the rule.
*/
exemptedBy?: string[];
}
];
/** Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences. */
"jsdoc/require-description-complete-sentence":
| []
| [
{
/**
* You can provide an `abbreviations` options array to avoid such strings of text
* being treated as sentence endings when followed by dots. The `.` is not
* necessary at the end of the array items.
*/
abbreviations?: string[];
/**
* When `false` (the new default), we will not assume capital letters after
* newlines are an incorrect way to end the sentence (they may be proper
* nouns, for example).
*/
newlineBeforeCapsAssumesBadSentenceEnd?: boolean;
/**
* If you want additional tags to be checked for their descriptions, you may
* add them within this option.
*
* ```js
* {
* 'jsdoc/require-description-complete-sentence': ['error', {
* tags: ['see', 'copyright']
* }]
* }
* ```
*
* The tags `@param`/`@arg`/`@argument` and `@property`/`@prop` will be properly
* parsed to ensure that the checked "description" text includes only the text
* after the name.
*
* All other tags will treat the text following the tag name, a space, and
* an optional curly-bracketed type expression (and another space) as part of
* its "description" (e.g., for `@returns {someType} some description`, the
* description is `some description` while for `@some-tag xyz`, the description
* is `xyz`).
*
*/
tags?: string[];
}
];
/** Requires that all functions (and potentially other contexts) have examples. */
"jsdoc/require-example":
| []
| [
{
/**
* A value indicating whether `constructor`s should be checked.
* Defaults to `true`.
*/
checkConstructors?: boolean;
/**
* A value indicating whether getters should be checked. Defaults to `false`.
*/
checkGetters?: boolean;
/**
* A value indicating whether setters should be checked. Defaults to `false`.
*/
checkSetters?: boolean;
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
* (e.g., `ClassDeclaration` for ES6 classes).
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want the rule to apply to any
* JSDoc block throughout your files.
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* A boolean on whether to enable the fixer (which adds an empty `@example` block).
* Defaults to `true`.
*/
enableFixer?: boolean;
/**
* Array of tags (e.g., `['type']`) whose presence on the document
* block avoids the need for an `@example`. Defaults to an array with
* `inheritdoc`. If you set this array, it will overwrite the default,
* so be sure to add back `inheritdoc` if you wish its presence to cause
* exemption of the rule.
*/
exemptedBy?: string[];
/**
* Boolean to indicate that no-argument functions should not be reported for
* missing `@example` declarations.
*/
exemptNoArguments?: boolean;
}
];
/** Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file. */
"jsdoc/require-file-overview":
| []
| [
{
/**
* The keys of this object are tag names, and the values are configuration
* objects indicating what will be checked for these whole-file tags.
*
* Each configuration object has 3 potential boolean keys (which default
* to `false` when this option is supplied).
*
* 1. `mustExist` - enforces that all files have a `@file`, `@fileoverview`, or `@overview` tag.
* 2. `preventDuplicates` - enforces that duplicate file overview tags within a given file will be reported
* 3. `initialCommentsOnly` - reports file overview tags which are not, as per
* [the docs](https://jsdoc.app/tags-file.html), "at the beginning of
* the file"–where beginning of the file is interpreted in this rule
* as being when the overview tag is not preceded by anything other than
* a comment.
*
* When no `tags` is present, the default is:
*
* ```json
* {
* "file": {
* "initialCommentsOnly": true,
* "mustExist": true,
* "preventDuplicates": true,
* }
* }
* ```
*
* You can add additional tag names and/or override `file` if you supply this
* option, e.g., in place of or in addition to `file`, giving other potential
* file global tags like `@license`, `@copyright`, `@author`, `@module` or
* `@exports`, optionally restricting them to a single use or preventing them
* from being preceded by anything besides comments.
*
* For example:
*
* ```js
* {
* "license": {
* "mustExist": true,
* "preventDuplicates": true,
* }
* }
* ```
*
* This would require one and only one `@license` in the file, though because
* `initialCommentsOnly` is absent and defaults to `false`, the `@license`
* can be anywhere.
*
* In the case of `@license`, you can use this rule along with the
* `check-values` rule (with its `allowedLicenses` or `licensePattern` options),
* to enforce a license whitelist be present on every JS file.
*
* Note that if you choose to use `preventDuplicates` with `license`, you still
* have a way to allow multiple licenses for the whole page by using the SPDX
* "AND" expression, e.g., `@license (MIT AND GPL-3.0)`.
*
* Note that the tag names are the main JSDoc tag name, so you should use `file`
* in this configuration object regardless of whether you have configured
* `fileoverview` instead of `file` on `tagNamePreference` (i.e., `fileoverview`
* will be checked, but you must use `file` on the configuration object).
*
*
*/
tags?: {
/**
* This interface was referenced by `undefined`'s JSON-Schema definition
* via the `patternProperty` ".*".
*/
[k: string]: {
initialCommentsOnly?: boolean;
mustExist?: boolean;
preventDuplicates?: boolean;
};
};
}
];
/** Requires a hyphen before the `@param` description (and optionally before `@property` descriptions). */
"jsdoc/require-hyphen-before-param-description":
| []
| ["always" | "never"]
| [
"always" | "never",
{
/**
* Object whose keys indicate different tags to check for the
* presence or absence of hyphens; the key value should be "always" or "never",
* indicating how hyphens are to be applied, e.g., `{property: 'never'}`
* to ensure `@property` never uses hyphens. A key can also be set as `*`, e.g.,
* `'*': 'always'` to apply hyphen checking to any tag (besides the preferred
* `@param` tag which follows the main string option setting and besides any
* other `tags` entries).
*
*/
tags?:
| {
/**
* This interface was referenced by `undefined`'s JSON-Schema definition
* via the `patternProperty` ".*".
*/
[k: string]: "always" | "never";
}
| "any";
}
];
/** Checks for presence of JSDoc comments, on functions and potentially other contexts (optionally limited to exports). */
"jsdoc/require-jsdoc":
| []
| [
{
/**
* A value indicating whether `constructor`s should be checked. Defaults to
* `true`. When `true`, `exemptEmptyConstructors` may still avoid reporting when
* no parameters or return values are found.
*/
checkConstructors?: boolean;
/**
* A value indicating whether getters should be checked. Besides setting as a
* boolean, this option can be set to the string `"no-setter"` to indicate that
* getters should be checked but only when there is no setter. This may be useful
* if one only wishes documentation on one of the two accessors. Defaults to
* `false`.
*
*/
checkGetters?: boolean | "no-setter";
/**
* A value indicating whether setters should be checked. Besides setting as a
* boolean, this option can be set to the string `"no-getter"` to indicate that
* setters should be checked but only when there is no getter. This may be useful
* if one only wishes documentation on one of the two accessors. Defaults to
* `false`.
*/
checkSetters?: boolean | "no-getter";
/**
* Set this to an array of strings or objects representing the additional AST
* contexts where you wish the rule to be applied (e.g., `Property` for
* properties). If specified as an object, it should have a `context` property
* and can have an `inlineCommentBlock` property which, if set to `true`, will
* add an inline `/** * /` instead of the regular, multi-line, indented jsdoc
* block which will otherwise be added. Defaults to an empty array. Contexts
* may also have their own `minLineCount` property which is an integer
* indicating a minimum number of lines expected for a node in order
* for it to require documentation.
*
* Note that you may need to disable `require` items (e.g., `MethodDefinition`)
* if you are specifying a more precise form in `contexts` (e.g., `MethodDefinition:not([accessibility="private"] > FunctionExpression`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
context?: string;
inlineCommentBlock?: boolean;
minLineCount?: number;
}
)[];
/**
* A boolean on whether to enable the fixer (which adds an empty JSDoc block).
* Defaults to `true`.
*/
enableFixer?: boolean;
/**
* When `true`, the rule will not report missing JSDoc blocks above constructors
* with no parameters or return values (this is enabled by default as the class
* name or description should be seen as sufficient to convey intent).
*
* Defaults to `true`.
*/
exemptEmptyConstructors?: boolean;
/**
* When `true`, the rule will not report missing JSDoc blocks above
* functions/methods with no parameters or return values (intended where
* function/method names are sufficient for themselves as documentation).
*
* Defaults to `false`.
*
*/
exemptEmptyFunctions?: boolean;
/**
* If set to `true` will avoid checking an overloaded function's implementation.
*
* Defaults to `false`.
*/
exemptOverloadedImplementations?: boolean;
/**
* An optional message to add to the inserted JSDoc block. Defaults to the
* empty string.
*/
fixerMessage?: string;
/**
* An integer to indicate a minimum number of lines expected for a node in order
* for it to require documentation. Defaults to `undefined`. This option will
* apply to any context; see `contexts` for line counts specific to a context.
*/
minLineCount?: number;
/**
* This option will insist that missing JSDoc blocks are only reported for
* function bodies / class declarations that are exported from the module.
* May be a boolean or object. If set to `true`, the defaults below will be
* used. If unset, JSDoc block reporting will not be limited to exports.
*
* This object supports the following optional boolean keys (`false` unless
* otherwise noted):
*
* - `ancestorsOnly` - Optimization to only check node ancestors to check if node is exported
* - `esm` - ESM exports are checked for JSDoc comments (Defaults to `true`)
* - `cjs` - CommonJS exports are checked for JSDoc comments (Defaults to `true`)
* - `window` - Window global exports are checked for JSDoc comments
*
*/
publicOnly?:
| boolean
| {
ancestorsOnly?: boolean;
cjs?: boolean;
esm?: boolean;
window?: boolean;
};
/**
* An object with the following optional boolean keys which all default to
* `false` except for `FunctionDeclaration` which defaults to `true`.
*/
require?: {
/**
* Whether to check arrow functions like `() => {}`
*/
ArrowFunctionExpression?: boolean;
/**
* Whether to check declarations like `class A {}`
*/
ClassDeclaration?: boolean;
/**
* Whether to check class expressions like `const myClass = class {}`
*/
ClassExpression?: boolean;
/**
* Whether to check function declarations like `function a {}`
*/
FunctionDeclaration?: boolean;
/**
* Whether to check function expressions like `const a = function {}`
*/
FunctionExpression?: boolean;
/**
* Whether to check method definitions like `class A { someMethodDefinition () {} }`
*/
MethodDefinition?: boolean;
};
/**
* If `true`, will skip above uncommented overloaded functions to check
* for a comment block (e.g., at the top of a set of overloaded functions).
*
* If `false`, will force each overloaded function to be checked for a
* comment block.
*
* Defaults to `true`.
*/
skipInterveningOverloadedDeclarations?: boolean;
}
];
/** Requires a description for `@next` tags */
"jsdoc/require-next-description": [];
/** Requires a type for `@next` tags */
"jsdoc/require-next-type": [];
/** Requires that all function parameters are documented with a `@param` tag. */
"jsdoc/require-param":
| []
| [
{
/**
* Numeric to indicate the number at which to begin auto-incrementing roots.
* Defaults to `0`.
*
*/
autoIncrementBase?: number;
/**
* A value indicating whether `constructor`s should be checked. Defaults to
* `true`.
*
*/
checkConstructors?: boolean;
/**
* Whether to require destructured properties. Defaults to `true`.
*/
checkDestructured?: boolean;
/**
* Whether to check the existence of a corresponding `@param` for root objects
* of destructured properties (e.g., that for `function ({a, b}) {}`, that there
* is something like `@param myRootObj` defined that can correspond to
* the `{a, b}` object parameter).
*
* If `checkDestructuredRoots` is `false`, `checkDestructured` will also be
* implied to be `false` (i.e., the inside of the roots will not be checked
* either, e.g., it will also not complain if `a` or `b` do not have their own
* documentation). Defaults to `true`.
*
*/
checkDestructuredRoots?: boolean;
/**
* A value indicating whether getters should be checked. Defaults to `false`.
*/
checkGetters?: boolean;
/**
* If set to `true`, will report (and add fixer insertions) for missing rest
* properties. Defaults to `false`.
*
* If set to `true`, note that you can still document the subproperties of the
* rest property using other jsdoc features, e.g., `@typedef`:
*
* ```js
* /**
* * @typedef ExtraOptions
* * @property innerProp1
* * @property innerProp2
* * /
*
* /**
* * @param cfg
* * @param cfg.num
* * @param {ExtraOptions} extra
* * /
* function quux ({num, ...extra}) {
* }
* ```
*
* Setting this option to `false` (the default) may be useful in cases where
* you already have separate `@param` definitions for each of the properties
* within the rest property.
*
* For example, with the option disabled, this will not give an error despite
* `extra` not having any definition:
*
* ```js
* /**
* * @param cfg
* * @param cfg.num
* * /
* function quux ({num, ...extra}) {
* }
* ```
*
* Nor will this:
*
* ```js
* /**
* * @param cfg
* * @param cfg.num
* * @param cfg.innerProp1
* * @param cfg.innerProp2
* * /
* function quux ({num, ...extra}) {
* }
* ```
*
*/
checkRestProperty?: boolean;
/**
* A value indicating whether setters should be checked. Defaults to `false`.
*/
checkSetters?: boolean;
/**
* When one specifies a type, unless it is of a generic type, like `object`
* or `array`, it may be considered unnecessary to have that object's
* destructured components required, especially where generated docs will
* link back to the specified type. For example:
*
* ```js
* /**
* * @param {SVGRect} bbox - a SVGRect
* * /
* export const bboxToObj = function ({x, y, width, height}) {
* return {x, y, width, height};
* };
* ```
*
* By default `checkTypesPattern` is set to
* `/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v`,
* meaning that destructuring will be required only if the type of the `@param`
* (the text between curly brackets) is a match for "Object" or "Array" (with or
* without initial caps), "PlainObject", or "GenericObject", "GenericArray" (or
* if no type is present). So in the above example, the lack of a match will
* mean that no complaint will be given about the undocumented destructured
* parameters.
*
* Note that the `/` delimiters are optional, but necessary to add flags.
*
* Defaults to using (only) the `v` flag, so to add your own flags, encapsulate
* your expression as a string, but like a literal, e.g., `/^object$/vi`.
*
* You could set this regular expression to a more expansive list, or you
* could restrict it such that even types matching those strings would not
* need destructuring.
*/
checkTypesPattern?: string;
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). May be useful for adding such as
* `TSMethodSignature` in TypeScript or restricting the contexts
* which are checked.
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* Whether to enable the fixer. Defaults to `true`.
*/
enableFixer?: boolean;
/**
* Whether to enable the rest element fixer.
*
* The fixer will automatically report/insert
* [JSDoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters)
* if missing.
*
* ```js
* /**
* * @param {GenericArray} cfg
* * @param {number} cfg."0"
* * /
* function baar ([a, ...extra]) {
* //
* }
* ```
*
* ...becomes:
*
* ```js
* /**
* * @param {GenericArray} cfg
* * @param {number} cfg."0"
* * @param {...any} cfg."1"
* * /
* function baar ([a, ...extra]) {
* //
* }
* ```
*
* Note that the type `any` is included since we don't know of any specific
* type to use.
*
* Defaults to `true`.
*
*/
enableRestElementFixer?: boolean;
/**
* Whether to enable the auto-adding of incrementing roots.
*
* The default behavior of `true` is for "root" to be auto-inserted for missing
* roots, followed by a 0-based auto-incrementing number.
*
* So for:
*
* ```js
* function quux ({foo}, {bar}, {baz}) {
* }
* ```
*
* ...the default JSDoc that would be added if the fixer is enabled would be:
*
* ```js
* /**
* * @param root0
* * @param root0.foo
* * @param root1
* * @param root1.bar
* * @param root2
* * @param root2.baz
* * /
* ```
*
* Has no effect if `enableFixer` is set to `false`.
*/
enableRootFixer?: boolean;
/**
* Array of tags (e.g., `['type']`) whose presence on the document block
* avoids the need for a `@param`. Defaults to an array with
* `inheritdoc`. If you set this array, it will overwrite the default,
* so be sure to add back `inheritdoc` if you wish its presence to cause
* exemption of the rule.
*/
exemptedBy?: string[];
/**
* Set to `true` to ignore reporting when all params are missing. Defaults to
* `false`.
*/
ignoreWhenAllParamsMissing?: boolean;
/**
* Set if you wish TypeScript interfaces to exempt checks for the existence of
* `@param`'s.
*
* Will check for a type defining the function itself (on a variable
* declaration) or if there is a single destructured object with a type.
* Defaults to `false`.
*/
interfaceExemptsParamsCheck?: boolean;
/**
* An array of root names to use in the fixer when roots are missing. Defaults
* to `['root']`. Note that only when all items in the array besides the last
* are exhausted will auto-incrementing occur. So, with
* `unnamedRootBase: ['arg', 'config']`, the following:
*
* ```js
* function quux ({foo}, [bar], {baz}) {
* }
* ```
*
* ...will get the following JSDoc block added:
*
* ```js
* /**
* * @param arg
* * @param arg.foo
* * @param config0
* * @param config0."0" (`bar`)
* * @param config1
* * @param config1.baz
* * /
* ```
*/
unnamedRootBase?: string[];
/**
* Set to `true` if you wish to expect documentation of properties on objects
* supplied as default values. Defaults to `false`.
*/
useDefaultObjectProperties?: boolean;
}
];
/** Requires that each `@param` tag has a `description` value. */
"jsdoc/require-param-description":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* The description string to set by default for destructured roots. Defaults to
* "The root object".
*/
defaultDestructuredRootDescription?: string;
/**
* Whether to set a default destructured root description. For example, you may
* wish to avoid manually having to set the description for a `@param`
* corresponding to a destructured root object as it should always be the same
* type of object. Uses `defaultDestructuredRootDescription` for the description
* string. Defaults to `false`.
*/
setDefaultDestructuredRootDescription?: boolean;
}
];
/** Requires that all `@param` tags have names. */
"jsdoc/require-param-name":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
}
];
/** Requires that each `@param` tag has a type value (in curly brackets). */
"jsdoc/require-param-type":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* The type string to set by default for destructured roots. Defaults to "object".
*/
defaultDestructuredRootType?: string;
/**
* Whether to set a default destructured root type. For example, you may wish
* to avoid manually having to set the type for a `@param`
* corresponding to a destructured root object as it is always going to be an
* object. Uses `defaultDestructuredRootType` for the type string. Defaults to
* `false`.
*/
setDefaultDestructuredRootType?: boolean;
}
];
/** Requires that all `@typedef` and `@namespace` tags have `@property` when their type is a plain `object`, `Object`, or `PlainObject`. */
"jsdoc/require-property": [];
/** Requires that each `@property` tag has a `description` value. */
"jsdoc/require-property-description": [];
/** Requires that all `@property` tags have names. */
"jsdoc/require-property-name": [];
/** Requires that each `@property` tag has a type value (in curly brackets). */
"jsdoc/require-property-type": [];
/** Requires that returns are documented with `@returns`. */
"jsdoc/require-returns":
| []
| [
{
/**
* A value indicating whether `constructor`s should
* be checked for `@returns` tags. Defaults to `false`.
*/
checkConstructors?: boolean;
/**
* Boolean to determine whether getter methods should
* be checked for `@returns` tags. Defaults to `true`.
*/
checkGetters?: boolean;
/**
* Set this to an array of strings representing the AST context
* (or objects with optional `context` and `comment` properties) where you wish
* the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`). This
* rule will only apply on non-default contexts when there is such a tag
* present and the `forceRequireReturn` option is set or if the
* `forceReturnsWithAsync` option is set with a present `@async` tag
* (since we are not checking against the actual `return` values in these
* cases).
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
forceRequireReturn?: boolean;
}
)[];
/**
* Whether to enable the fixer to add a blank `@returns`.
* Defaults to `false`.
*/
enableFixer?: boolean;
/**
* Array of tags (e.g., `['type']`) whose presence on the
* document block avoids the need for a `@returns`. Defaults to an array
* with `inheritdoc`. If you set this array, it will overwrite the default,
* so be sure to add back `inheritdoc` if you wish its presence to cause
* exemption of the rule.
*/
exemptedBy?: string[];
/**
* Set to `true` to always insist on
* `@returns` documentation regardless of implicit or explicit `return`'s
* in the function. May be desired to flag that a project is aware of an
* `undefined`/`void` return. Defaults to `false`.
*/
forceRequireReturn?: boolean;
/**
* By default `async` functions that do not explicitly
* return a value pass this rule as an `async` function will always return a
* `Promise`, even if the `Promise` resolves to void. You can force all
* `async` functions (including ones with an explicit `Promise` but no
* detected non-`undefined` `resolve` value) to require `@return`
* documentation by setting `forceReturnsWithAsync` to `true` on the options
* object. This may be useful for flagging that there has been consideration
* of return type. Defaults to `false`.
*/
forceReturnsWithAsync?: boolean;
/**
* This option will insist that missing `@returns` are only reported for
* function bodies / class declarations that are exported from the module.
* May be a boolean or object. If set to `true`, the defaults below will be
* used. If unset, `@returns` reporting will not be limited to exports.
*
* This object supports the following optional boolean keys (`false` unless
* otherwise noted):
*
* - `ancestorsOnly` - Optimization to only check node ancestors to check if node is exported
* - `esm` - ESM exports are checked for `@returns` JSDoc comments (Defaults to `true`)
* - `cjs` - CommonJS exports are checked for `@returns` JSDoc comments (Defaults to `true`)
* - `window` - Window global exports are checked for `@returns` JSDoc comments
*
*/
publicOnly?:
| boolean
| {
ancestorsOnly?: boolean;
cjs?: boolean;
esm?: boolean;
window?: boolean;
};
}
];
/** Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment(and reports if multiple `@returns` tags are present). */
"jsdoc/require-returns-check":
| []
| [
{
/**
* By default, functions which return a `Promise` that are not
* detected as resolving with a non-`undefined` value and `async` functions
* (even ones that do not explicitly return a value, as these are returning a
* `Promise` implicitly) will be exempted from reporting by this rule.
* If you wish to insist that only `Promise`'s which resolve to
* non-`undefined` values or `async` functions with explicit `return`'s will
* be exempted from reporting (i.e., that `async` functions can be reported
* if they lack an explicit (non-`undefined`) `return` when a `@returns` is
* present), you can set `exemptAsync` to `false` on the options object.
*/
exemptAsync?: boolean;
/**
* Because a generator might be labeled as having a
* `IterableIterator` `@returns` value (along with an iterator type
* corresponding to the type of any `yield` statements), projects might wish to
* leverage `@returns` in generators even without a `return` statement. This
* option is therefore `true` by default in `typescript` mode (in "jsdoc" mode,
* one might be more likely to take advantage of `@yields`). Set it to `false`
* if you wish for a missing `return` to be flagged regardless.
*/
exemptGenerators?: boolean;
/**
* If `true` and no return or
* resolve value is found, this setting will even insist that reporting occur
* with `void` or `undefined` (including as an indicated `Promise` type).
* Unlike `require-returns`, with this option in the rule, one can
* *discourage* the labeling of `undefined` types. Defaults to `false`.
*/
reportMissingReturnForUndefinedTypes?: boolean;
}
];
/** Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns). */
"jsdoc/require-returns-description":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
}
];
/** Requires that `@returns` tag has type value (in curly brackets). */
"jsdoc/require-returns-type":
| []
| [
{
/**
* Set this to an array of strings representing the AST context (or an object with
* optional `context` and `comment` properties) where you wish the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*
* See the ["AST and Selectors"](../#advanced-ast-and-selectors)
* section of our Advanced docs for more on the expected format.
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
}
];
/** Requires tags be present, optionally for specific contexts */
"jsdoc/require-tags":
| []
| [
{
/**
* May be an array of either strings or objects with
* a string `tag` property and `context` string property.
*/
tags?: (
| string
| {
context?: string;
tag?: string;
[k: string]: unknown;
}
)[];
}
];
/** Requires `@template` tags be present when type parameters are used. */
"jsdoc/require-template":
| []
| [
{
/**
* Array of tags (e.g., `['type']`) whose presence on the document
* block avoids the need for a `@template`. Defaults to an array with
* `inheritdoc`. If you set this array, it will overwrite the default,
* so be sure to add back `inheritdoc` if you wish its presence to cause
* exemption of the rule.
*/
exemptedBy?: string[];
/**
* Requires that each template have its own separate line, i.e., preventing
* templates of this format:
*
* ```js
* /**
* * @template T, U, V
* * /
* ```
*
* Defaults to `false`.
*
*/
requireSeparateTemplates?: boolean;
}
];
/** Requires a description for `@template` tags */
"jsdoc/require-template-description": [];
/** Requires that throw statements are documented with `@throws` tags. */
"jsdoc/require-throws":
| []
| [
{
/**
* Set this to an array of strings representing the AST context
* (or objects with optional `context` and `comment` properties) where you wish
* the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`).
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* Array of tags (e.g., `['type']`) whose presence on the
* document block avoids the need for a `@throws`. Defaults to an array
* with `inheritdoc`. If you set this array, it will overwrite the default,
* so be sure to add back `inheritdoc` if you wish its presence to cause
* exemption of the rule.
*/
exemptedBy?: string[];
}
];
/** Requires a description for `@throws` tags */
"jsdoc/require-throws-description": [];
/** Requires a type for `@throws` tags */
"jsdoc/require-throws-type": [];
/** Requires yields are documented with `@yields` tags. */
"jsdoc/require-yields":
| []
| [
{
/**
* Set this to an array of strings representing the AST context
* (or objects with optional `context` and `comment` properties) where you wish
* the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`). Set to `"any"` if you want
* the rule to apply to any JSDoc block throughout your files (as is necessary
* for finding function blocks not attached to a function declaration or
* expression, i.e., `@callback` or `@function` (or its aliases `@func` or
* `@method`) (including those associated with an `@interface`). This
* rule will only apply on non-default contexts when there is such a tag
* present and the `forceRequireYields` option is set or if the
* `withGeneratorTag` option is set with a present `@generator` tag
* (since we are not checking against the actual `yield` values in these
* cases).
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* Array of tags (e.g., `['type']`) whose presence on the
* document block avoids the need for a `@yields`. Defaults to an array
* with `inheritdoc`. If you set this array, it will overwrite the default,
* so be sure to add back `inheritdoc` if you wish its presence to cause
* exemption of the rule.
*/
exemptedBy?: string[];
/**
* Set to `true` to always insist on
* `@next` documentation even if there are no `yield` statements in the
* function or none return values. May be desired to flag that a project is
* aware of the expected yield return being `undefined`. Defaults to `false`.
*/
forceRequireNext?: boolean;
/**
* Set to `true` to always insist on
* `@yields` documentation for generators even if there are only
* expressionless `yield` statements in the function. May be desired to flag
* that a project is aware of an `undefined`/`void` yield. Defaults to
* `false`.
*/
forceRequireYields?: boolean;
/**
* If `true`, this option will insist that any use of a `yield` return
* value (e.g., `const rv = yield;` or `const rv = yield value;`) has a
* (non-standard) `@next` tag (in addition to any `@yields` tag) so as to be
* able to document the type expected to be supplied into the iterator
* (the `Generator` iterator that is returned by the call to the generator
* function) to the iterator (e.g., `it.next(value)`). The tag will not be
* expected if the generator function body merely has plain `yield;` or
* `yield value;` statements without returning the values. Defaults to
* `false`.
*/
next?: boolean;
/**
* If a `@generator` tag is present on a block, require
* (non-standard ) `@next` (see `next` option). This will require using `void`
* or `undefined` in cases where generators do not use the `next()`-supplied
* incoming `yield`-returned value. Defaults to `false`. See `contexts` to
* `any` if you want to catch `@generator` with `@callback` or such not
* attached to a function.
*/
nextWithGeneratorTag?: boolean;
/**
* If a `@generator` tag is present on a block, require
* `@yields`/`@yield`. Defaults to `true`. See `contexts` to `any` if you want
* to catch `@generator` with `@callback` or such not attached to a function.
*/
withGeneratorTag?: boolean;
}
];
/** Ensures that if a `@yields` is present that a `yield` (or `yield` with a value) is present in the function body (or that if a `@next` is present that there is a yield with a return value present). */
"jsdoc/require-yields-check":
| []
| [
{
/**
* Avoids checking the function body and merely insists
* that all generators have `@yields`. This can be an optimization with the
* ESLint `require-yield` rule, as that rule already ensures a `yield` is
* present in generators, albeit assuming the generator is not empty).
* Defaults to `false`.
*/
checkGeneratorsOnly?: boolean;
/**
* Set this to an array of strings representing the AST context
* (or objects with optional `context` and `comment` properties) where you wish
* the rule to be applied.
*
* `context` defaults to `any` and `comment` defaults to no specific comment context.
*
* Overrides the default contexts (`ArrowFunctionExpression`, `FunctionDeclaration`,
* `FunctionExpression`).
*/
contexts?: (
| string
| {
comment?: string;
context?: string;
}
)[];
/**
* If `true`, this option will insist that any use of a (non-standard)
* `@next` tag (in addition to any `@yields` tag) will be matched by a `yield`
* which uses a return value in the body of the generator (e.g.,
* `const rv = yield;` or `const rv = yield value;`). This (non-standard)
* tag is intended to be used to indicate a type and/or description of
* the value expected to be supplied by the user when supplied to the iterator
* by its `next` method, as with `it.next(value)` (with the iterator being
* the `Generator` iterator that is returned by the call to the generator
* function). This option will report an error if the generator function body
* merely has plain `yield;` or `yield value;` statements without returning
* the values. Defaults to `false`.
*/
next?: boolean;
}
];
/** Requires a description for `@yields` tags */
"jsdoc/require-yields-description": [];
/** Requires a type for `@yields` tags */
"jsdoc/require-yields-type": [];
/** Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups. */
"jsdoc/sort-tags":
| []
| [
{
/**
* Defaults to `false`. Alphabetizes any items not within `tagSequence` after any
* items within `tagSequence` (or in place of the special `-other` pseudo-tag)
* are sorted.
*
* If you want all your tags alphabetized, you can supply an empty array for
* `tagSequence` along with setting this option to `true`.
*/
alphabetizeExtras?: boolean;
/**
* Indicates the number of lines to be added between tag groups. Defaults to 1.
* Do not set to 0 or 2+ if you are using `tag-lines` and `"always"` and do not
* set to 1+ if you are using `tag-lines` and `"never"`.
*/
linesBetween?: number;
/**
* Whether to enable reporting and fixing of line breaks within tags of a given
* tag group. Defaults to `true` which will remove any line breaks at the end of
* such tags. Do not use with `true` if you are using `tag-lines` and `always`.
*/
reportIntraTagGroupSpacing?: boolean;
/**
* Whether to enable reporting and fixing of line breaks between tag groups
* as set by `linesBetween`. Defaults to `true`. Note that the very last tag
* will not have spacing applied regardless. For adding line breaks there, you
* may wish to use the `endLines` option of the `tag-lines` rule.
*/
reportTagGroupSpacing?: boolean;
/**
* An array of tag group objects indicating the preferred sequence for sorting tags.
*
* Each item in the array should be an object with a `tags` property set to an array
* of tag names.
*
* Tag names earlier in the list will be arranged first. The relative position of
* tags of the same name will not be changed.
*
* Earlier groups will also be arranged before later groups, but with the added
* feature that additional line breaks may be added between (or before or after)
* such groups (depending on the setting of `linesBetween`).
*
* Tag names not in the list will be grouped together at the end. The pseudo-tag
* `-other` can be used to place them anywhere else if desired. The tags will be
* placed in their order of appearance, or alphabetized if `alphabetizeExtras`
* is enabled, see more below about that option.
*
* Defaults to the array below (noting that it is just a single tag group with
* no lines between groups by default).
*
* Please note that this order is still experimental, so if you want to retain
* a fixed order that doesn't change into the future, supply your own
* `tagSequence`.
*
* ```js
* [{tags: [
* // Brief descriptions
* 'summary',
* 'typeSummary',
*
* // Module/file-level
* 'module',
* 'exports',
* 'file',
* 'fileoverview',
* 'overview',
* 'import',
*
* // Identifying (name, type)
* 'typedef',
* 'interface',
* 'record',
* 'template',
* 'name',
* 'kind',
* 'type',
* 'alias',
* 'external',
* 'host',
* 'callback',
* 'func',
* 'function',
* 'method',
* 'class',
* 'constructor',
*
* // Relationships
* 'modifies',
* 'mixes',
* 'mixin',
* 'mixinClass',
* 'mixinFunction',
* 'namespace',
* 'borrows',
* 'constructs',
* 'lends',
* 'implements',
* 'requires',
*
* // Long descriptions
* 'desc',
* 'description',
* 'classdesc',
* 'tutorial',
* 'copyright',
* 'license',
*
* // Simple annotations
* 'const',
* 'constant',
* 'final',
* 'global',
* 'readonly',
* 'abstract',
* 'virtual',
* 'var',
* 'member',
* 'memberof',
* 'memberof!',
* 'inner',
* 'instance',
* 'inheritdoc',
* 'inheritDoc',
* 'override',
* 'hideconstructor',
*
* // Core function/object info
* 'param',
* 'arg',
* 'argument',
* 'prop',
* 'property',
* 'return',
* 'returns',
*
* // Important behavior details
* 'async',
* 'generator',
* 'default',
* 'defaultvalue',
* 'enum',
* 'augments',
* 'extends',
* 'throws',
* 'exception',
* 'yield',
* 'yields',
* 'event',
* 'fires',
* 'emits',
* 'listens',
* 'this',
*
* // Access
* 'static',
* 'private',
* 'protected',
* 'public',
* 'access',
* 'package',
*
* '-other',
*
* // Supplementary descriptions
* 'see',
* 'example',
*
* // METADATA
*
* // Other Closure (undocumented) metadata
* 'closurePrimitive',
* 'customElement',
* 'expose',
* 'hidden',
* 'idGenerator',
* 'meaning',
* 'ngInject',
* 'owner',
* 'wizaction',
*
* // Other Closure (documented) metadata
* 'define',
* 'dict',
* 'export',
* 'externs',
* 'implicitCast',
* 'noalias',
* 'nocollapse',
* 'nocompile',
* 'noinline',
* 'nosideeffects',
* 'polymer',
* 'polymerBehavior',
* 'preserve',
* 'struct',
* 'suppress',
* 'unrestricted',
*
* // @homer0/prettier-plugin-jsdoc metadata
* 'category',
*
* // Non-Closure metadata
* 'ignore',
* 'author',
* 'version',
* 'variation',
* 'since',
* 'deprecated',
* 'todo',
* ]}];
* ```
*
*/
tagSequence?: {
/**
* See description on `tagSequence`.
*/
tags?: string[];
}[];
}
];
/** Enforces lines (or no lines) before, after, or between tags. */
"jsdoc/tag-lines":
| []
| ["always" | "any" | "never"]
| [
"always" | "any" | "never",
{
/**
* Set to `false` and use with "always" to indicate the normal lines to be
* added after tags should not be added after the final tag.
*
* Defaults to `true`.
*/
applyToEndTag?: boolean;
/**
* Use with "always" to indicate the number of lines to require be present.
*
* Defaults to 1.
*/
count?: number;
/**
* If not set to `null`, will enforce end lines to the given count on the
* final tag only.
*
* Defaults to `0`.
*/
endLines?: number | null;
/**
* If not set to `null`, will enforce a maximum number of lines to the given count anywhere in the block description.
*
* Note that if non-`null`, `maxBlockLines` must be greater than or equal to `startLines`.
*
* Defaults to `null`.
*/
maxBlockLines?: number | null;
/**
* If not set to `null`, will enforce end lines to the given count before the
* first tag only, unless there is only whitespace content, in which case,
* a line count will not be enforced.
*
* Defaults to `0`.
*/
startLines?: number | null;
/**
* Overrides the default behavior depending on specific tags.
*
* An object whose keys are tag names and whose values are objects with the
* following keys:
*
* 1. `lines` - Set to `always`, `never`, or `any` to override.
* 2. `count` - Overrides main `count` (for "always")
*
* Defaults to empty object.
*/
tags?: {
/**
* This interface was referenced by `undefined`'s JSON-Schema definition
* via the `patternProperty` ".*".
*/
[k: string]: {
count?: number;
lines?: "always" | "never" | "any";
};
};
}
];
/** Auto-escape certain characters that are input within block and tag descriptions. */
"jsdoc/text-escaping":
| []
| [
{
/**
* This option escapes all `<` and `&` characters (except those followed by
* whitespace which are treated as literals by Visual Studio Code). Defaults to
* `false`.
*/
escapeHTML?: boolean;
/**
* This option escapes the first backtick (`` ` ``) in a paired sequence.
* Defaults to `false`.
*/
escapeMarkdown?: boolean;
}
];
/** Formats JSDoc type values. */
"jsdoc/type-formatting":
| []
| [
{
/**
* Determines how array generics are represented. Set to `angle` for the style `Array<type>` or `square` for the style `type[]`. Defaults to "square".
*/
arrayBrackets?: "angle" | "square";
/**
* Whether to enable the fixer. Defaults to `true`.
*/
enableFixer?: boolean;
/**
* Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.<AnotherType>`). Defaults to `false`.
*/
genericDot?: boolean;
/**
* A string indicating the whitespace to be added on each line preceding an
* object property-value field. Defaults to the empty string.
*/
objectFieldIndent?: string;
/**
* Whether and how object field properties should be quoted (e.g., `{"a": string}`).
* Set to `single`, `double`, or `null`. Defaults to `null` (no quotes unless
* required due to special characters within the field). Digits will be kept as is,
* regardless of setting (they can either represent a digit or a string digit).
*/
objectFieldQuote?: "double" | "single" | null;
/**
* For object properties, specify whether a "semicolon", "comma", "linebreak",
* "semicolon-and-linebreak", or "comma-and-linebreak" should be used after
* each object property-value pair.
*
* Defaults to `"comma"`.
*/
objectFieldSeparator?: "comma" | "comma-and-linebreak" | "linebreak" | "semicolon" | "semicolon-and-linebreak";
/**
* Whether `objectFieldSeparator` set to `"semicolon-and-linebreak"` or
* `"comma-and-linebreak"` should be allowed to optionally drop the linebreak.
*
* Defaults to `true`.
*/
objectFieldSeparatorOptionalLinebreak?: boolean;
/**
* If `separatorForSingleObjectField` is not in effect (i.e., if it is `false`
* or there are multiple property-value object fields present), this property
* will determine whether to add punctuation corresponding to the
* `objectFieldSeparator` (e.g., a semicolon) to the final object field.
* Defaults to `false`.
*/
objectFieldSeparatorTrailingPunctuation?: boolean;
/**
* Whether to apply the `objectFieldSeparator` (e.g., a semicolon) when there
* is only one property-value object field present. Defaults to `false`.
*/
separatorForSingleObjectField?: boolean;
/**
* How string literals should be quoted (e.g., `"abc"`). Set to `single`
* or `double`. Defaults to 'single'.
*/
stringQuotes?: "double" | "single";
/**
* A string of spaces that will be added immediately after the type's initial
* curly bracket and immediately before its ending curly bracket. Defaults
* to the empty string.
*/
typeBracketSpacing?: string;
/**
* Determines the spacing to add to unions (`|`). Defaults to a single space (`" "`).
*/
unionSpacing?: string;
}
];
/** Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings). */
"jsdoc/valid-types":
| []
| [
{
/**
* Set to `false` to bulk disallow
* empty name paths with namepath groups 2 and 4 (these might often be
* expected to have an accompanying name path, though they have some
* indicative value without one; these may also allow names to be defined
* in another manner elsewhere in the block); you can use
* `settings.jsdoc.structuredTags` with the `required` key set to "name" if you
* wish to require name paths on a tag-by-tag basis. Defaults to `true`.
*/
allowEmptyNamepaths?: boolean;
}
];
}