eslint-plugin-jsdoc 32.3.3 → 32.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -8
- package/dist/iterateJsdoc.js +30 -0
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/rules/checkExamples.js +2 -2
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkValues.js +7 -7
- package/dist/rules/checkValues.js.map +1 -1
- package/dist/rules/matchDescription.js +3 -3
- package/dist/rules/matchDescription.js.map +1 -1
- package/dist/rules/requireDescription.js +1 -1
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +3 -3
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireExample.js +1 -1
- package/dist/rules/requireExample.js.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js +6 -5
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
- package/dist/rules/validTypes.js +4 -4
- package/dist/rules/validTypes.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6574,6 +6574,31 @@ function quux () {
|
|
|
6574
6574
|
}
|
|
6575
6575
|
// "jsdoc/match-description": ["error"|"warn", {"tags":{"description":true}}]
|
|
6576
6576
|
|
|
6577
|
+
/**
|
|
6578
|
+
* @description Foo
|
|
6579
|
+
* bar.
|
|
6580
|
+
* @param
|
|
6581
|
+
*/
|
|
6582
|
+
function quux () {
|
|
6583
|
+
|
|
6584
|
+
}
|
|
6585
|
+
// "jsdoc/match-description": ["error"|"warn", {"tags":{"description":true}}]
|
|
6586
|
+
|
|
6587
|
+
/** @description Foo bar. */
|
|
6588
|
+
function quux () {
|
|
6589
|
+
|
|
6590
|
+
}
|
|
6591
|
+
// "jsdoc/match-description": ["error"|"warn", {"tags":{"description":true}}]
|
|
6592
|
+
|
|
6593
|
+
/**
|
|
6594
|
+
* @description Foo
|
|
6595
|
+
* bar.
|
|
6596
|
+
*/
|
|
6597
|
+
function quux () {
|
|
6598
|
+
|
|
6599
|
+
}
|
|
6600
|
+
// "jsdoc/match-description": ["error"|"warn", {"tags":{"description":true}}]
|
|
6601
|
+
|
|
6577
6602
|
/**
|
|
6578
6603
|
* Foo. {@see Math.sin}.
|
|
6579
6604
|
*/
|
|
@@ -9208,6 +9233,12 @@ function quux () {
|
|
|
9208
9233
|
function quux () {
|
|
9209
9234
|
|
|
9210
9235
|
}
|
|
9236
|
+
|
|
9237
|
+
/** @description something */
|
|
9238
|
+
function quux () {
|
|
9239
|
+
|
|
9240
|
+
}
|
|
9241
|
+
// "jsdoc/require-description": ["error"|"warn", {"descriptionStyle":"tag"}]
|
|
9211
9242
|
````
|
|
9212
9243
|
|
|
9213
9244
|
|
|
@@ -12127,8 +12158,8 @@ function quux ([foo, bar]) {
|
|
|
12127
12158
|
```js
|
|
12128
12159
|
/**
|
|
12129
12160
|
* @param cfg
|
|
12130
|
-
* @param cfg.0
|
|
12131
|
-
* @param cfg.1
|
|
12161
|
+
* @param cfg."0"
|
|
12162
|
+
* @param cfg."1"
|
|
12132
12163
|
*/
|
|
12133
12164
|
```
|
|
12134
12165
|
|
|
@@ -12177,7 +12208,7 @@ if missing.
|
|
|
12177
12208
|
```js
|
|
12178
12209
|
/**
|
|
12179
12210
|
* @param {GenericArray} cfg
|
|
12180
|
-
* @param {number} cfg.0
|
|
12211
|
+
* @param {number} cfg."0"
|
|
12181
12212
|
*/
|
|
12182
12213
|
function baar ([a, ...extra]) {
|
|
12183
12214
|
//
|
|
@@ -12189,8 +12220,8 @@ function baar ([a, ...extra]) {
|
|
|
12189
12220
|
```js
|
|
12190
12221
|
/**
|
|
12191
12222
|
* @param {GenericArray} cfg
|
|
12192
|
-
* @param {number} cfg.0
|
|
12193
|
-
* @param {...any} cfg.1
|
|
12223
|
+
* @param {number} cfg."0"
|
|
12224
|
+
* @param {...any} cfg."1"
|
|
12194
12225
|
*/
|
|
12195
12226
|
function baar ([a, ...extra]) {
|
|
12196
12227
|
//
|
|
@@ -12209,8 +12240,8 @@ corresponding to `extra`:
|
|
|
12209
12240
|
```js
|
|
12210
12241
|
/**
|
|
12211
12242
|
* @param {GenericArray} cfg
|
|
12212
|
-
* @param {number} cfg.0
|
|
12213
|
-
* @param {any} cfg.1
|
|
12243
|
+
* @param {number} cfg."0"
|
|
12244
|
+
* @param {any} cfg."1"
|
|
12214
12245
|
*/
|
|
12215
12246
|
function baar ([a, ...extra]) {
|
|
12216
12247
|
//
|
|
@@ -12357,7 +12388,7 @@ function quux ({foo}, [bar], {baz}) {
|
|
|
12357
12388
|
* @param arg
|
|
12358
12389
|
* @param arg.foo
|
|
12359
12390
|
* @param config0
|
|
12360
|
-
* @param config0.0 (`bar`)
|
|
12391
|
+
* @param config0."0" (`bar`)
|
|
12361
12392
|
* @param config1
|
|
12362
12393
|
* @param config1.baz
|
|
12363
12394
|
*/
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -201,6 +201,36 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
|
|
|
201
201
|
return _jsdocUtils.default.getRegexFromString(str, requiredFlags);
|
|
202
202
|
};
|
|
203
203
|
|
|
204
|
+
utils.getTagDescription = tg => {
|
|
205
|
+
const descriptions = [];
|
|
206
|
+
tg.source.some(({
|
|
207
|
+
tokens: {
|
|
208
|
+
end,
|
|
209
|
+
postDelimiter,
|
|
210
|
+
tag,
|
|
211
|
+
postTag,
|
|
212
|
+
name,
|
|
213
|
+
type,
|
|
214
|
+
description
|
|
215
|
+
}
|
|
216
|
+
}) => {
|
|
217
|
+
const desc = (tag && postTag || !tag && !name && !type && postDelimiter || '' // Remove space
|
|
218
|
+
).slice(1) + (description || '');
|
|
219
|
+
|
|
220
|
+
if (end) {
|
|
221
|
+
if (desc) {
|
|
222
|
+
descriptions.push(desc);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
descriptions.push(desc);
|
|
229
|
+
return false;
|
|
230
|
+
});
|
|
231
|
+
return descriptions.join('\n');
|
|
232
|
+
};
|
|
233
|
+
|
|
204
234
|
utils.getDescription = () => {
|
|
205
235
|
const descriptions = [];
|
|
206
236
|
let lastDescriptionLine;
|
package/dist/iterateJsdoc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/iterateJsdoc.js"],"names":["globalState","Map","hasSeeWithLink","spec","tag","test","source","getTokenizers","includes","remainder","tokens","description","pos","search","name","slice","extra","postName","match","optional","parseComment","commentNode","indent","value","tokenizers","number","delimiter","end","postDelimiter","start","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","column","line","parseClosureTemplateTag","jsdocUtils","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","reportJSDoc","msg","handler","fixer","replaceText","getRegexFromString","str","requiredFlags","getDescription","descriptions","lastDescriptionLine","push","some","idx","join","changeTag","forEach","src","setTag","removeTag","tagIndex","tags","lastIndex","firstNumber","sourceIndex","findIndex","srcNumber","splice","addTag","targetTagName","length","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","indnt","repeat","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","_","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","fix","jsdocLoc","data","lineNumber","colNumber","iterate","lines","iterator","state","sourceLine","charAt","checkInternal","checkPrivate","iterateAllJsdocs","trackedJsdocs","callIterator","jsdocNodes","lastCall","getText","exit","create","reducedNode","comment","nonComment","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contexts","contextDefaults","enforcedContexts","checkJsdoc","getContextObject","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression"],"mappings":"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","sourcesContent":["import {\n parse as commentParser, stringify as commentStringify,\n} from 'comment-parser';\nimport {\n // eslint-disable-next-line import/no-named-default\n default as descriptionTokenizer,\n getJoiner,\n} from 'comment-parser/lib/parser/tokenizers/description';\nimport nameTokenizer from 'comment-parser/lib/parser/tokenizers/name';\nimport tagTokenizer from 'comment-parser/lib/parser/tokenizers/tag';\nimport typeTokenizer from 'comment-parser/lib/parser/tokenizers/type';\nimport {\n rewireSpecs,\n seedBlock,\n seedTokens,\n} from 'comment-parser/lib/util';\nimport _ from 'lodash';\nimport {\n getJSDocComment, getReducedASTNode,\n} from './eslint/getJSDocComment';\nimport jsdocUtils from './jsdocUtils';\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst hasSeeWithLink = (spec) => {\n return spec.tag === 'see' && (/\\{@link.+?\\}/u).test(spec.source[0].source);\n};\n\nconst getTokenizers = () => {\n // trim\n return [\n // Tag\n tagTokenizer(),\n\n // Type\n (spec) => {\n if (['default', 'defaultvalue', 'see'].includes(spec.tag)) {\n return spec;\n }\n\n return typeTokenizer()(spec);\n },\n\n // Name\n (spec) => {\n if (spec.tag === 'template') {\n // const preWS = spec.postTag;\n const remainder = spec.source[0].tokens.description;\n\n const pos = remainder.search(/(?<![\\s,])\\s/);\n\n const name = pos === -1 ? remainder : remainder.slice(0, pos);\n const extra = remainder.slice(pos + 1);\n const [, postName, description] = extra.match(/(\\s*)(.*)/);\n\n spec.name = name;\n spec.optional = false;\n const {tokens} = spec.source[0];\n tokens.name = name;\n tokens.postName = postName;\n tokens.description = description;\n\n return spec;\n }\n\n if ([\n 'example', 'return', 'returns', 'throws', 'exception',\n 'access', 'version', 'since', 'license', 'author',\n 'default', 'defaultvalue',\n ].includes(spec.tag) || hasSeeWithLink(spec)) {\n return spec;\n }\n\n return nameTokenizer()(spec);\n },\n\n // Description\n (spec) => {\n return descriptionTokenizer(getJoiner('preserve'))(spec);\n },\n ];\n};\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @returns {object}\n */\nconst parseComment = (commentNode, indent) => {\n // Preserve JSDoc block start/end indentation.\n return commentParser(`/*${commentNode.value}*/`, {\n // @see https://github.com/yavorskiy/comment-parser/issues/21\n tokenizers: getTokenizers(),\n })[0] || seedBlock({\n source: [\n {\n number: 0,\n tokens: seedTokens({\n delimiter: '/**',\n description: '',\n end: '',\n postDelimiter: '',\n start: '',\n }),\n },\n {\n number: 1,\n tokens: seedTokens({\n delimiter: '',\n description: '',\n end: '*/',\n postDelimiter: '',\n start: indent + ' ',\n }),\n },\n ],\n });\n};\n\nconst getBasicUtils = (context, {tagNamePreference, mode}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.getPreferredTagNameObject = ({tagName}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag(['callback', 'function', 'func', 'method']);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine;\n if (jsdoc.source[0].tokens.description) {\n descriptions.push(jsdoc.source[0].tokens.description);\n }\n jsdoc.source.slice(1).some(({tokens: {description, tag, end}}, idx) => {\n if (tag || end) {\n lastDescriptionLine = idx;\n\n return true;\n }\n descriptions.push(description);\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n tag.source.forEach((src, idx) => {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n });\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [{\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n }];\n };\n\n utils.removeTag = (tagIndex) => {\n const {source} = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n source.forEach(({number}) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber, tokens: {end},\n }) => {\n return number === srcNumber && !end;\n });\n if (sourceIndex > -1) {\n jsdoc.source.splice(sourceIndex, 1);\n lastIndex = sourceIndex;\n }\n });\n jsdoc.source.slice(lastIndex).forEach((src, idx) => {\n src.number = firstNumber + lastIndex + idx;\n });\n };\n\n utils.addTag = (targetTagName) => {\n const number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? 0) + 1;\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n }),\n });\n jsdoc.source.slice(number + 1).forEach((src) => {\n src.number++;\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n ['ExportNamedDeclaration', 'ExportDefaultDeclaration'].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({tagName});\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (name) => {\n return jsdocUtils.hasATag(jsdoc, name);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : ['inheritdoc'],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ].forEach((method) => {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {otherMode: true} : false;\n };\n });\n\n [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ].forEach((method) => {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {otherMode: false};\n };\n });\n\n [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ].forEach((method) => {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n });\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if (['ExportNamedDeclaration', 'ExportDefaultDeclaration'].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {tags} = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [...ancestors, node].reverse().find((parent) => {\n return parent && ['ClassDeclaration', 'ClassExpression'].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n const indnt = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indnt);\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n const matchingJsdocTags = _.filter(jsdoc.tags, {\n tag: targetTagName,\n });\n\n matchingJsdocTags.forEach((matchingJsdocTag) => {\n arrayHandler(matchingJsdocTag, targetTagName);\n });\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable sort-keys-fix/sort-keys-fix */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable sort-keys-fix/sort-keys-fix */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {line: lineNumber},\n start: {line: lineNumber},\n };\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\nconst iterate = (\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indent = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdoc = parseComment(jsdocNode, indent);\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (utils.hasTag('private') || _.filter(jsdoc.tags, {\n tag: 'access',\n }).some(({description}) => {\n return description === 'private';\n }))\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst iterateAllJsdocs = (iterator, ruleConfig) => {\n const trackedJsdocs = [];\n\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {lines} = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n jsdocNodes.forEach((jsdocNode) => {\n if (!(/^\\/\\*\\*\\s/).test(sourceCode.getText(jsdocNode))) {\n return;\n }\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n state, true,\n );\n });\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const comment = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.includes(comment)) {\n return;\n }\n if (!comment) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.push(comment);\n callIterator(context, node, [comment], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.includes(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {lines} = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || !['problem', 'suggestion', 'layout'].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n let contexts;\n if (ruleConfig.contextDefaults) {\n contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n if (contexts.includes('any')) {\n return iterateAllJsdocs(iterator, ruleConfig).create(context);\n }\n }\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n const {lines} = sourceCode;\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n );\n };\n\n if (ruleConfig.contextDefaults) {\n return jsdocUtils.getContextObject(contexts, checkJsdoc);\n }\n\n return {\n ArrowFunctionExpression: checkJsdoc,\n FunctionDeclaration: checkJsdoc,\n FunctionExpression: checkJsdoc,\n };\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
|
|
1
|
+
{"version":3,"sources":["../src/iterateJsdoc.js"],"names":["globalState","Map","hasSeeWithLink","spec","tag","test","source","getTokenizers","includes","remainder","tokens","description","pos","search","name","slice","extra","postName","match","optional","parseComment","commentNode","indent","value","tokenizers","number","delimiter","end","postDelimiter","start","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","column","line","parseClosureTemplateTag","jsdocUtils","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","reportJSDoc","msg","handler","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","some","postTag","desc","push","join","getDescription","lastDescriptionLine","idx","changeTag","forEach","src","setTag","removeTag","tagIndex","tags","lastIndex","firstNumber","sourceIndex","findIndex","srcNumber","splice","addTag","targetTagName","length","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","indnt","repeat","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","_","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","fix","jsdocLoc","data","lineNumber","colNumber","iterate","lines","iterator","state","sourceLine","charAt","checkInternal","checkPrivate","iterateAllJsdocs","trackedJsdocs","callIterator","jsdocNodes","lastCall","getText","exit","create","reducedNode","comment","nonComment","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contexts","contextDefaults","enforcedContexts","checkJsdoc","getContextObject","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression"],"mappings":"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","sourcesContent":["import {\n parse as commentParser, stringify as commentStringify,\n} from 'comment-parser';\nimport {\n // eslint-disable-next-line import/no-named-default\n default as descriptionTokenizer,\n getJoiner,\n} from 'comment-parser/lib/parser/tokenizers/description';\nimport nameTokenizer from 'comment-parser/lib/parser/tokenizers/name';\nimport tagTokenizer from 'comment-parser/lib/parser/tokenizers/tag';\nimport typeTokenizer from 'comment-parser/lib/parser/tokenizers/type';\nimport {\n rewireSpecs,\n seedBlock,\n seedTokens,\n} from 'comment-parser/lib/util';\nimport _ from 'lodash';\nimport {\n getJSDocComment, getReducedASTNode,\n} from './eslint/getJSDocComment';\nimport jsdocUtils from './jsdocUtils';\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst hasSeeWithLink = (spec) => {\n return spec.tag === 'see' && (/\\{@link.+?\\}/u).test(spec.source[0].source);\n};\n\nconst getTokenizers = () => {\n // trim\n return [\n // Tag\n tagTokenizer(),\n\n // Type\n (spec) => {\n if (['default', 'defaultvalue', 'see'].includes(spec.tag)) {\n return spec;\n }\n\n return typeTokenizer()(spec);\n },\n\n // Name\n (spec) => {\n if (spec.tag === 'template') {\n // const preWS = spec.postTag;\n const remainder = spec.source[0].tokens.description;\n\n const pos = remainder.search(/(?<![\\s,])\\s/);\n\n const name = pos === -1 ? remainder : remainder.slice(0, pos);\n const extra = remainder.slice(pos + 1);\n const [, postName, description] = extra.match(/(\\s*)(.*)/);\n\n spec.name = name;\n spec.optional = false;\n const {tokens} = spec.source[0];\n tokens.name = name;\n tokens.postName = postName;\n tokens.description = description;\n\n return spec;\n }\n\n if ([\n 'example', 'return', 'returns', 'throws', 'exception',\n 'access', 'version', 'since', 'license', 'author',\n 'default', 'defaultvalue',\n ].includes(spec.tag) || hasSeeWithLink(spec)) {\n return spec;\n }\n\n return nameTokenizer()(spec);\n },\n\n // Description\n (spec) => {\n return descriptionTokenizer(getJoiner('preserve'))(spec);\n },\n ];\n};\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @returns {object}\n */\nconst parseComment = (commentNode, indent) => {\n // Preserve JSDoc block start/end indentation.\n return commentParser(`/*${commentNode.value}*/`, {\n // @see https://github.com/yavorskiy/comment-parser/issues/21\n tokenizers: getTokenizers(),\n })[0] || seedBlock({\n source: [\n {\n number: 0,\n tokens: seedTokens({\n delimiter: '/**',\n description: '',\n end: '',\n postDelimiter: '',\n start: '',\n }),\n },\n {\n number: 1,\n tokens: seedTokens({\n delimiter: '',\n description: '',\n end: '*/',\n postDelimiter: '',\n start: indent + ' ',\n }),\n },\n ],\n });\n};\n\nconst getBasicUtils = (context, {tagNamePreference, mode}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.getPreferredTagNameObject = ({tagName}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag(['callback', 'function', 'func', 'method']);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {end, postDelimiter, tag, postTag, name, type, description},\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine;\n if (jsdoc.source[0].tokens.description) {\n descriptions.push(jsdoc.source[0].tokens.description);\n }\n jsdoc.source.slice(1).some(({tokens: {description, tag, end}}, idx) => {\n if (tag || end) {\n lastDescriptionLine = idx;\n\n return true;\n }\n descriptions.push(description);\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n tag.source.forEach((src, idx) => {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n });\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [{\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n }];\n };\n\n utils.removeTag = (tagIndex) => {\n const {source} = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n source.forEach(({number}) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber, tokens: {end},\n }) => {\n return number === srcNumber && !end;\n });\n if (sourceIndex > -1) {\n jsdoc.source.splice(sourceIndex, 1);\n lastIndex = sourceIndex;\n }\n });\n jsdoc.source.slice(lastIndex).forEach((src, idx) => {\n src.number = firstNumber + lastIndex + idx;\n });\n };\n\n utils.addTag = (targetTagName) => {\n const number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? 0) + 1;\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n }),\n });\n jsdoc.source.slice(number + 1).forEach((src) => {\n src.number++;\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n ['ExportNamedDeclaration', 'ExportDefaultDeclaration'].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({tagName});\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (name) => {\n return jsdocUtils.hasATag(jsdoc, name);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : ['inheritdoc'],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ].forEach((method) => {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {otherMode: true} : false;\n };\n });\n\n [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ].forEach((method) => {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {otherMode: false};\n };\n });\n\n [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ].forEach((method) => {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n });\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if (['ExportNamedDeclaration', 'ExportDefaultDeclaration'].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {tags} = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [...ancestors, node].reverse().find((parent) => {\n return parent && ['ClassDeclaration', 'ClassExpression'].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n const indnt = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indnt);\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n const matchingJsdocTags = _.filter(jsdoc.tags, {\n tag: targetTagName,\n });\n\n matchingJsdocTags.forEach((matchingJsdocTag) => {\n arrayHandler(matchingJsdocTag, targetTagName);\n });\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable sort-keys-fix/sort-keys-fix */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable sort-keys-fix/sort-keys-fix */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {line: lineNumber},\n start: {line: lineNumber},\n };\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\nconst iterate = (\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indent = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdoc = parseComment(jsdocNode, indent);\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (utils.hasTag('private') || _.filter(jsdoc.tags, {\n tag: 'access',\n }).some(({description}) => {\n return description === 'private';\n }))\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst iterateAllJsdocs = (iterator, ruleConfig) => {\n const trackedJsdocs = [];\n\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {lines} = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n jsdocNodes.forEach((jsdocNode) => {\n if (!(/^\\/\\*\\*\\s/).test(sourceCode.getText(jsdocNode))) {\n return;\n }\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n state, true,\n );\n });\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const comment = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.includes(comment)) {\n return;\n }\n if (!comment) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.push(comment);\n callIterator(context, node, [comment], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.includes(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {lines} = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || !['problem', 'suggestion', 'layout'].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n let contexts;\n if (ruleConfig.contextDefaults) {\n contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n if (contexts.includes('any')) {\n return iterateAllJsdocs(iterator, ruleConfig).create(context);\n }\n }\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n const {lines} = sourceCode;\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n );\n };\n\n if (ruleConfig.contextDefaults) {\n return jsdocUtils.getContextObject(contexts, checkJsdoc);\n }\n\n return {\n ArrowFunctionExpression: checkJsdoc,\n FunctionDeclaration: checkJsdoc,\n FunctionExpression: checkJsdoc,\n };\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
|
|
@@ -256,7 +256,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
256
256
|
}
|
|
257
257
|
|
|
258
258
|
checkSource({
|
|
259
|
-
source: `(${tag
|
|
259
|
+
source: `(${utils.getTagDescription(tag)})`,
|
|
260
260
|
targetTagName,
|
|
261
261
|
...filenameInfo
|
|
262
262
|
});
|
|
@@ -303,7 +303,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
303
303
|
|
|
304
304
|
const matchingFilenameInfo = getFilenameInfo(matchingFileName);
|
|
305
305
|
utils.forEachPreferredTag('example', (tag, targetTagName) => {
|
|
306
|
-
let source =
|
|
306
|
+
let source = utils.getTagDescription(tag);
|
|
307
307
|
const match = source.match(hasCaptionRegex);
|
|
308
308
|
|
|
309
309
|
if (captionRequired && (!match || !match[1].trim())) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/checkExamples.js"],"names":["zeroBasedLineIndexAdjust","likelyNestedJSDocIndentSpace","preTagSpaceLength","firstLinePrefixLength","hasCaptionRegex","escapeStringRegexp","str","replace","countChars","ch","match","RegExp","length","defaultMdRules","defaultExpressionRules","quotes","semi","strict","getLinesCols","text","matchLines","colDelta","slice","lastIndexOf","report","utils","context","globalState","has","set","Map","matchingFileNameMap","get","options","exampleCodeRegex","rejectExampleCodeRegex","checkDefaults","checkParams","checkProperties","noDefaultExampleRules","checkEslintrc","matchingFileName","matchingFileNameDefaults","matchingFileNameParams","matchingFileNameProperties","paddedIndent","baseConfig","configFile","allowInlineConfig","reportUnusedDisableDirectives","captionRequired","rulePaths","mdRules","undefined","expressionRules","getRegexFromString","checkSource","filename","defaultFileName","rules","lines","cols","skipInit","source","targetTagName","sources","tag","line","push","nonJSPrefacingCols","nonJSPrefacingLines","string","checkRules","cliConfig","useEslintrc","cliConfigStr","JSON","stringify","src","fileNameMapKey","file","cliFile","cli","CLIEngine","config","getConfigForFile","results","messages","executeOnText","number","codeStartLine","codeStartCol","forEach","message","column","severity","ruleId","startLine","startCol","getFilenameInfo","ext","jsFileName","getFilename","includes","filenameInfo","forEachPreferredTag","description","trim","default","tagName","getPreferredTagName","hasTag","matchingFilenameInfo","tokens","postTag","test","startingIndex","lastStringCount","exampleCode","lastIndex","exec","index","n0","n1","preMatch","preMatchLines","nonJSPreface","nonJSPrefaceLineCount","idx","indexOf","charsInLastLine","global","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","type"],"mappings":"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","sourcesContent":["// Todo: When peerDeps bump to ESLint 7, see about replacing `CLIEngine`\n// with non-deprecated `ESLint` class:\n// https://github.com/eslint/eslint/blob/master/docs/user-guide/migrating-to-7.0.0.md#-the-cliengine-class-has-been-deprecated\nimport {\n CLIEngine,\n} from 'eslint';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst zeroBasedLineIndexAdjust = -1;\nconst likelyNestedJSDocIndentSpace = 1;\nconst preTagSpaceLength = 1;\n\n// If a space is present, we should ignore it\nconst firstLinePrefixLength = preTagSpaceLength;\n\nconst hasCaptionRegex = /^\\s*<caption>([\\s\\S]*?)<\\/caption>/u;\n\nconst escapeStringRegexp = (str) => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/gu, '\\\\$&');\n};\nconst countChars = (str, ch) => {\n return (str.match(new RegExp(escapeStringRegexp(ch), 'gu')) || []).length;\n};\n\nconst defaultMdRules = {\n // \"always\" newline rule at end unlikely in sample code\n 'eol-last': 0,\n\n // Wouldn't generally expect example paths to resolve relative to JS file\n 'import/no-unresolved': 0,\n\n // Snippets likely too short to always include import/export info\n 'import/unambiguous': 0,\n\n 'jsdoc/require-file-overview': 0,\n\n // The end of a multiline comment would end the comment the example is in.\n 'jsdoc/require-jsdoc': 0,\n\n // Unlikely to have inadvertent debugging within examples\n 'no-console': 0,\n\n // Often wish to start `@example` code after newline; also may use\n // empty lines for spacing\n 'no-multiple-empty-lines': 0,\n\n // Many variables in examples will be `undefined`\n 'no-undef': 0,\n\n // Common to define variables for clarity without always using them\n 'no-unused-vars': 0,\n\n // See import/no-unresolved\n 'node/no-missing-import': 0,\n 'node/no-missing-require': 0,\n\n // Can generally look nicer to pad a little even if code imposes more stringency\n 'padded-blocks': 0,\n};\n\nconst defaultExpressionRules = {\n ...defaultMdRules,\n 'chai-friendly/no-unused-expressions': 'off',\n 'no-new': 'off',\n 'no-unused-expressions': 'off',\n quotes: ['error', 'double'],\n semi: ['error', 'never'],\n strict: 'off',\n};\n\nconst getLinesCols = (text) => {\n const matchLines = countChars(text, '\\n');\n\n const colDelta = matchLines ?\n text.slice(text.lastIndexOf('\\n') + 1).length :\n text.length;\n\n return [matchLines, colDelta];\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n globalState,\n}) => {\n if (!globalState.has('checkExamples-matchingFileName')) {\n globalState.set('checkExamples-matchingFileName', new Map());\n }\n const matchingFileNameMap = globalState.get('checkExamples-matchingFileName');\n\n const options = context.options[0] || {};\n let {\n exampleCodeRegex = null,\n rejectExampleCodeRegex = null,\n } = options;\n const {\n checkDefaults = false,\n checkParams = false,\n checkProperties = false,\n noDefaultExampleRules = false,\n checkEslintrc = true,\n matchingFileName = null,\n matchingFileNameDefaults = null,\n matchingFileNameParams = null,\n matchingFileNameProperties = null,\n paddedIndent = 0,\n baseConfig = {},\n configFile,\n allowInlineConfig = true,\n reportUnusedDisableDirectives = true,\n captionRequired = false,\n } = options;\n\n // Make this configurable?\n const rulePaths = [];\n\n const mdRules = noDefaultExampleRules ? undefined : defaultMdRules;\n\n const expressionRules = noDefaultExampleRules ? undefined : defaultExpressionRules;\n\n if (exampleCodeRegex) {\n exampleCodeRegex = utils.getRegexFromString(exampleCodeRegex);\n }\n if (rejectExampleCodeRegex) {\n rejectExampleCodeRegex = utils.getRegexFromString(rejectExampleCodeRegex);\n }\n\n const checkSource = ({\n filename, defaultFileName,\n rules = expressionRules,\n lines = 0,\n cols = 0,\n skipInit, source, targetTagName, sources = [], tag = {line: 0},\n }) => {\n if (!skipInit) {\n sources.push({\n nonJSPrefacingCols: cols,\n nonJSPrefacingLines: lines,\n string: source,\n });\n }\n\n // Todo: Make fixable\n // Todo: Fix whitespace indent\n const checkRules = function ({\n nonJSPrefacingCols,\n nonJSPrefacingLines,\n string,\n }) {\n const cliConfig = {\n allowInlineConfig,\n baseConfig,\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: checkEslintrc,\n };\n const cliConfigStr = JSON.stringify(cliConfig);\n\n const src = paddedIndent ?\n string.replace(new RegExp(`(^|\\n) {${paddedIndent}}(?!$)`, 'gu'), '\\n') :\n string;\n\n // Programmatic ESLint API: https://eslint.org/docs/developer-guide/nodejs-api\n const fileNameMapKey = filename ?\n 'a' + cliConfigStr + filename :\n 'b' + cliConfigStr + defaultFileName;\n const file = filename || defaultFileName;\n let cliFile;\n if (matchingFileNameMap.has(fileNameMapKey)) {\n cliFile = matchingFileNameMap.get(fileNameMapKey);\n } else {\n const cli = new CLIEngine(cliConfig);\n let config;\n if (filename || checkEslintrc) {\n config = cli.getConfigForFile(file);\n }\n\n // We need a new instance to ensure that the rules that may only\n // be available to `file` (if it has its own `.eslintrc`),\n // will be defined.\n cliFile = new CLIEngine({\n allowInlineConfig,\n baseConfig: {\n ...baseConfig,\n ...config,\n },\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: false,\n });\n matchingFileNameMap.set(fileNameMapKey, cliFile);\n }\n\n const {results: [{messages}]} =\n cliFile.executeOnText(src);\n\n if (!('line' in tag)) {\n tag.line = tag.source[0].number;\n }\n\n // NOTE: `tag.line` can be 0 if of form `/** @tag ... */`\n const codeStartLine = tag.line + nonJSPrefacingLines;\n const codeStartCol = likelyNestedJSDocIndentSpace;\n\n messages.forEach(({message, line, column, severity, ruleId}) => {\n const startLine = codeStartLine + line + zeroBasedLineIndexAdjust;\n const startCol = codeStartCol + (\n\n // This might not work for line 0, but line 0 is unlikely for examples\n line <= 1 ? nonJSPrefacingCols + firstLinePrefixLength : preTagSpaceLength\n ) + column;\n\n report(\n '@' + targetTagName + ' ' + (severity === 2 ? 'error' : 'warning') +\n (ruleId ? ' (' + ruleId + ')' : '') + ': ' +\n message,\n null,\n {\n column: startCol,\n line: startLine,\n },\n );\n });\n };\n\n sources.forEach(checkRules);\n };\n\n /**\n *\n * @param {string} filename\n * @param {string} [ext=\"md/*.js\"] Since `eslint-plugin-markdown` v2, and\n * ESLint 7, this is the default which other JS-fenced rules will used.\n * Formerly \"md\" was the default.\n * @returns {{defaultFileName: string, fileName: string}}\n */\n const getFilenameInfo = (filename, ext = 'md/*.js') => {\n let defaultFileName;\n if (!filename) {\n const jsFileName = context.getFilename();\n if (typeof jsFileName === 'string' && jsFileName.includes('.')) {\n defaultFileName = jsFileName.replace(/\\..*?$/, `.${ext}`);\n } else {\n defaultFileName = `dummy.${ext}`;\n }\n }\n\n return {\n defaultFileName,\n filename,\n };\n };\n\n if (checkDefaults) {\n const filenameInfo = getFilenameInfo(matchingFileNameDefaults, 'jsdoc-defaults');\n utils.forEachPreferredTag('default', (tag, targetTagName) => {\n if (!tag.description.trim()) {\n return;\n }\n checkSource({\n source: `(${tag.description})`,\n targetTagName,\n ...filenameInfo,\n });\n });\n }\n if (checkParams) {\n const filenameInfo = getFilenameInfo(matchingFileNameParams, 'jsdoc-params');\n utils.forEachPreferredTag('param', (tag, targetTagName) => {\n if (!tag.default || !tag.default.trim()) {\n return;\n }\n checkSource({\n source: `(${tag.default})`,\n targetTagName,\n ...filenameInfo,\n });\n });\n }\n if (checkProperties) {\n const filenameInfo = getFilenameInfo(matchingFileNameProperties, 'jsdoc-properties');\n utils.forEachPreferredTag('property', (tag, targetTagName) => {\n if (!tag.default || !tag.default.trim()) {\n return;\n }\n checkSource({\n source: `(${tag.default})`,\n targetTagName,\n ...filenameInfo,\n });\n });\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'example'});\n if (!utils.hasTag(tagName)) {\n return;\n }\n\n const matchingFilenameInfo = getFilenameInfo(matchingFileName);\n\n utils.forEachPreferredTag('example', (tag, targetTagName) => {\n let source = tag.source[0].tokens.postTag.slice(1) + tag.description;\n const match = source.match(hasCaptionRegex);\n\n if (captionRequired && (!match || !match[1].trim())) {\n report('Caption is expected for examples.', null, tag);\n }\n\n source = source.replace(hasCaptionRegex, '');\n const [lines, cols] = match ? getLinesCols(match[0]) : [0, 0];\n\n if (exampleCodeRegex && !exampleCodeRegex.test(source) ||\n rejectExampleCodeRegex && rejectExampleCodeRegex.test(source)\n ) {\n return;\n }\n\n const sources = [];\n let skipInit = false;\n if (exampleCodeRegex) {\n let nonJSPrefacingCols = 0;\n let nonJSPrefacingLines = 0;\n\n let startingIndex = 0;\n let lastStringCount = 0;\n\n let exampleCode;\n exampleCodeRegex.lastIndex = 0;\n while ((exampleCode = exampleCodeRegex.exec(source)) !== null) {\n const {index, 0: n0, 1: n1} = exampleCode;\n\n // Count anything preceding user regex match (can affect line numbering)\n const preMatch = source.slice(startingIndex, index);\n\n const [preMatchLines, colDelta] = getLinesCols(preMatch);\n\n let nonJSPreface;\n let nonJSPrefaceLineCount;\n if (n1) {\n const idx = n0.indexOf(n1);\n nonJSPreface = n0.slice(0, idx);\n nonJSPrefaceLineCount = countChars(nonJSPreface, '\\n');\n } else {\n nonJSPreface = '';\n nonJSPrefaceLineCount = 0;\n }\n\n nonJSPrefacingLines += lastStringCount + preMatchLines + nonJSPrefaceLineCount;\n\n // Ignore `preMatch` delta if newlines here\n if (nonJSPrefaceLineCount) {\n const charsInLastLine = nonJSPreface.slice(nonJSPreface.lastIndexOf('\\n') + 1).length;\n\n nonJSPrefacingCols += charsInLastLine;\n } else {\n nonJSPrefacingCols += colDelta + nonJSPreface.length;\n }\n\n const string = n1 || n0;\n sources.push({\n nonJSPrefacingCols,\n nonJSPrefacingLines,\n string,\n });\n startingIndex = exampleCodeRegex.lastIndex;\n lastStringCount = countChars(string, '\\n');\n if (!exampleCodeRegex.global) {\n break;\n }\n }\n skipInit = true;\n }\n\n checkSource({\n cols,\n lines,\n rules: mdRules,\n skipInit,\n source,\n sources,\n tag,\n targetTagName,\n ...matchingFilenameInfo,\n });\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that (JavaScript) examples within JSDoc adhere to ESLint rules.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-examples',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowInlineConfig: {\n default: true,\n type: 'boolean',\n },\n baseConfig: {\n type: 'object',\n },\n captionRequired: {\n default: false,\n type: 'boolean',\n },\n checkDefaults: {\n default: false,\n type: 'boolean',\n },\n checkEslintrc: {\n default: true,\n type: 'boolean',\n },\n checkParams: {\n default: false,\n type: 'boolean',\n },\n checkProperties: {\n default: false,\n type: 'boolean',\n },\n configFile: {\n type: 'string',\n },\n exampleCodeRegex: {\n type: 'string',\n },\n matchingFileName: {\n type: 'string',\n },\n matchingFileNameDefaults: {\n type: 'string',\n },\n matchingFileNameParams: {\n type: 'string',\n },\n matchingFileNameProperties: {\n type: 'string',\n },\n noDefaultExampleRules: {\n default: false,\n type: 'boolean',\n },\n paddedIndent: {\n default: 0,\n type: 'integer',\n },\n rejectExampleCodeRegex: {\n type: 'string',\n },\n reportUnusedDisableDirectives: {\n default: true,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkExamples.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/checkExamples.js"],"names":["zeroBasedLineIndexAdjust","likelyNestedJSDocIndentSpace","preTagSpaceLength","firstLinePrefixLength","hasCaptionRegex","escapeStringRegexp","str","replace","countChars","ch","match","RegExp","length","defaultMdRules","defaultExpressionRules","quotes","semi","strict","getLinesCols","text","matchLines","colDelta","slice","lastIndexOf","report","utils","context","globalState","has","set","Map","matchingFileNameMap","get","options","exampleCodeRegex","rejectExampleCodeRegex","checkDefaults","checkParams","checkProperties","noDefaultExampleRules","checkEslintrc","matchingFileName","matchingFileNameDefaults","matchingFileNameParams","matchingFileNameProperties","paddedIndent","baseConfig","configFile","allowInlineConfig","reportUnusedDisableDirectives","captionRequired","rulePaths","mdRules","undefined","expressionRules","getRegexFromString","checkSource","filename","defaultFileName","rules","lines","cols","skipInit","source","targetTagName","sources","tag","line","push","nonJSPrefacingCols","nonJSPrefacingLines","string","checkRules","cliConfig","useEslintrc","cliConfigStr","JSON","stringify","src","fileNameMapKey","file","cliFile","cli","CLIEngine","config","getConfigForFile","results","messages","executeOnText","number","codeStartLine","codeStartCol","forEach","message","column","severity","ruleId","startLine","startCol","getFilenameInfo","ext","jsFileName","getFilename","includes","filenameInfo","forEachPreferredTag","description","trim","getTagDescription","default","tagName","getPreferredTagName","hasTag","matchingFilenameInfo","test","startingIndex","lastStringCount","exampleCode","lastIndex","exec","index","n0","n1","preMatch","preMatchLines","nonJSPreface","nonJSPrefaceLineCount","idx","indexOf","charsInLastLine","global","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","type"],"mappings":"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","sourcesContent":["// Todo: When peerDeps bump to ESLint 7, see about replacing `CLIEngine`\n// with non-deprecated `ESLint` class:\n// https://github.com/eslint/eslint/blob/master/docs/user-guide/migrating-to-7.0.0.md#-the-cliengine-class-has-been-deprecated\nimport {\n CLIEngine,\n} from 'eslint';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst zeroBasedLineIndexAdjust = -1;\nconst likelyNestedJSDocIndentSpace = 1;\nconst preTagSpaceLength = 1;\n\n// If a space is present, we should ignore it\nconst firstLinePrefixLength = preTagSpaceLength;\n\nconst hasCaptionRegex = /^\\s*<caption>([\\s\\S]*?)<\\/caption>/u;\n\nconst escapeStringRegexp = (str) => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/gu, '\\\\$&');\n};\nconst countChars = (str, ch) => {\n return (str.match(new RegExp(escapeStringRegexp(ch), 'gu')) || []).length;\n};\n\nconst defaultMdRules = {\n // \"always\" newline rule at end unlikely in sample code\n 'eol-last': 0,\n\n // Wouldn't generally expect example paths to resolve relative to JS file\n 'import/no-unresolved': 0,\n\n // Snippets likely too short to always include import/export info\n 'import/unambiguous': 0,\n\n 'jsdoc/require-file-overview': 0,\n\n // The end of a multiline comment would end the comment the example is in.\n 'jsdoc/require-jsdoc': 0,\n\n // Unlikely to have inadvertent debugging within examples\n 'no-console': 0,\n\n // Often wish to start `@example` code after newline; also may use\n // empty lines for spacing\n 'no-multiple-empty-lines': 0,\n\n // Many variables in examples will be `undefined`\n 'no-undef': 0,\n\n // Common to define variables for clarity without always using them\n 'no-unused-vars': 0,\n\n // See import/no-unresolved\n 'node/no-missing-import': 0,\n 'node/no-missing-require': 0,\n\n // Can generally look nicer to pad a little even if code imposes more stringency\n 'padded-blocks': 0,\n};\n\nconst defaultExpressionRules = {\n ...defaultMdRules,\n 'chai-friendly/no-unused-expressions': 'off',\n 'no-new': 'off',\n 'no-unused-expressions': 'off',\n quotes: ['error', 'double'],\n semi: ['error', 'never'],\n strict: 'off',\n};\n\nconst getLinesCols = (text) => {\n const matchLines = countChars(text, '\\n');\n\n const colDelta = matchLines ?\n text.slice(text.lastIndexOf('\\n') + 1).length :\n text.length;\n\n return [matchLines, colDelta];\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n globalState,\n}) => {\n if (!globalState.has('checkExamples-matchingFileName')) {\n globalState.set('checkExamples-matchingFileName', new Map());\n }\n const matchingFileNameMap = globalState.get('checkExamples-matchingFileName');\n\n const options = context.options[0] || {};\n let {\n exampleCodeRegex = null,\n rejectExampleCodeRegex = null,\n } = options;\n const {\n checkDefaults = false,\n checkParams = false,\n checkProperties = false,\n noDefaultExampleRules = false,\n checkEslintrc = true,\n matchingFileName = null,\n matchingFileNameDefaults = null,\n matchingFileNameParams = null,\n matchingFileNameProperties = null,\n paddedIndent = 0,\n baseConfig = {},\n configFile,\n allowInlineConfig = true,\n reportUnusedDisableDirectives = true,\n captionRequired = false,\n } = options;\n\n // Make this configurable?\n const rulePaths = [];\n\n const mdRules = noDefaultExampleRules ? undefined : defaultMdRules;\n\n const expressionRules = noDefaultExampleRules ? undefined : defaultExpressionRules;\n\n if (exampleCodeRegex) {\n exampleCodeRegex = utils.getRegexFromString(exampleCodeRegex);\n }\n if (rejectExampleCodeRegex) {\n rejectExampleCodeRegex = utils.getRegexFromString(rejectExampleCodeRegex);\n }\n\n const checkSource = ({\n filename, defaultFileName,\n rules = expressionRules,\n lines = 0,\n cols = 0,\n skipInit, source, targetTagName, sources = [], tag = {line: 0},\n }) => {\n if (!skipInit) {\n sources.push({\n nonJSPrefacingCols: cols,\n nonJSPrefacingLines: lines,\n string: source,\n });\n }\n\n // Todo: Make fixable\n // Todo: Fix whitespace indent\n const checkRules = function ({\n nonJSPrefacingCols,\n nonJSPrefacingLines,\n string,\n }) {\n const cliConfig = {\n allowInlineConfig,\n baseConfig,\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: checkEslintrc,\n };\n const cliConfigStr = JSON.stringify(cliConfig);\n\n const src = paddedIndent ?\n string.replace(new RegExp(`(^|\\n) {${paddedIndent}}(?!$)`, 'gu'), '\\n') :\n string;\n\n // Programmatic ESLint API: https://eslint.org/docs/developer-guide/nodejs-api\n const fileNameMapKey = filename ?\n 'a' + cliConfigStr + filename :\n 'b' + cliConfigStr + defaultFileName;\n const file = filename || defaultFileName;\n let cliFile;\n if (matchingFileNameMap.has(fileNameMapKey)) {\n cliFile = matchingFileNameMap.get(fileNameMapKey);\n } else {\n const cli = new CLIEngine(cliConfig);\n let config;\n if (filename || checkEslintrc) {\n config = cli.getConfigForFile(file);\n }\n\n // We need a new instance to ensure that the rules that may only\n // be available to `file` (if it has its own `.eslintrc`),\n // will be defined.\n cliFile = new CLIEngine({\n allowInlineConfig,\n baseConfig: {\n ...baseConfig,\n ...config,\n },\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: false,\n });\n matchingFileNameMap.set(fileNameMapKey, cliFile);\n }\n\n const {results: [{messages}]} =\n cliFile.executeOnText(src);\n\n if (!('line' in tag)) {\n tag.line = tag.source[0].number;\n }\n\n // NOTE: `tag.line` can be 0 if of form `/** @tag ... */`\n const codeStartLine = tag.line + nonJSPrefacingLines;\n const codeStartCol = likelyNestedJSDocIndentSpace;\n\n messages.forEach(({message, line, column, severity, ruleId}) => {\n const startLine = codeStartLine + line + zeroBasedLineIndexAdjust;\n const startCol = codeStartCol + (\n\n // This might not work for line 0, but line 0 is unlikely for examples\n line <= 1 ? nonJSPrefacingCols + firstLinePrefixLength : preTagSpaceLength\n ) + column;\n\n report(\n '@' + targetTagName + ' ' + (severity === 2 ? 'error' : 'warning') +\n (ruleId ? ' (' + ruleId + ')' : '') + ': ' +\n message,\n null,\n {\n column: startCol,\n line: startLine,\n },\n );\n });\n };\n\n sources.forEach(checkRules);\n };\n\n /**\n *\n * @param {string} filename\n * @param {string} [ext=\"md/*.js\"] Since `eslint-plugin-markdown` v2, and\n * ESLint 7, this is the default which other JS-fenced rules will used.\n * Formerly \"md\" was the default.\n * @returns {{defaultFileName: string, fileName: string}}\n */\n const getFilenameInfo = (filename, ext = 'md/*.js') => {\n let defaultFileName;\n if (!filename) {\n const jsFileName = context.getFilename();\n if (typeof jsFileName === 'string' && jsFileName.includes('.')) {\n defaultFileName = jsFileName.replace(/\\..*?$/, `.${ext}`);\n } else {\n defaultFileName = `dummy.${ext}`;\n }\n }\n\n return {\n defaultFileName,\n filename,\n };\n };\n\n if (checkDefaults) {\n const filenameInfo = getFilenameInfo(matchingFileNameDefaults, 'jsdoc-defaults');\n utils.forEachPreferredTag('default', (tag, targetTagName) => {\n if (!tag.description.trim()) {\n return;\n }\n checkSource({\n source: `(${utils.getTagDescription(tag)})`,\n targetTagName,\n ...filenameInfo,\n });\n });\n }\n if (checkParams) {\n const filenameInfo = getFilenameInfo(matchingFileNameParams, 'jsdoc-params');\n utils.forEachPreferredTag('param', (tag, targetTagName) => {\n if (!tag.default || !tag.default.trim()) {\n return;\n }\n checkSource({\n source: `(${tag.default})`,\n targetTagName,\n ...filenameInfo,\n });\n });\n }\n if (checkProperties) {\n const filenameInfo = getFilenameInfo(matchingFileNameProperties, 'jsdoc-properties');\n utils.forEachPreferredTag('property', (tag, targetTagName) => {\n if (!tag.default || !tag.default.trim()) {\n return;\n }\n checkSource({\n source: `(${tag.default})`,\n targetTagName,\n ...filenameInfo,\n });\n });\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'example'});\n if (!utils.hasTag(tagName)) {\n return;\n }\n\n const matchingFilenameInfo = getFilenameInfo(matchingFileName);\n\n utils.forEachPreferredTag('example', (tag, targetTagName) => {\n let source = utils.getTagDescription(tag);\n const match = source.match(hasCaptionRegex);\n\n if (captionRequired && (!match || !match[1].trim())) {\n report('Caption is expected for examples.', null, tag);\n }\n\n source = source.replace(hasCaptionRegex, '');\n const [lines, cols] = match ? getLinesCols(match[0]) : [0, 0];\n\n if (exampleCodeRegex && !exampleCodeRegex.test(source) ||\n rejectExampleCodeRegex && rejectExampleCodeRegex.test(source)\n ) {\n return;\n }\n\n const sources = [];\n let skipInit = false;\n if (exampleCodeRegex) {\n let nonJSPrefacingCols = 0;\n let nonJSPrefacingLines = 0;\n\n let startingIndex = 0;\n let lastStringCount = 0;\n\n let exampleCode;\n exampleCodeRegex.lastIndex = 0;\n while ((exampleCode = exampleCodeRegex.exec(source)) !== null) {\n const {index, 0: n0, 1: n1} = exampleCode;\n\n // Count anything preceding user regex match (can affect line numbering)\n const preMatch = source.slice(startingIndex, index);\n\n const [preMatchLines, colDelta] = getLinesCols(preMatch);\n\n let nonJSPreface;\n let nonJSPrefaceLineCount;\n if (n1) {\n const idx = n0.indexOf(n1);\n nonJSPreface = n0.slice(0, idx);\n nonJSPrefaceLineCount = countChars(nonJSPreface, '\\n');\n } else {\n nonJSPreface = '';\n nonJSPrefaceLineCount = 0;\n }\n\n nonJSPrefacingLines += lastStringCount + preMatchLines + nonJSPrefaceLineCount;\n\n // Ignore `preMatch` delta if newlines here\n if (nonJSPrefaceLineCount) {\n const charsInLastLine = nonJSPreface.slice(nonJSPreface.lastIndexOf('\\n') + 1).length;\n\n nonJSPrefacingCols += charsInLastLine;\n } else {\n nonJSPrefacingCols += colDelta + nonJSPreface.length;\n }\n\n const string = n1 || n0;\n sources.push({\n nonJSPrefacingCols,\n nonJSPrefacingLines,\n string,\n });\n startingIndex = exampleCodeRegex.lastIndex;\n lastStringCount = countChars(string, '\\n');\n if (!exampleCodeRegex.global) {\n break;\n }\n }\n skipInit = true;\n }\n\n checkSource({\n cols,\n lines,\n rules: mdRules,\n skipInit,\n source,\n sources,\n tag,\n targetTagName,\n ...matchingFilenameInfo,\n });\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Ensures that (JavaScript) examples within JSDoc adhere to ESLint rules.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-examples',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowInlineConfig: {\n default: true,\n type: 'boolean',\n },\n baseConfig: {\n type: 'object',\n },\n captionRequired: {\n default: false,\n type: 'boolean',\n },\n checkDefaults: {\n default: false,\n type: 'boolean',\n },\n checkEslintrc: {\n default: true,\n type: 'boolean',\n },\n checkParams: {\n default: false,\n type: 'boolean',\n },\n checkProperties: {\n default: false,\n type: 'boolean',\n },\n configFile: {\n type: 'string',\n },\n exampleCodeRegex: {\n type: 'string',\n },\n matchingFileName: {\n type: 'string',\n },\n matchingFileNameDefaults: {\n type: 'string',\n },\n matchingFileNameParams: {\n type: 'string',\n },\n matchingFileNameProperties: {\n type: 'string',\n },\n noDefaultExampleRules: {\n default: false,\n type: 'boolean',\n },\n paddedIndent: {\n default: 0,\n type: 'integer',\n },\n rejectExampleCodeRegex: {\n type: 'string',\n },\n reportUnusedDisableDirectives: {\n default: true,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkExamples.js"}
|
|
@@ -25,26 +25,26 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
25
25
|
licensePattern = '/([^\n]*)/gu'
|
|
26
26
|
} = options;
|
|
27
27
|
utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {
|
|
28
|
-
const version = jsdocParameter.
|
|
28
|
+
const version = utils.getTagDescription(jsdocParameter).trim();
|
|
29
29
|
|
|
30
30
|
if (!version) {
|
|
31
31
|
report(`Missing JSDoc @${targetTagName}.`, null, jsdocParameter);
|
|
32
32
|
} else if (!_semver.default.valid(version)) {
|
|
33
|
-
report(`Invalid JSDoc @${targetTagName}: "${jsdocParameter
|
|
33
|
+
report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}".`, null, jsdocParameter);
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
36
|
utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {
|
|
37
|
-
const version = jsdocParameter.
|
|
37
|
+
const version = utils.getTagDescription(jsdocParameter).trim();
|
|
38
38
|
|
|
39
39
|
if (!version) {
|
|
40
40
|
report(`Missing JSDoc @${targetTagName}.`, null, jsdocParameter);
|
|
41
41
|
} else if (!_semver.default.valid(version)) {
|
|
42
|
-
report(`Invalid JSDoc @${targetTagName}: "${jsdocParameter
|
|
42
|
+
report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}".`, null, jsdocParameter);
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
45
|
utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {
|
|
46
46
|
const licenseRegex = utils.getRegexFromString(licensePattern, 'g');
|
|
47
|
-
const match = jsdocParameter.
|
|
47
|
+
const match = utils.getTagDescription(jsdocParameter).match(licenseRegex);
|
|
48
48
|
const license = match && match[1] || match[0];
|
|
49
49
|
|
|
50
50
|
if (!license.trim()) {
|
|
@@ -62,12 +62,12 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
64
|
utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {
|
|
65
|
-
const author = jsdocParameter.
|
|
65
|
+
const author = utils.getTagDescription(jsdocParameter).trim();
|
|
66
66
|
|
|
67
67
|
if (!author) {
|
|
68
68
|
report(`Missing JSDoc @${targetTagName}.`, null, jsdocParameter);
|
|
69
69
|
} else if (allowedAuthors && !allowedAuthors.includes(author)) {
|
|
70
|
-
report(`Invalid JSDoc @${targetTagName}: "${jsdocParameter
|
|
70
|
+
report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}"; expected one of ${allowedAuthors.join(', ')}.`, null, jsdocParameter);
|
|
71
71
|
}
|
|
72
72
|
});
|
|
73
73
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/checkValues.js"],"names":["utils","report","context","options","allowedLicenses","allowedAuthors","licensePattern","forEachPreferredTag","jsdocParameter","targetTagName","version","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/checkValues.js"],"names":["utils","report","context","options","allowedLicenses","allowedAuthors","licensePattern","forEachPreferredTag","jsdocParameter","targetTagName","version","getTagDescription","trim","semver","valid","licenseRegex","getRegexFromString","match","license","includes","join","author","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items","type","anyOf"],"mappings":"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","sourcesContent":["import semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n utils,\n report,\n context,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedLicenses = null,\n allowedAuthors = null,\n licensePattern = '/([^\\n]*)/gu',\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = utils.getTagDescription(jsdocParameter).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName}.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n const version = utils.getTagDescription(jsdocParameter).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName}.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n const match = utils.getTagDescription(jsdocParameter).match(licenseRegex);\n const license = match && match[1] || match[0];\n if (!license.trim()) {\n report(\n `Missing JSDoc @${targetTagName}.`,\n null,\n jsdocParameter,\n );\n } else if (allowedLicenses) {\n if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n } else {\n try {\n spdxExpressionParse(license);\n } catch {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n null,\n jsdocParameter,\n );\n }\n }\n });\n\n utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = utils.getTagDescription(jsdocParameter).trim();\n if (!author) {\n report(\n `Missing JSDoc @${targetTagName}.`,\n null,\n jsdocParameter,\n );\n } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-values',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n allowedLicenses: {\n anyOf: [\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n {\n type: 'boolean',\n },\n ],\n },\n licensePattern: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkValues.js"}
|
|
@@ -65,7 +65,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {
|
|
68
|
-
const description = (matchingJsdocTag.name + ' ' + matchingJsdocTag
|
|
68
|
+
const description = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();
|
|
69
69
|
|
|
70
70
|
if (hasOptionTag(targetTagName)) {
|
|
71
71
|
validateDescription(description, matchingJsdocTag);
|
|
@@ -81,12 +81,12 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
81
81
|
tagsWithoutNames
|
|
82
82
|
} = utils.getTagsByType(whitelistedTags);
|
|
83
83
|
tagsWithNames.some(tag => {
|
|
84
|
-
const description = _lodash.default.trimStart(tag
|
|
84
|
+
const description = _lodash.default.trimStart(utils.getTagDescription(tag), '- ').trim();
|
|
85
85
|
|
|
86
86
|
return validateDescription(description, tag);
|
|
87
87
|
});
|
|
88
88
|
tagsWithoutNames.some(tag => {
|
|
89
|
-
const description = (tag.name + ' ' + tag
|
|
89
|
+
const description = (tag.name + ' ' + utils.getTagDescription(tag)).trim();
|
|
90
90
|
return validateDescription(description, tag);
|
|
91
91
|
});
|
|
92
92
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","options","validateDescription","description","tag","mainDescription","tagValue","tagName","tags","regex","getRegexFromString","matchDescription","test","line","source","number","getDescription","replace","Object","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","_","trimStart","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","type","oneOf","format","patternProperties","enum"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA;AACA;AACA,MAAMA,uBAAuB,GAAG,6BAAhC;;AAEA,MAAMC,eAAe,GAAG,CAACC,KAAD,EAAQC,WAAR,KAAwB;AAC9C,SAAO,OAAOD,KAAP,KAAiB,QAAjB,GACLA,KADK,GAELC,WAAW,IAAIH,uBAFjB;AAGD,CAJD;;eAMe,2BAAa,CAAC;AAC3BI,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA,OAH2B;AAI3BC,EAAAA;AAJ2B,CAAD,KAKtB;AACJ,QAAMC,OAAO,GAAGF,OAAO,CAACE,OAAR,CAAgB,CAAhB,KAAsB,EAAtC;;AAEA,QAAMC,mBAAmB,GAAG,CAACC,WAAD,EAAcC,GAAd,KAAsB;AAChD,QAAI,CAACA,GAAD,IAAQH,OAAO,CAACI,eAAR,KAA4B,KAAxC,EAA+C;AAC7C;AACD;;AAED,QAAIC,QAAQ,GAAGL,OAAO,CAACI,eAAvB;;AACA,QAAID,GAAJ,EAAS;AACP,YAAMG,OAAO,GAAGH,GAAG,CAACA,GAApB;AACAE,MAAAA,QAAQ,GAAGL,OAAO,CAACO,IAAR,CAAaD,OAAb,CAAX;AACD;;AAED,UAAME,KAAK,GAAGT,KAAK,CAACU,kBAAN,CACZhB,eAAe,CAACY,QAAD,EAAWL,OAAO,CAACU,gBAAnB,CADH,CAAd;;AAIA,QAAI,CAACF,KAAK,CAACG,IAAN,CAAWT,WAAX,CAAL,EAA8B;AAC5BL,MAAAA,MAAM,CAAC,uDAAD,EAA0D,IAA1D,EAAgEM,GAAG,IAAI;AAC3E;AACAS,QAAAA,IAAI,EAAEhB,KAAK,CAACiB,MAAN,CAAa,CAAb,EAAgBC,MAAhB,GAAyB;AAF4C,OAAvE,CAAN;AAID;AACF,GArBD;;AAuBA,MAAIlB,KAAK,CAACM,WAAV,EAAuB;AACrB,UAAM;AAACA,MAAAA;AAAD,QAAgBH,KAAK,CAACgB,cAAN,EAAtB;AACAd,IAAAA,mBAAmB,CACjBC,WAAW,CAACc,OAAZ,CAAoB,MAApB,EAA4B,EAA5B,CADiB,CAAnB;AAGD;;AAED,MAAI,CAAChB,OAAO,CAACO,IAAT,IAAiB,CAACU,MAAM,CAACC,IAAP,CAAYlB,OAAO,CAACO,IAApB,EAA0BY,MAAhD,EAAwD;AACtD;AACD;;AAED,QAAMC,YAAY,GAAId,OAAD,IAAa;AAChC,WAAOe,OAAO,CAACrB,OAAO,CAACO,IAAR,CAAaD,OAAb,CAAD,CAAd;AACD,GAFD;;AAIAP,EAAAA,KAAK,CAACuB,mBAAN,CAA0B,aAA1B,EAAyC,CAACC,gBAAD,EAAmBC,aAAnB,KAAqC;AAC5E,UAAMtB,WAAW,GAAG,CAACqB,gBAAgB,CAACE,IAAjB,GAAwB,GAAxB,
|
|
1
|
+
{"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","options","validateDescription","description","tag","mainDescription","tagValue","tagName","tags","regex","getRegexFromString","matchDescription","test","line","source","number","getDescription","replace","Object","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","_","trimStart","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","type","oneOf","format","patternProperties","enum"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^[A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const options = context.options[0] || {};\n\n const validateDescription = (description, tag) => {\n if (!tag && options.mainDescription === false) {\n return;\n }\n\n let tagValue = options.mainDescription;\n if (tag) {\n const tagName = tag.tag;\n tagValue = options.tags[tagName];\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, options.matchDescription),\n );\n\n if (!regex.test(description)) {\n report('JSDoc description does not satisfy the regex pattern.', null, tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n });\n }\n };\n\n if (jsdoc.description) {\n const {description} = utils.getDescription();\n validateDescription(\n description.replace(/\\s+$/, ''),\n );\n }\n\n if (!options.tags || !Object.keys(options.tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(options.tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const description = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(description, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({tag: tagName}) => {\n return hasOptionTag(tagName);\n });\n const {tagsWithNames, tagsWithoutNames} = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const description = _.trimStart(utils.getTagDescription(tag), '- ').trim();\n\n return validateDescription(description, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const description = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(description, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [true],\n type: 'boolean',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchDescription.js"}
|
|
@@ -84,7 +84,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
functionExamples.forEach(example => {
|
|
87
|
-
if (!checkDescription(`${example.name} ${example
|
|
87
|
+
if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) {
|
|
88
88
|
report(`Missing JSDoc @${targetTagName} description.`);
|
|
89
89
|
}
|
|
90
90
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireDescription.js"],"names":["jsdoc","report","utils","context","avoidDocs","descriptionStyle","options","targetTagName","getPreferredTagName","skipReportingBlockedTag","tagName","isBlocked","blocked","checkDescription","description","exampleContent","_","compact","trim","split","length","getDescription","descTags","getPresentTags","tag","functionExamples","filter","tags","forEach","example","name","contextDefaults","meta","docs","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","checkSetters","contexts","items","enum","exemptedBy"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA,KAH2B;AAI3BC,EAAAA;AAJ2B,CAAD,KAKtB;AACJ,MAAID,KAAK,CAACE,SAAN,EAAJ,EAAuB;AACrB;AACD;;AACD,QAAM;AAACC,IAAAA,gBAAgB,GAAG;AAApB,MAA8BF,OAAO,CAACG,OAAR,CAAgB,CAAhB,KAAsB,EAA1D;AAEA,MAAIC,aAAa,GAAGL,KAAK,CAACM,mBAAN,CAA0B;AAC5C;AACA;AACA;AACA;AACAC,IAAAA,uBAAuB,EAAEJ,gBAAgB,KAAK,KALF;AAM5CK,IAAAA,OAAO,EAAE;AANmC,GAA1B,CAApB;;AAQA,MAAI,CAACH,aAAL,EAAoB;AAClB;AACD;;AACD,QAAMI,SAAS,GAAG,OAAOJ,aAAP,KAAyB,QAAzB,IAAqCA,aAAa,CAACK,OAArE;;AACA,MAAID,SAAJ,EAAe;AACbJ,IAAAA,aAAa,GAAGA,aAAa,CAACG,OAA9B;AACD;;AAED,QAAMG,gBAAgB,GAAIC,WAAD,IAAiB;AACxC,UAAMC,cAAc,GAAGC,gBAAEC,OAAF,CAAUH,WAAW,CAACI,IAAZ,GAAmBC,KAAnB,CAAyB,IAAzB,CAAV,CAAvB;;AAEA,WAAOJ,cAAc,CAACK,MAAtB;AACD,GAJD;;AAMA,MAAIf,gBAAgB,KAAK,KAAzB,EAAgC;AAC9B,UAAM;AAACS,MAAAA;AAAD,QAAgBZ,KAAK,CAACmB,cAAN,EAAtB;;AACA,QAAIR,gBAAgB,CAACC,WAAW,IAAI,EAAhB,CAApB,EAAyC;AACvC;AACD;;AAED,QAAIT,gBAAgB,KAAK,MAAzB,EAAiC;AAC/B,YAAMiB,QAAQ,GAAGpB,KAAK,CAACqB,cAAN,CAAqB,CAAC,MAAD,EAAS,aAAT,CAArB,CAAjB;;AACA,UAAID,QAAQ,CAACF,MAAb,EAAqB;AACnB,cAAM,CAAC;AAACI,UAAAA,GAAG,EAAEd;AAAN,SAAD,IAAmBY,QAAzB;AACArB,QAAAA,MAAM,CAAE,eAAcS,OAAQ,yFAAwFA,OAAQ,QAAxH,CAAN;AACD,OAHD,MAGO;AACLT,QAAAA,MAAM,CAAC,kCAAD,CAAN;AACD;;AAED;AACD;AACF;;AAED,QAAMwB,gBAAgB,GAAGd,SAAS,GAChC,EADgC,GAEhCK,gBAAEU,MAAF,CAAS1B,KAAK,CAAC2B,IAAf,EAAqB;AACnBH,IAAAA,GAAG,EAAEjB;AADc,GAArB,CAFF;;AAMA,MAAI,CAACkB,gBAAgB,CAACL,MAAtB,EAA8B;AAC5BnB,IAAAA,MAAM,CACJI,gBAAgB,KAAK,KAArB,GACG,uCAAsCE,aAAc,eADvD,GAEG,kBAAiBA,aAAc,eAH9B,CAAN;AAMA;AACD;;AAEDkB,EAAAA,gBAAgB,CAACG,OAAjB,CAA0BC,OAAD,IAAa;AACpC,QAAI,CAAChB,gBAAgB,CAAE,GAAEgB,OAAO,CAACC,IAAK,
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireDescription.js"],"names":["jsdoc","report","utils","context","avoidDocs","descriptionStyle","options","targetTagName","getPreferredTagName","skipReportingBlockedTag","tagName","isBlocked","blocked","checkDescription","description","exampleContent","_","compact","trim","split","length","getDescription","descTags","getPresentTags","tag","functionExamples","filter","tags","forEach","example","name","getTagDescription","contextDefaults","meta","docs","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","checkSetters","contexts","items","enum","exemptedBy"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n const {descriptionStyle = 'body'} = context.options[0] || {};\n\n let targetTagName = utils.getPreferredTagName({\n // We skip reporting except when `@description` is essential to the rule,\n // so user can block the tag and still meaningfully use this rule\n // even if the tag is present (and `check-tag-names` is the one to\n // normally report the fact that it is blocked but present)\n skipReportingBlockedTag: descriptionStyle !== 'tag',\n tagName: 'description',\n });\n if (!targetTagName) {\n return;\n }\n const isBlocked = typeof targetTagName === 'object' && targetTagName.blocked;\n if (isBlocked) {\n targetTagName = targetTagName.tagName;\n }\n\n const checkDescription = (description) => {\n const exampleContent = _.compact(description.trim().split('\\n'));\n\n return exampleContent.length;\n };\n\n if (descriptionStyle !== 'tag') {\n const {description} = utils.getDescription();\n if (checkDescription(description || '')) {\n return;\n }\n\n if (descriptionStyle === 'body') {\n const descTags = utils.getPresentTags(['desc', 'description']);\n if (descTags.length) {\n const [{tag: tagName}] = descTags;\n report(`Remove the @${tagName} tag to leave a plain block description or add additional description text above the @${tagName} line.`);\n } else {\n report('Missing JSDoc block description.');\n }\n\n return;\n }\n }\n\n const functionExamples = isBlocked ?\n [] :\n _.filter(jsdoc.tags, {\n tag: targetTagName,\n });\n\n if (!functionExamples.length) {\n report(\n descriptionStyle === 'any' ?\n `Missing JSDoc block description or @${targetTagName} declaration.` :\n `Missing JSDoc @${targetTagName} declaration.`,\n );\n\n return;\n }\n\n functionExamples.forEach((example) => {\n if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) {\n report(`Missing JSDoc @${targetTagName} description.`);\n }\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions have a description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n checkSetters: {\n default: true,\n type: 'boolean',\n },\n contexts: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n descriptionStyle: {\n enum: ['body', 'tag', 'any'],\n type: 'string',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireDescription.js"}
|
|
@@ -157,7 +157,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
utils.forEachPreferredTag('description', matchingJsdocTag => {
|
|
160
|
-
const desc = `${matchingJsdocTag.name} ${matchingJsdocTag
|
|
160
|
+
const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();
|
|
161
161
|
validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);
|
|
162
162
|
}, true);
|
|
163
163
|
const {
|
|
@@ -175,12 +175,12 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
175
175
|
});
|
|
176
176
|
});
|
|
177
177
|
tagsWithNames.some(tag => {
|
|
178
|
-
const desc = _lodash.default.trimStart(tag
|
|
178
|
+
const desc = _lodash.default.trimStart(utils.getTagDescription(tag), '- ').trimEnd();
|
|
179
179
|
|
|
180
180
|
return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);
|
|
181
181
|
});
|
|
182
182
|
tagsWithoutNames.some(tag => {
|
|
183
|
-
const desc = `${tag.name} ${tag
|
|
183
|
+
const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();
|
|
184
184
|
return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);
|
|
185
185
|
});
|
|
186
186
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"names":["otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replace","sentenceEndGrouping","puncts","map","punct","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","_","escapeRegExp","filter","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","context","jsdoc","utils","options","abbreviations","length","abbreviation","join","getDescription","forEachPreferredTag","matchingJsdocTag","desc","name","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimStart","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {\n RegExtras,\n} from 'regextras/dist/main-umd';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst otherDescriptiveTags = new Set([\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo',\n 'deprecated', 'throws', 'exception', 'yields', 'yield',\n]);\n\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n/u);\n};\n\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n\n // Remove all {} tags.\n .replace(/\\{[\\s\\S]*?\\}\\s*/gu, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/u;\n const puncts = RegExtras(sentenceEndGrouping).map(txt, (punct) => {\n return punct;\n });\n\n return txt\n\n .split(/[.?!](?:\\s+|$)/u)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return /^\\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\nconst isNewLinePrecededByAPeriod = (text) => {\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!|]$/u.test(line);\n\n return false;\n });\n};\n\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\nconst isTable = (str) => {\n return str.charAt() === '|';\n};\n\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description) {\n return false;\n }\n\n const paragraphs = extractParagraphs(description);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/u.test(paragraph)) {\n const line = paragraph.split('\\n').pop();\n\n text = text.replace(new RegExp(`${_.escapeRegExp(line)}$`, 'mu'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/u).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if (tag.tag) {\n const reg = new RegExp(`(@${_.escapeRegExp(tag.tag)}.*)${_.escapeRegExp(beginning)}`, 'u');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.!?]|\\\\*|\\\\})\\\\s*)' + _.escapeRegExp(beginning), 'u'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n tagObj.line += parIdx * 2;\n } else {\n tagObj.source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentence should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/[.!?|]\\s*$/u.test(paragraphNoAbbreviations)) {\n report('Sentence must end with a period.', fix, tag);\n\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n context,\n jsdoc,\n report,\n jsdocNode,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = options;\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return _.escapeRegExp(abbreviation.replace(/\\.$/g, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gu') :\n '';\n\n const {description} = utils.getDescription();\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${matchingJsdocTag.description}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {tagsWithNames} = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({tag: tagName}) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({tag}) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = _.trimStart(tag.description, '- ').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${tag.description}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description-complete-sentence',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireDescriptionCompleteSentence.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"names":["otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replace","sentenceEndGrouping","puncts","map","punct","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","_","escapeRegExp","filter","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","context","jsdoc","utils","options","abbreviations","length","abbreviation","join","getDescription","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimStart","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {\n RegExtras,\n} from 'regextras/dist/main-umd';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst otherDescriptiveTags = new Set([\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo',\n 'deprecated', 'throws', 'exception', 'yields', 'yield',\n]);\n\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n/u);\n};\n\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n\n // Remove all {} tags.\n .replace(/\\{[\\s\\S]*?\\}\\s*/gu, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/u;\n const puncts = RegExtras(sentenceEndGrouping).map(txt, (punct) => {\n return punct;\n });\n\n return txt\n\n .split(/[.?!](?:\\s+|$)/u)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return /^\\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\nconst isNewLinePrecededByAPeriod = (text) => {\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!|]$/u.test(line);\n\n return false;\n });\n};\n\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\nconst isTable = (str) => {\n return str.charAt() === '|';\n};\n\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description) {\n return false;\n }\n\n const paragraphs = extractParagraphs(description);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/u.test(paragraph)) {\n const line = paragraph.split('\\n').pop();\n\n text = text.replace(new RegExp(`${_.escapeRegExp(line)}$`, 'mu'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/u).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if (tag.tag) {\n const reg = new RegExp(`(@${_.escapeRegExp(tag.tag)}.*)${_.escapeRegExp(beginning)}`, 'u');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.!?]|\\\\*|\\\\})\\\\s*)' + _.escapeRegExp(beginning), 'u'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n tagObj.line += parIdx * 2;\n } else {\n tagObj.source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentence should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/[.!?|]\\s*$/u.test(paragraphNoAbbreviations)) {\n report('Sentence must end with a period.', fix, tag);\n\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n context,\n jsdoc,\n report,\n jsdocNode,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = options;\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return _.escapeRegExp(abbreviation.replace(/\\.$/g, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gu') :\n '';\n\n const {description} = utils.getDescription();\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {tagsWithNames} = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({tag: tagName}) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({tag}) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = _.trimStart(utils.getTagDescription(tag), '- ').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description-complete-sentence',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireDescriptionCompleteSentence.js"}
|
|
@@ -42,7 +42,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
functionExamples.forEach(example => {
|
|
45
|
-
const exampleContent = _lodash.default.compact(`${example.name} ${example
|
|
45
|
+
const exampleContent = _lodash.default.compact(`${example.name} ${utils.getTagDescription(example)}`.trim().split('\n'));
|
|
46
46
|
|
|
47
47
|
if (!exampleContent.length) {
|
|
48
48
|
report(`Missing JSDoc @${targetTagName} description.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireExample.js"],"names":["context","jsdoc","report","utils","avoidDocs","exemptNoArguments","options","targetTagName","functionExamples","_","filter","tags","tag","length","isIteratingFunction","hasParams","reportJSDoc","addTag","forEach","example","exampleContent","compact","name","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireExample.js"],"names":["context","jsdoc","report","utils","avoidDocs","exemptNoArguments","options","targetTagName","functionExamples","_","filter","tags","tag","length","isIteratingFunction","hasParams","reportJSDoc","addTag","forEach","example","exampleContent","compact","name","getTagDescription","trim","split","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","checkSetters","contexts","items","exemptedBy"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,OAD2B;AAE3BC,EAAAA,KAF2B;AAG3BC,EAAAA,MAH2B;AAI3BC,EAAAA;AAJ2B,CAAD,KAKtB;AACJ,MAAIA,KAAK,CAACC,SAAN,EAAJ,EAAuB;AACrB;AACD;;AAED,QAAM;AACJC,IAAAA,iBAAiB,GAAG;AADhB,MAEFL,OAAO,CAACM,OAAR,CAAgB,CAAhB,KAAsB,EAF1B;AAIA,QAAMC,aAAa,GAAG,SAAtB;;AAEA,QAAMC,gBAAgB,GAAGC,gBAAEC,MAAF,CAAST,KAAK,CAACU,IAAf,EAAqB;AAC5CC,IAAAA,GAAG,EAAEL;AADuC,GAArB,CAAzB;;AAIA,MAAI,CAACC,gBAAgB,CAACK,MAAtB,EAA8B;AAC5B,QAAIR,iBAAiB,IAAIF,KAAK,CAACW,mBAAN,EAArB,IACF,CAACX,KAAK,CAACY,SAAN,EADH,EAEE;AACA;AACD;;AAEDZ,IAAAA,KAAK,CAACa,WAAN,CAAmB,kBAAiBT,aAAc,eAAlD,EAAkE,IAAlE,EAAwE,MAAM;AAC5EJ,MAAAA,KAAK,CAACc,MAAN,CAAaV,aAAb;AACD,KAFD;AAIA;AACD;;AAEDC,EAAAA,gBAAgB,CAACU,OAAjB,CAA0BC,OAAD,IAAa;AACpC,UAAMC,cAAc,GAAGX,gBAAEY,OAAF,CAAW,GAAEF,OAAO,CAACG,IAAK,IAAGnB,KAAK,CAACoB,iBAAN,CAAwBJ,OAAxB,CAAiC,EAApD,CAAsDK,IAAtD,GAA6DC,KAA7D,CAAmE,IAAnE,CAAV,CAAvB;;AAEA,QAAI,CAACL,cAAc,CAACP,MAApB,EAA4B;AAC1BX,MAAAA,MAAM,CAAE,kBAAiBK,aAAc,eAAjC,CAAN;AACD;AACF,GAND;AAOD,CAzCc,EAyCZ;AACDmB,EAAAA,eAAe,EAAE,IADhB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,4CADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVC,QAAAA,iBAAiB,EAAE;AACjBC,UAAAA,OAAO,EAAE,IADQ;AAEjBC,UAAAA,IAAI,EAAE;AAFW,SADT;AAKVC,QAAAA,YAAY,EAAE;AACZF,UAAAA,OAAO,EAAE,KADG;AAEZC,UAAAA,IAAI,EAAE;AAFM,SALJ;AASVE,QAAAA,YAAY,EAAE;AACZH,UAAAA,OAAO,EAAE,KADG;AAEZC,UAAAA,IAAI,EAAE;AAFM,SATJ;AAaVG,QAAAA,QAAQ,EAAE;AACRC,UAAAA,KAAK,EAAE;AACLJ,YAAAA,IAAI,EAAE;AADD,WADC;AAIRA,UAAAA,IAAI,EAAE;AAJE,SAbA;AAmBVK,QAAAA,UAAU,EAAE;AACVD,UAAAA,KAAK,EAAE;AACLJ,YAAAA,IAAI,EAAE;AADD,WADG;AAIVA,UAAAA,IAAI,EAAE;AAJI,SAnBF;AAyBVhC,QAAAA,iBAAiB,EAAE;AACjB+B,UAAAA,OAAO,EAAE,KADQ;AAEjBC,UAAAA,IAAI,EAAE;AAFW;AAzBT,OAFd;AAgCEA,MAAAA,IAAI,EAAE;AAhCR,KADM,CANJ;AA0CJA,IAAAA,IAAI,EAAE;AA1CF;AAFL,CAzCY,C","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n exemptNoArguments = false,\n } = context.options[0] || {};\n\n const targetTagName = 'example';\n\n const functionExamples = _.filter(jsdoc.tags, {\n tag: targetTagName,\n });\n\n if (!functionExamples.length) {\n if (exemptNoArguments && utils.isIteratingFunction() &&\n !utils.hasParams()\n ) {\n return;\n }\n\n utils.reportJSDoc(`Missing JSDoc @${targetTagName} declaration.`, null, () => {\n utils.addTag(targetTagName);\n });\n\n return;\n }\n\n functionExamples.forEach((example) => {\n const exampleContent = _.compact(`${example.name} ${utils.getTagDescription(example)}`.trim().split('\\n'));\n\n if (!exampleContent.length) {\n report(`Missing JSDoc @${targetTagName} description.`);\n }\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions have examples.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-example',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: false,\n type: 'boolean',\n },\n checkSetters: {\n default: false,\n type: 'boolean',\n },\n contexts: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n exemptNoArguments: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireExample.js"}
|
|
@@ -23,12 +23,13 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
23
23
|
|
|
24
24
|
const checkHyphens = (jsdocTag, targetTagName, circumstance = mainCircumstance) => {
|
|
25
25
|
const always = !circumstance || circumstance === 'always';
|
|
26
|
+
const desc = utils.getTagDescription(jsdocTag);
|
|
26
27
|
|
|
27
|
-
if (!
|
|
28
|
+
if (!desc.trim()) {
|
|
28
29
|
return;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
const startsWithHyphen = /^\s*-/u.test(
|
|
32
|
+
const startsWithHyphen = /^\s*-/u.test(desc);
|
|
32
33
|
|
|
33
34
|
if (always) {
|
|
34
35
|
if (!startsWithHyphen) {
|
|
@@ -36,7 +37,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
36
37
|
const lineIndex = jsdocTag.line;
|
|
37
38
|
const sourceLines = sourceCode.getText(jsdocNode).split('\n'); // Get start index of description, accounting for multi-line descriptions
|
|
38
39
|
|
|
39
|
-
const description =
|
|
40
|
+
const description = desc.split('\n')[0];
|
|
40
41
|
const descriptionIndex = sourceLines[lineIndex].lastIndexOf(description);
|
|
41
42
|
const replacementLine = sourceLines[lineIndex].slice(0, descriptionIndex) + '- ' + description;
|
|
42
43
|
sourceLines.splice(lineIndex, 1, replacementLine);
|
|
@@ -46,8 +47,8 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
46
47
|
}
|
|
47
48
|
} else if (startsWithHyphen) {
|
|
48
49
|
report(`There must be no hyphen before @${targetTagName} description.`, fixer => {
|
|
49
|
-
const [unwantedPart] = /^\s*-\s*/u.exec(
|
|
50
|
-
const replacement = sourceCode.getText(jsdocNode).replace(
|
|
50
|
+
const [unwantedPart] = /^\s*-\s*/u.exec(desc);
|
|
51
|
+
const replacement = sourceCode.getText(jsdocNode).replace(desc, desc.slice(unwantedPart.length));
|
|
51
52
|
return fixer.replaceText(jsdocNode, replacement);
|
|
52
53
|
}, jsdocTag);
|
|
53
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireHyphenBeforeParamDescription.js"],"names":["sourceCode","utils","report","context","jsdoc","jsdocNode","mainCircumstance","tags","options","checkHyphens","jsdocTag","targetTagName","circumstance","always","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireHyphenBeforeParamDescription.js"],"names":["sourceCode","utils","report","context","jsdoc","jsdocNode","mainCircumstance","tags","options","checkHyphens","jsdocTag","targetTagName","circumstance","always","desc","getTagDescription","trim","startsWithHyphen","test","fixer","lineIndex","line","sourceLines","getText","split","description","descriptionIndex","lastIndexOf","replacementLine","slice","splice","replacement","join","replaceText","unwantedPart","exec","replace","length","forEachPreferredTag","tagEntries","Object","entries","forEach","tagName","preferredParamTag","getPreferredTagName","tag","some","tagNme","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type","additionalProperties","properties","anyOf","patternProperties"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,UAD2B;AAE3BC,EAAAA,KAF2B;AAG3BC,EAAAA,MAH2B;AAI3BC,EAAAA,OAJ2B;AAK3BC,EAAAA,KAL2B;AAM3BC,EAAAA;AAN2B,CAAD,KAOtB;AACJ,QAAM,CAACC,gBAAD,EAAmB;AAACC,IAAAA;AAAD,MAAS,EAA5B,IAAkCJ,OAAO,CAACK,OAAhD;;AAEA,QAAMC,YAAY,GAAG,CAACC,QAAD,EAAWC,aAAX,EAA0BC,YAAY,GAAGN,gBAAzC,KAA8D;AACjF,UAAMO,MAAM,GAAG,CAACD,YAAD,IAAiBA,YAAY,KAAK,QAAjD;AACA,UAAME,IAAI,GAAGb,KAAK,CAACc,iBAAN,CAAwBL,QAAxB,CAAb;;AACA,QAAI,CAACI,IAAI,CAACE,IAAL,EAAL,EAAkB;AAChB;AACD;;AAED,UAAMC,gBAAgB,GAAI,QAAD,CAAWC,IAAX,CAAgBJ,IAAhB,CAAzB;;AACA,QAAID,MAAJ,EAAY;AACV,UAAI,CAACI,gBAAL,EAAuB;AACrBf,QAAAA,MAAM,CAAE,kCAAiCS,aAAc,eAAjD,EAAkEQ,KAAD,IAAW;AAChF,gBAAMC,SAAS,GAAGV,QAAQ,CAACW,IAA3B;AACA,gBAAMC,WAAW,GAAGtB,UAAU,CAACuB,OAAX,CAAmBlB,SAAnB,EAA8BmB,KAA9B,CAAoC,IAApC,CAApB,CAFgF,CAIhF;;AACA,gBAAMC,WAAW,GAAGX,IAAI,CAACU,KAAL,CAAW,IAAX,EAAiB,CAAjB,CAApB;AACA,gBAAME,gBAAgB,GAAGJ,WAAW,CAACF,SAAD,CAAX,CAAuBO,WAAvB,CAAmCF,WAAnC,CAAzB;AAEA,gBAAMG,eAAe,GAAGN,WAAW,CAACF,SAAD,CAAX,CACrBS,KADqB,CACf,CADe,EACZH,gBADY,IACQ,IADR,GACeD,WADvC;AAEAH,UAAAA,WAAW,CAACQ,MAAZ,CAAmBV,SAAnB,EAA8B,CAA9B,EAAiCQ,eAAjC;AACA,gBAAMG,WAAW,GAAGT,WAAW,CAACU,IAAZ,CAAiB,IAAjB,CAApB;AAEA,iBAAOb,KAAK,CAACc,WAAN,CAAkB5B,SAAlB,EAA6B0B,WAA7B,CAAP;AACD,SAdK,EAcHrB,QAdG,CAAN;AAeD;AACF,KAlBD,MAkBO,IAAIO,gBAAJ,EAAsB;AAC3Bf,MAAAA,MAAM,CAAE,mCAAkCS,aAAc,eAAlD,EAAmEQ,KAAD,IAAW;AACjF,cAAM,CAACe,YAAD,IAAiB,YAAYC,IAAZ,CAAiBrB,IAAjB,CAAvB;AAEA,cAAMiB,WAAW,GAAG/B,UAAU,CAC3BuB,OADiB,CACTlB,SADS,EAEjB+B,OAFiB,CAETtB,IAFS,EAEHA,IAAI,CAACe,KAAL,CAAWK,YAAY,CAACG,MAAxB,CAFG,CAApB;AAIA,eAAOlB,KAAK,CAACc,WAAN,CAAkB5B,SAAlB,EAA6B0B,WAA7B,CAAP;AACD,OARK,EAQHrB,QARG,CAAN;AASD;AACF,GArCD;;AAuCAT,EAAAA,KAAK,CAACqC,mBAAN,CAA0B,OAA1B,EAAmC7B,YAAnC;;AACA,MAAIF,IAAJ,EAAU;AACR,UAAMgC,UAAU,GAAGC,MAAM,CAACC,OAAP,CAAelC,IAAf,CAAnB;AACAgC,IAAAA,UAAU,CAACG,OAAX,CAAmB,CAAC,CAACC,OAAD,EAAU/B,YAAV,CAAD,KAA6B;AAC9C,UAAI+B,OAAO,KAAK,GAAhB,EAAqB;AACnB,cAAMC,iBAAiB,GAAG3C,KAAK,CAAC4C,mBAAN,CAA0B;AAACF,UAAAA,OAAO,EAAE;AAAV,SAA1B,CAA1B;AACAvC,QAAAA,KAAK,CAACG,IAAN,CAAWmC,OAAX,CAAmB,CAAC;AAACI,UAAAA;AAAD,SAAD,KAAW;AAC5B,cAAIA,GAAG,KAAKF,iBAAR,IAA6BL,UAAU,CAACQ,IAAX,CAAgB,CAAC,CAACC,MAAD,CAAD,KAAc;AAC7D,mBAAOA,MAAM,KAAK,GAAX,IAAkBA,MAAM,KAAKF,GAApC;AACD,WAFgC,CAAjC,EAEI;AACF;AACD;;AACD7C,UAAAA,KAAK,CAACqC,mBAAN,CAA0BQ,GAA1B,EAA+B,CAACpC,QAAD,EAAWC,aAAX,KAA6B;AAC1DF,YAAAA,YAAY,CAACC,QAAD,EAAWC,aAAX,EAA0BC,YAA1B,CAAZ;AACD,WAFD;AAGD,SATD;AAWA;AACD;;AACDX,MAAAA,KAAK,CAACqC,mBAAN,CAA0BK,OAA1B,EAAmC,CAACjC,QAAD,EAAWC,aAAX,KAA6B;AAC9DF,QAAAA,YAAY,CAACC,QAAD,EAAWC,aAAX,EAA0BC,YAA1B,CAAZ;AACD,OAFD;AAGD,KAnBD;AAoBD;AACF,CAzEc,EAyEZ;AACDqC,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJ1B,MAAAA,WAAW,EAAE,oDADT;AAEJ2B,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,OAAX,CADR;AAEEC,MAAAA,IAAI,EAAE;AAFR,KADM,EAKN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVnD,QAAAA,IAAI,EAAE;AACJoD,UAAAA,KAAK,EAAE,CACL;AACEC,YAAAA,iBAAiB,EAAE;AACjB,oBAAM;AACJL,gBAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,OAAX,CADF;AAEJC,gBAAAA,IAAI,EAAE;AAFF;AADW,aADrB;AAOEA,YAAAA,IAAI,EAAE;AAPR,WADK,EAUL;AACED,YAAAA,IAAI,EAAE,CAAC,KAAD,CADR;AAEEC,YAAAA,IAAI,EAAE;AAFR,WAVK;AADH;AADI,OAFd;AAqBEA,MAAAA,IAAI,EAAE;AArBR,KALM,CANJ;AAmCJA,IAAAA,IAAI,EAAE;AAnCF;AAFL,CAzEY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n sourceCode,\n utils,\n report,\n context,\n jsdoc,\n jsdocNode,\n}) => {\n const [mainCircumstance, {tags} = {}] = context.options;\n\n const checkHyphens = (jsdocTag, targetTagName, circumstance = mainCircumstance) => {\n const always = !circumstance || circumstance === 'always';\n const desc = utils.getTagDescription(jsdocTag);\n if (!desc.trim()) {\n return;\n }\n\n const startsWithHyphen = (/^\\s*-/u).test(desc);\n if (always) {\n if (!startsWithHyphen) {\n report(`There must be a hyphen before @${targetTagName} description.`, (fixer) => {\n const lineIndex = jsdocTag.line;\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n\n // Get start index of description, accounting for multi-line descriptions\n const description = desc.split('\\n')[0];\n const descriptionIndex = sourceLines[lineIndex].lastIndexOf(description);\n\n const replacementLine = sourceLines[lineIndex]\n .slice(0, descriptionIndex) + '- ' + description;\n sourceLines.splice(lineIndex, 1, replacementLine);\n const replacement = sourceLines.join('\\n');\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n } else if (startsWithHyphen) {\n report(`There must be no hyphen before @${targetTagName} description.`, (fixer) => {\n const [unwantedPart] = /^\\s*-\\s*/u.exec(desc);\n\n const replacement = sourceCode\n .getText(jsdocNode)\n .replace(desc, desc.slice(unwantedPart.length));\n\n return fixer.replaceText(jsdocNode, replacement);\n }, jsdocTag);\n }\n };\n\n utils.forEachPreferredTag('param', checkHyphens);\n if (tags) {\n const tagEntries = Object.entries(tags);\n tagEntries.forEach(([tagName, circumstance]) => {\n if (tagName === '*') {\n const preferredParamTag = utils.getPreferredTagName({tagName: 'param'});\n jsdoc.tags.forEach(({tag}) => {\n if (tag === preferredParamTag || tagEntries.some(([tagNme]) => {\n return tagNme !== '*' && tagNme === tag;\n })) {\n return;\n }\n utils.forEachPreferredTag(tag, (jsdocTag, targetTagName) => {\n checkHyphens(jsdocTag, targetTagName, circumstance);\n });\n });\n\n return;\n }\n utils.forEachPreferredTag(tagName, (jsdocTag, targetTagName) => {\n checkHyphens(jsdocTag, targetTagName, circumstance);\n });\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires a hyphen before the `@param` description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-hyphen-before-param-description',\n },\n fixable: 'code',\n schema: [\n {\n enum: ['always', 'never'],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n anyOf: [\n {\n patternProperties: {\n '.*': {\n enum: ['always', 'never'],\n type: 'string',\n },\n },\n type: 'object',\n },\n {\n enum: ['any'],\n type: 'string',\n },\n ],\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"file":"requireHyphenBeforeParamDescription.js"}
|
package/dist/rules/validTypes.js
CHANGED
|
@@ -104,10 +104,10 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
104
104
|
};
|
|
105
105
|
|
|
106
106
|
if (tag.tag === 'borrows') {
|
|
107
|
-
const thisNamepath = tag.
|
|
107
|
+
const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '').trim();
|
|
108
108
|
|
|
109
|
-
if (!asExpression.test(tag
|
|
110
|
-
report(`@borrows must have an "as" expression. Found "${tag
|
|
109
|
+
if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {
|
|
110
|
+
report(`@borrows must have an "as" expression. Found "${utils.getTagDescription(tag)}"`, null, tag);
|
|
111
111
|
return;
|
|
112
112
|
}
|
|
113
113
|
|
|
@@ -145,7 +145,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
145
145
|
// `require-param-name` (`@property` would similarly seem to require one,
|
|
146
146
|
// but is handled by `require-property-name`)
|
|
147
147
|
|
|
148
|
-
if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && !['param', 'arg', 'argument', 'property', 'prop'].includes(tag.tag) && (tag.tag !== 'see' || !tag.
|
|
148
|
+
if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && !['param', 'arg', 'argument', 'property', 'prop'].includes(tag.tag) && (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))) {
|
|
149
149
|
const modeInfo = tagMustHaveNamePosition === true ? '' : ` in "${mode}" mode`;
|
|
150
150
|
report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);
|
|
151
151
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/validTypes.js"],"names":["asExpression","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tryParseIgnoreError","path","tags","forEach","tag","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","thisNamepath","description","replace","trim","test","thatNamepath","name","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","meta","docs","url","schema","additionalProperies","properties","default"],"mappings":"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","sourcesContent":["import {\n parse,\n} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {mode} = settings;\n\n const tryParseIgnoreError = (path) => {\n try {\n parse(path, {mode});\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n };\n\n // eslint-disable-next-line complexity\n jsdoc.tags.forEach((tag) => {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParseIgnoreError(namepath)) {\n return true;\n }\n let handled = false;\n\n if (tagName) {\n switch (tagName) {\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParseIgnoreError(`module:${namepath}`);\n }\n break;\n }\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if (['#', '.', '~'].includes(endChar)) {\n handled = tryParseIgnoreError(namepath.slice(0, -1));\n }\n break;\n }\n case 'borrows': {\n const startChar = namepath.charAt();\n if (['#', '.', '~'].includes(startChar)) {\n handled = tryParseIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n parse(type, {mode});\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n if (tag.tag === 'borrows') {\n const thisNamepath = tag.description.replace(asExpression, '').trim();\n\n if (!asExpression.test(tag.description) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${tag.description}\"`, null, tag);\n\n return;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n return;\n }\n\n const otherModeMaps = ['jsdoc', 'typescript', 'closure', 'permissive'].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n return;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n return;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !tag.description.includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n return;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n return;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n return;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n utils.parseClosureTemplateTag(tag).forEach((namepath) => {\n validNamepathParsing(namepath);\n });\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"validTypes.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/validTypes.js"],"names":["asExpression","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tryParseIgnoreError","path","tags","forEach","tag","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperies","properties","default"],"mappings":"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","sourcesContent":["import {\n parse,\n} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {mode} = settings;\n\n const tryParseIgnoreError = (path) => {\n try {\n parse(path, {mode});\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n };\n\n // eslint-disable-next-line complexity\n jsdoc.tags.forEach((tag) => {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParseIgnoreError(namepath)) {\n return true;\n }\n let handled = false;\n\n if (tagName) {\n switch (tagName) {\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParseIgnoreError(`module:${namepath}`);\n }\n break;\n }\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if (['#', '.', '~'].includes(endChar)) {\n handled = tryParseIgnoreError(namepath.slice(0, -1));\n }\n break;\n }\n case 'borrows': {\n const startChar = namepath.charAt();\n if (['#', '.', '~'].includes(startChar)) {\n handled = tryParseIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n parse(type, {mode});\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n if (tag.tag === 'borrows') {\n const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '').trim();\n\n if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n return;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n return;\n }\n\n const otherModeMaps = ['jsdoc', 'typescript', 'closure', 'permissive'].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n return;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n return;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n return;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n return;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n return;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n utils.parseClosureTemplateTag(tag).forEach((namepath) => {\n validNamepathParsing(namepath);\n });\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"validTypes.js"}
|
package/package.json
CHANGED