eslint-plugin-jsdoc 37.0.2 → 37.2.1
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 +36 -0
- package/dist/bin/generateRule.js +2 -4
- package/dist/bin/generateRule.js.map +1 -1
- package/dist/exportParser.js +10 -1
- package/dist/exportParser.js.map +1 -1
- package/dist/generateRule.js +2 -4
- package/dist/generateRule.js.map +1 -1
- package/dist/iterateJsdoc.js +10 -7
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +19 -16
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkExamples.js +1 -1
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkIndentation.js +3 -3
- package/dist/rules/checkIndentation.js.map +1 -1
- package/dist/rules/checkTagNames.js +2 -2
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js +4 -4
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/newlineAfterDescription.js +1 -3
- package/dist/rules/newlineAfterDescription.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +9 -12
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireDescription.js +8 -10
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +7 -8
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireExample.js +5 -6
- package/dist/rules/requireExample.js.map +1 -1
- package/dist/rules/requireJsdoc.js +4 -5
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js +1 -3
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireReturns.js +1 -1
- package/dist/rules/requireReturns.js.map +1 -1
- package/dist/rules/requireThrows.js +4 -5
- package/dist/rules/requireThrows.js.map +1 -1
- package/dist/rules/requireYields.js +2 -4
- package/dist/rules/requireYields.js.map +1 -1
- package/package.json +21 -18
package/README.md
CHANGED
|
@@ -1949,6 +1949,18 @@ function MyDecorator(options: { myOptions: number }) {
|
|
|
1949
1949
|
return (Base: Function) => {};
|
|
1950
1950
|
}
|
|
1951
1951
|
// "jsdoc/check-indentation": ["error"|"warn", {"excludeTags":["example","MyDecorator"]}]
|
|
1952
|
+
|
|
1953
|
+
/**
|
|
1954
|
+
* @example ```
|
|
1955
|
+
* @MyDecorator({
|
|
1956
|
+
* myOptions: 42
|
|
1957
|
+
* })
|
|
1958
|
+
* export class MyClass {}
|
|
1959
|
+
* ```
|
|
1960
|
+
*/
|
|
1961
|
+
function MyDecorator(options: { myOptions: number }) {
|
|
1962
|
+
return (Base: Function) => {};
|
|
1963
|
+
}
|
|
1952
1964
|
````
|
|
1953
1965
|
|
|
1954
1966
|
|
|
@@ -8825,6 +8837,16 @@ function foo(): void {
|
|
|
8825
8837
|
function foo() {
|
|
8826
8838
|
//
|
|
8827
8839
|
}
|
|
8840
|
+
|
|
8841
|
+
/**
|
|
8842
|
+
* **Bold**
|
|
8843
|
+
*/
|
|
8844
|
+
|
|
8845
|
+
/**
|
|
8846
|
+
* Preserve user's bold statement when fixing.
|
|
8847
|
+
*
|
|
8848
|
+
* **Bold example:** Hi there.
|
|
8849
|
+
*/
|
|
8828
8850
|
````
|
|
8829
8851
|
|
|
8830
8852
|
|
|
@@ -12960,6 +12982,20 @@ export class InovaAutoCompleteComponent {
|
|
|
12960
12982
|
}
|
|
12961
12983
|
// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["PropertyDefinition"],"publicOnly":true}]
|
|
12962
12984
|
// Message: Missing JSDoc comment.
|
|
12985
|
+
|
|
12986
|
+
export default (arg) => arg;
|
|
12987
|
+
// "jsdoc/require-jsdoc": ["error"|"warn", {"publicOnly":true,"require":{"ArrowFunctionExpression":true,"ClassDeclaration":true,"ClassExpression":true,"FunctionDeclaration":true,"FunctionExpression":true,"MethodDefinition":true}}]
|
|
12988
|
+
// Message: Missing JSDoc comment.
|
|
12989
|
+
|
|
12990
|
+
export function outer() {
|
|
12991
|
+
function inner() {
|
|
12992
|
+
console.log('foo');
|
|
12993
|
+
}
|
|
12994
|
+
|
|
12995
|
+
inner();
|
|
12996
|
+
}
|
|
12997
|
+
// "jsdoc/require-jsdoc": ["error"|"warn", {"publicOnly":true,"require":{"ArrowFunctionExpression":true,"ClassDeclaration":true,"ClassExpression":true,"FunctionDeclaration":true,"FunctionExpression":true,"MethodDefinition":true}}]
|
|
12998
|
+
// Message: Missing JSDoc comment.
|
|
12963
12999
|
````
|
|
12964
13000
|
|
|
12965
13001
|
The following patterns are not considered problems:
|
package/dist/bin/generateRule.js
CHANGED
|
@@ -6,7 +6,7 @@ var _promises = _interopRequireDefault(require("fs/promises"));
|
|
|
6
6
|
|
|
7
7
|
var _path = require("path");
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _camelcase = _interopRequireDefault(require("camelcase"));
|
|
10
10
|
|
|
11
11
|
var _openEditor = _interopRequireDefault(require("open-editor"));
|
|
12
12
|
|
|
@@ -68,9 +68,7 @@ export default iterateJsdoc(({
|
|
|
68
68
|
},
|
|
69
69
|
});
|
|
70
70
|
`;
|
|
71
|
-
|
|
72
|
-
const camelCasedRuleName = _lodash.default.camelCase(ruleName);
|
|
73
|
-
|
|
71
|
+
const camelCasedRuleName = (0, _camelcase.default)(ruleName);
|
|
74
72
|
const rulePath = `./src/rules/${camelCasedRuleName}.js`;
|
|
75
73
|
|
|
76
74
|
if (!(0, _fs.existsSync)(rulePath)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","_","camelCase","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":"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","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport _ from 'lodash';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.\n\nconst [, , ruleName, ...options] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/u).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = _.camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [{\n line: '',\n message: '',\n }],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `### \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({path, oldRegex, checkName, newLine, oldIsCamel}) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {oldRule}) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({oldRule}, {oldRule: oldRuleB}) => {\n // eslint-disable-next-line no-extra-parens\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({oldRule}) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = offsets.pop();\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n await replaceInOrder({\n checkName: 'README',\n newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(__dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"file":"generateRule.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":"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","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.\n\nconst [, , ruleName, ...options] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/u).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [{\n line: '',\n message: '',\n }],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `### \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({path, oldRegex, checkName, newLine, oldIsCamel}) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {oldRule}) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({oldRule}, {oldRule: oldRuleB}) => {\n // eslint-disable-next-line no-extra-parens\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({oldRule}) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = offsets.pop();\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n await replaceInOrder({\n checkName: 'README',\n newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(__dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"file":"generateRule.js"}
|
package/dist/exportParser.js
CHANGED
|
@@ -468,13 +468,20 @@ const exportTypes = new Set(['ExportNamedDeclaration', 'ExportDefaultDeclaration
|
|
|
468
468
|
|
|
469
469
|
const getExportAncestor = function (nde) {
|
|
470
470
|
let node = nde;
|
|
471
|
+
let idx = 0;
|
|
471
472
|
|
|
472
473
|
while (node) {
|
|
474
|
+
// Ignore functions nested more deeply than say `export default function () {}`
|
|
475
|
+
if (idx >= 2 && nde.type === 'FunctionDeclaration') {
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
478
|
+
|
|
473
479
|
if (exportTypes.has(node.type)) {
|
|
474
480
|
return node;
|
|
475
481
|
}
|
|
476
482
|
|
|
477
483
|
node = node.parent;
|
|
484
|
+
idx++;
|
|
478
485
|
}
|
|
479
486
|
|
|
480
487
|
return false;
|
|
@@ -596,7 +603,9 @@ const isUncommentedExport = function (node, sourceCode, opt, settings) {
|
|
|
596
603
|
if (exportNode && !(0, _jsdoccomment.findJSDocComment)(exportNode, sourceCode, settings)) {
|
|
597
604
|
return true;
|
|
598
605
|
}
|
|
599
|
-
/**
|
|
606
|
+
/**
|
|
607
|
+
* Some typescript types are not in variable map, but inherit exported (interface property and method)
|
|
608
|
+
*/
|
|
600
609
|
|
|
601
610
|
|
|
602
611
|
if (isExportByAncestor(node) && !(0, _jsdoccomment.findJSDocComment)(node, sourceCode, settings)) {
|
package/dist/exportParser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","method","body","key","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","getExportAncestor","nde","has","parent","canExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","parseResult"],"mappings":"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","sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {value: node.name};\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\n\n// eslint-disable-next-line complexity\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration': case 'ClassExpression':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n }\n\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n// Populates variable maps using AST\n// eslint-disable-next-line complexity\nconst mapVariables = function (node, globals, opt, isExport) {\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {props = block.body} = block;\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set(['ExportNamedDeclaration', 'ExportDefaultDeclaration']);\nconst getExportAncestor = function (nde) {\n let node = nde;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\nconst canExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\nconst isExportByAncestor = function (nde) {\n if (!canExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {props} = block;\n for (const propval of Object.values(props)) {\n blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\nconst isNodeExported = function (node, globals, opt) {\n if (\n opt.initModuleExports && globals.props.module && globals.props.module.props.exports &&\n findNode(node, globals.props.module.props.exports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /** Some typescript types are not in variable map, but inherit exported (interface property and method)*/\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"file":"exportParser.js"}
|
|
1
|
+
{"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","method","body","key","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","getExportAncestor","nde","idx","has","parent","canExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","parseResult"],"mappings":"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","sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {value: node.name};\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\n\n// eslint-disable-next-line complexity\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration': case 'ClassExpression':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n }\n\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n// Populates variable maps using AST\n// eslint-disable-next-line complexity\nconst mapVariables = function (node, globals, opt, isExport) {\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {props = block.body} = block;\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set(['ExportNamedDeclaration', 'ExportDefaultDeclaration']);\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && nde.type === 'FunctionDeclaration') {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\nconst isExportByAncestor = function (nde) {\n if (!canExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {props} = block;\n for (const propval of Object.values(props)) {\n blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\nconst isNodeExported = function (node, globals, opt) {\n if (\n opt.initModuleExports && globals.props.module && globals.props.module.props.exports &&\n findNode(node, globals.props.module.props.exports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"file":"exportParser.js"}
|
package/dist/generateRule.js
CHANGED
|
@@ -6,7 +6,7 @@ var _promises = _interopRequireDefault(require("fs/promises"));
|
|
|
6
6
|
|
|
7
7
|
var _path = require("path");
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _camelcase = _interopRequireDefault(require("camelcase"));
|
|
10
10
|
|
|
11
11
|
var _openEditor = _interopRequireDefault(require("open-editor"));
|
|
12
12
|
|
|
@@ -68,9 +68,7 @@ export default iterateJsdoc(({
|
|
|
68
68
|
},
|
|
69
69
|
});
|
|
70
70
|
`;
|
|
71
|
-
|
|
72
|
-
const camelCasedRuleName = _lodash.default.camelCase(ruleName);
|
|
73
|
-
|
|
71
|
+
const camelCasedRuleName = (0, _camelcase.default)(ruleName);
|
|
74
72
|
const rulePath = `./src/rules/${camelCasedRuleName}.js`;
|
|
75
73
|
|
|
76
74
|
if (!(0, _fs.existsSync)(rulePath)) {
|
package/dist/generateRule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","_","camelCase","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":"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","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport _ from 'lodash';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.\n\nconst [, , ruleName, ...options] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/u).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = _.camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [{\n line: '',\n message: '',\n }],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `### \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({path, oldRegex, checkName, newLine, oldIsCamel}) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {oldRule}) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({oldRule}, {oldRule: oldRuleB}) => {\n // eslint-disable-next-line no-extra-parens\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({oldRule}) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = offsets.pop();\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n await replaceInOrder({\n checkName: 'README',\n newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(__dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"file":"generateRule.js"}
|
|
1
|
+
{"version":3,"sources":["../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":"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","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.\n\nconst [, , ruleName, ...options] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/u).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [{\n line: '',\n message: '',\n }],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `### \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({path, oldRegex, checkName, newLine, oldIsCamel}) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {oldRule}) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({oldRule}, {oldRule: oldRuleB}) => {\n // eslint-disable-next-line no-extra-parens\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({oldRule}) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = offsets.pop();\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n await replaceInOrder({\n checkName: 'README',\n newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(__dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"file":"generateRule.js"}
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -16,12 +16,11 @@ var _jsdoccomment = require("@es-joy/jsdoccomment");
|
|
|
16
16
|
|
|
17
17
|
var _commentParser = require("comment-parser");
|
|
18
18
|
|
|
19
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
20
|
-
|
|
21
19
|
var _jsdocUtils = _interopRequireDefault(require("./jsdocUtils"));
|
|
22
20
|
|
|
23
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
24
22
|
|
|
23
|
+
/* eslint-disable jsdoc/valid-types */
|
|
25
24
|
const {
|
|
26
25
|
rewireSpecs,
|
|
27
26
|
seedTokens
|
|
@@ -369,7 +368,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
|
|
|
369
368
|
if (postName) {
|
|
370
369
|
postName = '';
|
|
371
370
|
} else if (postType) {
|
|
372
|
-
postType = ''; // eslint-disable-next-line
|
|
371
|
+
postType = ''; // eslint-disable-next-line no-inline-comments
|
|
373
372
|
} else
|
|
374
373
|
/* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */
|
|
375
374
|
if (postTag) {
|
|
@@ -644,8 +643,10 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
|
|
|
644
643
|
return;
|
|
645
644
|
}
|
|
646
645
|
|
|
647
|
-
const matchingJsdocTags =
|
|
648
|
-
tag
|
|
646
|
+
const matchingJsdocTags = jsdoc.tags.filter(({
|
|
647
|
+
tag
|
|
648
|
+
}) => {
|
|
649
|
+
return tag === targetTagName;
|
|
649
650
|
});
|
|
650
651
|
|
|
651
652
|
for (const matchingJsdocTag of matchingJsdocTags) {
|
|
@@ -777,8 +778,10 @@ const iterate = (info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, nod
|
|
|
777
778
|
return;
|
|
778
779
|
}
|
|
779
780
|
|
|
780
|
-
if (!ruleConfig.checkPrivate && settings.ignorePrivate && (utils.hasTag('private') ||
|
|
781
|
-
tag
|
|
781
|
+
if (!ruleConfig.checkPrivate && settings.ignorePrivate && (utils.hasTag('private') || jsdoc.tags.filter(({
|
|
782
|
+
tag
|
|
783
|
+
}) => {
|
|
784
|
+
return tag === 'access';
|
|
782
785
|
}).some(({
|
|
783
786
|
description
|
|
784
787
|
}) => {
|