eslint-plugin-jsdoc 43.0.1 → 43.0.3

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 CHANGED
@@ -23481,6 +23481,13 @@ function processSass (input) {
23481
23481
  function processSass (input) {
23482
23482
  }
23483
23483
  // "jsdoc/tag-lines": ["error"|"warn", "never",{"startLines":1}]
23484
+
23485
+ /**
23486
+ * Toggles the deselect all icon button action
23487
+ */
23488
+ function updateIconButton () {
23489
+ }
23490
+ // "jsdoc/tag-lines": ["error"|"warn", "never",{"startLines":1}]
23484
23491
  ````
23485
23492
 
23486
23493
 
@@ -7,7 +7,13 @@ var _camelcase = _interopRequireDefault(require("camelcase"));
7
7
  var _openEditor = _interopRequireDefault(require("open-editor"));
8
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
9
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* eslint-disable no-console -- CLI */ /**
11
+ * @example
12
+ *
13
+ * ```shell
14
+ * npm run create-rule my-new-rule -- --recommended
15
+ * ```
16
+ */
11
17
  // Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.
12
18
 
13
19
  const [,, ruleName, ...options] = process.argv;
@@ -1 +1 @@
1
- {"version":3,"file":"generateRule.js","names":["_fs","require","_promises","_interopRequireDefault","_path","_camelcase","_openEditor","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","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","Promise","resolve","then","chdir","__dirname","open"],"sources":["../../src/bin/generateRule.js"],"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 [\n , , ruleName,\n ...options\n] = 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 additionalProperties: 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 {\n line: 2,\n message: '',\n },\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 ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\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(({\n oldRule,\n }) => {\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(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'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"],"mappings":"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"}
1
+ {"version":3,"file":"generateRule.js","names":["_fs","require","_promises","_interopRequireDefault","_path","_camelcase","_openEditor","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","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","Promise","resolve","then","chdir","__dirname","open"],"sources":["../../src/bin/generateRule.js"],"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 [\n , , ruleName,\n ...options\n] = 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 additionalProperties: 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 {\n line: 2,\n message: '',\n },\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 ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\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(({\n oldRule,\n }) => {\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(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'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"],"mappings":";;AAUA,IAAAA,GAAA,GAAAC,OAAA;AAGA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAGA,IAAAI,UAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,WAAA,GAAAH,sBAAA,CAAAF,OAAA;AAA+B,SAAAE,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAI,wBAAAR,GAAA,EAAAI,WAAA,SAAAA,WAAA,IAAAJ,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAS,KAAA,GAAAN,wBAAA,CAAAC,WAAA,OAAAK,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAV,GAAA,YAAAS,KAAA,CAAAE,GAAA,CAAAX,GAAA,SAAAY,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAjB,GAAA,QAAAiB,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAApB,GAAA,EAAAiB,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAhB,GAAA,EAAAiB,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAjB,GAAA,CAAAiB,GAAA,SAAAL,MAAA,CAAAV,OAAA,GAAAF,GAAA,MAAAS,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAtB,GAAA,EAAAY,MAAA,YAAAA,MAAA,IAlB/B,uCAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;;AAEA,MAAM,IACAW,QAAQ,EACZ,GAAGC,OAAO,CACX,GAAGC,OAAO,CAACC,IAAI;AAEhB,MAAMC,WAAW,GAAGH,OAAO,CAACI,QAAQ,CAAC,eAAe,CAAC;AAErD,CAAC,YAAY;EACX,IAAI,CAACL,QAAQ,EAAE;IACbM,OAAO,CAACC,KAAK,CAAC,2BAA2B,CAAC;IAE1C;EACF;EAEA,IAAK,QAAQ,CAAEC,IAAI,CAACR,QAAQ,CAAC,EAAE;IAC7BM,OAAO,CAACC,KAAK,CAAC,+CAA+C,CAAC;IAE9D;EACF;EAEA,MAAME,aAAa,GAAG,6BAA6B;EACnD,MAAMC,SAAS,GAAGC,IAAI,CAACC,KAAK,CAAC,MAAMC,iBAAE,CAACC,QAAQ,CAC5CL,aAAa,EAAE,MAAM,CACtB,CAAC;EACF,IAAI,CAACC,SAAS,CAACL,QAAQ,CAACL,QAAQ,CAAC,EAAE;IACjCU,SAAS,CAACK,IAAI,CAACf,QAAQ,CAAC;IACxBU,SAAS,CAACM,IAAI,EAAE;EAClB;EAEA,MAAMH,iBAAE,CAACI,SAAS,CAACR,aAAa,EAAEE,IAAI,CAACO,SAAS,CAACR,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;EAC5EJ,OAAO,CAACa,GAAG,CAAC,WAAW,EAAET,SAAS,CAAC;EAEnC,MAAMU,YAAY,GAAI;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqFpB,QAAS;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;EAEC,MAAMqB,kBAAkB,GAAG,IAAAC,kBAAS,EAACtB,QAAQ,CAAC;EAE9C,MAAMuB,QAAQ,GAAI,eAAcF,kBAAmB,KAAI;EAEvD,IAAI,CAAC,IAAAG,cAAU,EAACD,QAAQ,CAAC,EAAE;IACzB,MAAMV,iBAAE,CAACI,SAAS,CAACM,QAAQ,EAAEH,YAAY,CAAC;EAC5C;EAEA,MAAMK,gBAAgB,GAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;EAEC,MAAMC,YAAY,GAAI,2BAA0BL,kBAAmB,KAAI;EACvE,IAAI,CAAC,IAAAG,cAAU,EAACE,YAAY,CAAC,EAAE;IAC7B,MAAMb,iBAAE,CAACI,SAAS,CAACS,YAAY,EAAED,gBAAgB,CAAC;EACpD;EAEA,MAAME,kBAAkB,GAAI,SAAQ3B,QAAS;AAC/C;AACA;AACA;AACA;AACA;AACA,eAAeI,WAAW,GAAG,MAAM,GAAG,OAAQ;AAC9C;AACA;AACA;AACA,kBAAkBiB,kBAAmB;AACrC,CAAC;EAEC,MAAMO,cAAc,GAAI,mBAAkB5B,QAAS,KAAI;EACvD,IAAI,CAAC,IAAAwB,cAAU,EAACI,cAAc,CAAC,EAAE;IAC/B,MAAMf,iBAAE,CAACI,SAAS,CAACW,cAAc,EAAED,kBAAkB,CAAC;EACxD;EAEA,MAAME,cAAc,GAAG,MAAAA,CAAO;IAC5BC,IAAI;IACJC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC;EACF,CAAC,KAAK;IACJ,MAAMC,OAAO,GAAG,EAAE;IAElB,IAAIC,MAAM,GAAG,MAAMvB,iBAAE,CAACC,QAAQ,CAACgB,IAAI,EAAE,MAAM,CAAC;IAC5CM,MAAM,CAACC,OAAO,CACZN,QAAQ,EACR,CAACO,WAAW,EAAEC,EAAE,EAAEC,MAAM,EAAEC,GAAG,EAAE;MAC7BC;IACF,CAAC,KAAK;MACJP,OAAO,CAACpB,IAAI,CAAC;QACXuB,WAAW;QACXE,MAAM;QACNE;MACF,CAAC,CAAC;IACJ,CAAC,CACF;IAEDP,OAAO,CAACnB,IAAI,CAAC,CAAC;MACZ0B;IACF,CAAC,EAAE;MACDA,OAAO,EAAEC;IACX,CAAC,KAAK;MACJ;MACA,OAAOD,OAAO,GAAGC,QAAQ,GAAG,CAAC,CAAC,GAAID,OAAO,GAAGC,QAAQ,GAAG,CAAC,GAAG,CAAE;IAC/D,CAAC,CAAC;IAEF,IAAIC,eAAe,GAAG,KAAK;IAC3B,MAAMC,SAAS,GAAGV,OAAO,CAACW,SAAS,CAAC,CAAC;MACnCJ;IACF,CAAC,KAAK;MACJE,eAAe,KAAfA,eAAe,GAAKV,UAAU,GAAGb,kBAAkB,KAAKqB,OAAO,GAAG1C,QAAQ,KAAK0C,OAAO;MAEtF,OAAOR,UAAU,GAAGb,kBAAkB,GAAGqB,OAAO,GAAG1C,QAAQ,GAAG0C,OAAO;IACvE,CAAC,CAAC;IACF,IAAIK,IAAI,GAAGF,SAAS,KAAKG,SAAS,IAAIb,OAAO,CAACU,SAAS,CAAC;IACxD,IAAIE,IAAI,IAAIF,SAAS,KAAK,CAAC;IAEzB;IACAX,UAAU,EACV;MACAa,IAAI,CAACP,MAAM,GAAG,CAAC;IACjB;IAEA,IAAI,CAACO,IAAI,EAAE;MACTA,IAAI,GAAGZ,OAAO,CAACc,GAAG,EAAE;MACpBF,IAAI,CAACP,MAAM,IAAIO,IAAI,CAACT,WAAW,CAACY,MAAM;IACxC;IAEA,IAAIN,eAAe,EAAE;MACnBtC,OAAO,CAACa,GAAG,CAAE,mCAAkCa,SAAU,GAAE,CAAC;IAC9D,CAAC,MAAM;MACLI,MAAM,GAAGA,MAAM,CAACe,KAAK,CAAC,CAAC,EAAEJ,IAAI,CAACP,MAAM,CAAC,IAC1BO,IAAI,CAACP,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC,GACzBP,OAAO,IACNc,IAAI,CAACP,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,GACzBJ,MAAM,CAACe,KAAK,CAACJ,IAAI,CAACP,MAAM,CAAC;MAEnC,MAAM3B,iBAAE,CAACI,SAAS,CAACa,IAAI,EAAEM,MAAM,CAAC;IAClC;EACF,CAAC;EAED,MAAMP,cAAc,CAAC;IACnBG,SAAS,EAAE,QAAQ;IACnBC,OAAO,EAAG,2CAA0CjC,QAAS,OAAM;IACnE+B,QAAQ,EAAE,wEAAwE;IAClFD,IAAI,EAAE;EACR,CAAC,CAAC;EAEF,MAAMD,cAAc,CAAC;IACnBG,SAAS,EAAE,cAAc;IACzBC,OAAO,EAAG,UAASZ,kBAAmB,kBAAiBA,kBAAmB,IAAG;IAC7Ea,UAAU,EAAE,IAAI;IAChBH,QAAQ,EAAE,mDAAmD;IAC7DD,IAAI,EAAE;EACR,CAAC,CAAC;EAEF,MAAMD,cAAc,CAAC;IACnBG,SAAS,EAAE,mBAAmB;IAC9BC,OAAO,EAAG,GAAE,GAAG,CAACmB,MAAM,CAAC,CAAC,CAAE,UAASpD,QAAS,MAAKI,WAAW,GAAG,aAAa,GAAG,SAAU,GAAE;IAC3F2B,QAAQ,EAAE,2CAA2C;IACrDD,IAAI,EAAE;EACR,CAAC,CAAC;EAEF,MAAMD,cAAc,CAAC;IACnBG,SAAS,EAAE,aAAa;IACxBC,OAAO,EAAG,GAAE,GAAG,CAACmB,MAAM,CAAC,CAAC,CAAE,IAAGpD,QAAS,MAAKqB,kBAAmB,GAAE;IAChEU,QAAQ,EAAE,sCAAsC;IAChDD,IAAI,EAAE;EACR,CAAC,CAAC;EAEF,MAAAuB,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAAtE,uBAAA,CAAAd,OAAA,CAAa,qBAAqB,GAAC;;EAEnC;AACF;AACA;AACA;AACA;AACA;;EAEE;EACA+B,OAAO,CAACsD,KAAK,CAAC,IAAAF,aAAO,EAACG,SAAS,EAAE,QAAQ,CAAC,CAAC;EAC3C,MAAM,IAAAC,mBAAI,EAAC;EACT;EACA9B,cAAc,EACdF,YAAY,EACZH,QAAQ,CACT,CAAC;AACJ,CAAC,GAAG"}
@@ -7,7 +7,13 @@ var _camelcase = _interopRequireDefault(require("camelcase"));
7
7
  var _openEditor = _interopRequireDefault(require("open-editor"));
8
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
9
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* eslint-disable no-console -- CLI */ /**
11
+ * @example
12
+ *
13
+ * ```shell
14
+ * npm run create-rule my-new-rule -- --recommended
15
+ * ```
16
+ */
11
17
  // Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.
12
18
 
13
19
  const [,, ruleName, ...options] = process.argv;
@@ -1 +1 @@
1
- {"version":3,"file":"generateRule.js","names":["_fs","require","_promises","_interopRequireDefault","_path","_camelcase","_openEditor","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","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","Promise","resolve","then","chdir","__dirname","open"],"sources":["../src/bin/generateRule.js"],"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 [\n , , ruleName,\n ...options\n] = 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 additionalProperties: 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 {\n line: 2,\n message: '',\n },\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 ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\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(({\n oldRule,\n }) => {\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(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'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"],"mappings":";;AAUA,IAAAA,GAAA,GAAAC,OAAA;AAGA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAGA,IAAAI,UAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,WAAA,GAAAH,sBAAA,CAAAF,OAAA;AAA+B,SAAAE,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAI,wBAAAR,GAAA,EAAAI,WAAA,SAAAA,WAAA,IAAAJ,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAS,KAAA,GAAAN,wBAAA,CAAAC,WAAA,OAAAK,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAV,GAAA,YAAAS,KAAA,CAAAE,GAAA,CAAAX,GAAA,SAAAY,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAjB,GAAA,QAAAiB,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAApB,GAAA,EAAAiB,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAhB,GAAA,EAAAiB,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAjB,GAAA,CAAAiB,GAAA,SAAAL,MAAA,CAAAV,OAAA,GAAAF,GAAA,MAAAS,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAtB,GAAA,EAAAY,MAAA,YAAAA,MAAA;AAE/B;;AAEA,MAAM,IACAW,QAAQ,EACZ,GAAGC,OAAO,CACX,GAAGC,OAAO,CAACC,IAAI;AAEhB,MAAMC,WAAW,GAAGH,OAAO,CAACI,QAAQ,CAAC,eAAe,CAAC;AAErD,CAAC,YAAY;EACX,IAAI,CAACL,QAAQ,EAAE;IACbM,OAAO,CAACC,KAAK,CAAC,2BAA2B,CAAC;IAE1C;EACF;EAEA,IAAK,QAAQ,CAAEC,IAAI,CAACR,QAAQ,CAAC,EAAE;IAC7BM,OAAO,CAACC,KAAK,CAAC,+CAA+C,CAAC;IAE9D;EACF;EAEA,MAAME,aAAa,GAAG,6BAA6B;EACnD,MAAMC,SAAS,GAAGC,IAAI,CAACC,KAAK,CAAC,MAAMC,iBAAE,CAACC,QAAQ,CAC5CL,aAAa,EAAE,MAAM,CACtB,CAAC;EACF,IAAI,CAACC,SAAS,CAACL,QAAQ,CAACL,QAAQ,CAAC,EAAE;IACjCU,SAAS,CAACK,IAAI,CAACf,QAAQ,CAAC;IACxBU,SAAS,CAACM,IAAI,EAAE;EAClB;EAEA,MAAMH,iBAAE,CAACI,SAAS,CAACR,aAAa,EAAEE,IAAI,CAACO,SAAS,CAACR,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;EAC5EJ,OAAO,CAACa,GAAG,CAAC,WAAW,EAAET,SAAS,CAAC;EAEnC,MAAMU,YAAY,GAAI;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqFpB,QAAS;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;EAEC,MAAMqB,kBAAkB,GAAG,IAAAC,kBAAS,EAACtB,QAAQ,CAAC;EAE9C,MAAMuB,QAAQ,GAAI,eAAcF,kBAAmB,KAAI;EAEvD,IAAI,CAAC,IAAAG,cAAU,EAACD,QAAQ,CAAC,EAAE;IACzB,MAAMV,iBAAE,CAACI,SAAS,CAACM,QAAQ,EAAEH,YAAY,CAAC;EAC5C;EAEA,MAAMK,gBAAgB,GAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;EAEC,MAAMC,YAAY,GAAI,2BAA0BL,kBAAmB,KAAI;EACvE,IAAI,CAAC,IAAAG,cAAU,EAACE,YAAY,CAAC,EAAE;IAC7B,MAAMb,iBAAE,CAACI,SAAS,CAACS,YAAY,EAAED,gBAAgB,CAAC;EACpD;EAEA,MAAME,kBAAkB,GAAI,SAAQ3B,QAAS;AAC/C;AACA;AACA;AACA;AACA;AACA,eAAeI,WAAW,GAAG,MAAM,GAAG,OAAQ;AAC9C;AACA;AACA;AACA,kBAAkBiB,kBAAmB;AACrC,CAAC;EAEC,MAAMO,cAAc,GAAI,mBAAkB5B,QAAS,KAAI;EACvD,IAAI,CAAC,IAAAwB,cAAU,EAACI,cAAc,CAAC,EAAE;IAC/B,MAAMf,iBAAE,CAACI,SAAS,CAACW,cAAc,EAAED,kBAAkB,CAAC;EACxD;EAEA,MAAME,cAAc,GAAG,MAAAA,CAAO;IAC5BC,IAAI;IACJC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC;EACF,CAAC,KAAK;IACJ,MAAMC,OAAO,GAAG,EAAE;IAElB,IAAIC,MAAM,GAAG,MAAMvB,iBAAE,CAACC,QAAQ,CAACgB,IAAI,EAAE,MAAM,CAAC;IAC5CM,MAAM,CAACC,OAAO,CACZN,QAAQ,EACR,CAACO,WAAW,EAAEC,EAAE,EAAEC,MAAM,EAAEC,GAAG,EAAE;MAC7BC;IACF,CAAC,KAAK;MACJP,OAAO,CAACpB,IAAI,CAAC;QACXuB,WAAW;QACXE,MAAM;QACNE;MACF,CAAC,CAAC;IACJ,CAAC,CACF;IAEDP,OAAO,CAACnB,IAAI,CAAC,CAAC;MACZ0B;IACF,CAAC,EAAE;MACDA,OAAO,EAAEC;IACX,CAAC,KAAK;MACJ;MACA,OAAOD,OAAO,GAAGC,QAAQ,GAAG,CAAC,CAAC,GAAID,OAAO,GAAGC,QAAQ,GAAG,CAAC,GAAG,CAAE;IAC/D,CAAC,CAAC;IAEF,IAAIC,eAAe,GAAG,KAAK;IAC3B,MAAMC,SAAS,GAAGV,OAAO,CAACW,SAAS,CAAC,CAAC;MACnCJ;IACF,CAAC,KAAK;MACJE,eAAe,KAAfA,eAAe,GAAKV,UAAU,GAAGb,kBAAkB,KAAKqB,OAAO,GAAG1C,QAAQ,KAAK0C,OAAO;MAEtF,OAAOR,UAAU,GAAGb,kBAAkB,GAAGqB,OAAO,GAAG1C,QAAQ,GAAG0C,OAAO;IACvE,CAAC,CAAC;IACF,IAAIK,IAAI,GAAGF,SAAS,KAAKG,SAAS,IAAIb,OAAO,CAACU,SAAS,CAAC;IACxD,IAAIE,IAAI,IAAIF,SAAS,KAAK,CAAC;IAEzB;IACAX,UAAU,EACV;MACAa,IAAI,CAACP,MAAM,GAAG,CAAC;IACjB;IAEA,IAAI,CAACO,IAAI,EAAE;MACTA,IAAI,GAAGZ,OAAO,CAACc,GAAG,EAAE;MACpBF,IAAI,CAACP,MAAM,IAAIO,IAAI,CAACT,WAAW,CAACY,MAAM;IACxC;IAEA,IAAIN,eAAe,EAAE;MACnBtC,OAAO,CAACa,GAAG,CAAE,mCAAkCa,SAAU,GAAE,CAAC;IAC9D,CAAC,MAAM;MACLI,MAAM,GAAGA,MAAM,CAACe,KAAK,CAAC,CAAC,EAAEJ,IAAI,CAACP,MAAM,CAAC,IAC1BO,IAAI,CAACP,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC,GACzBP,OAAO,IACNc,IAAI,CAACP,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,GACzBJ,MAAM,CAACe,KAAK,CAACJ,IAAI,CAACP,MAAM,CAAC;MAEnC,MAAM3B,iBAAE,CAACI,SAAS,CAACa,IAAI,EAAEM,MAAM,CAAC;IAClC;EACF,CAAC;EAED,MAAMP,cAAc,CAAC;IACnBG,SAAS,EAAE,QAAQ;IACnBC,OAAO,EAAG,2CAA0CjC,QAAS,OAAM;IACnE+B,QAAQ,EAAE,wEAAwE;IAClFD,IAAI,EAAE;EACR,CAAC,CAAC;EAEF,MAAMD,cAAc,CAAC;IACnBG,SAAS,EAAE,cAAc;IACzBC,OAAO,EAAG,UAASZ,kBAAmB,kBAAiBA,kBAAmB,IAAG;IAC7Ea,UAAU,EAAE,IAAI;IAChBH,QAAQ,EAAE,mDAAmD;IAC7DD,IAAI,EAAE;EACR,CAAC,CAAC;EAEF,MAAMD,cAAc,CAAC;IACnBG,SAAS,EAAE,mBAAmB;IAC9BC,OAAO,EAAG,GAAE,GAAG,CAACmB,MAAM,CAAC,CAAC,CAAE,UAASpD,QAAS,MAAKI,WAAW,GAAG,aAAa,GAAG,SAAU,GAAE;IAC3F2B,QAAQ,EAAE,2CAA2C;IACrDD,IAAI,EAAE;EACR,CAAC,CAAC;EAEF,MAAMD,cAAc,CAAC;IACnBG,SAAS,EAAE,aAAa;IACxBC,OAAO,EAAG,GAAE,GAAG,CAACmB,MAAM,CAAC,CAAC,CAAE,IAAGpD,QAAS,MAAKqB,kBAAmB,GAAE;IAChEU,QAAQ,EAAE,sCAAsC;IAChDD,IAAI,EAAE;EACR,CAAC,CAAC;EAEF,MAAAuB,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAAtE,uBAAA,CAAAd,OAAA,CAAa,qBAAqB,GAAC;;EAEnC;AACF;AACA;AACA;AACA;AACA;;EAEE;EACA+B,OAAO,CAACsD,KAAK,CAAC,IAAAF,aAAO,EAACG,SAAS,EAAE,QAAQ,CAAC,CAAC;EAC3C,MAAM,IAAAC,mBAAI,EAAC;EACT;EACA9B,cAAc,EACdF,YAAY,EACZH,QAAQ,CACT,CAAC;AACJ,CAAC,GAAG"}
1
+ {"version":3,"file":"generateRule.js","names":["_fs","require","_promises","_interopRequireDefault","_path","_camelcase","_openEditor","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","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","Promise","resolve","then","chdir","__dirname","open"],"sources":["../src/bin/generateRule.js"],"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 [\n , , ruleName,\n ...options\n] = 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 additionalProperties: 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 {\n line: 2,\n message: '',\n },\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 ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\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(({\n oldRule,\n }) => {\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(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'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"],"mappings":"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"}
@@ -144,6 +144,9 @@ var _default = (0, _iterateJsdoc.default)(({
144
144
  });
145
145
  if (typeof startLines === 'number') {
146
146
  var _description$match, _description$match$;
147
+ if (!jsdoc.tags.length) {
148
+ return;
149
+ }
147
150
  const {
148
151
  description,
149
152
  lastDescriptionLine
@@ -1 +1 @@
1
- {"version":3,"file":"tagLines.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","alwaysNever","count","endLines","startLines","applyToEndTag","tags","options","some","tg","tagIdx","lastTag","lastEmpty","reportIndex","emptyLinesCount","idx","tokens","tag","name","type","description","end","source","entries","_tags$lastTag$slice","_tags$lastTag$slice2","includes","slice","lines","empty","length","lineDiff","fixer","removeTag","tagSourceOffset","reportJSDoc","line","number","addLines","currentTag","tagSourceIdx","splice","push","currentTg","tagCount","defaultAlways","overrideAlways","fixCount","_lines2","_lines","_description$match","_description$match$","lastDescriptionLine","getDescription","test","trailingLines","match","trailingDiff","setBlockDescription","info","seedTokens","descLines","map","desc","postDelimiter","trim","Array","from","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperties","properties","anyOf","patternProperties","exports","module"],"sources":["../../src/rules/tagLines.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n alwaysNever = 'never',\n {\n count = 1,\n endLines = 0,\n startLines = 0,\n applyToEndTag = true,\n tags = {},\n } = {},\n ] = context.options;\n\n // eslint-disable-next-line complexity -- Temporary\n jsdoc.tags.some((tg, tagIdx) => {\n let lastTag;\n let lastEmpty = null;\n\n let reportIndex = null;\n let emptyLinesCount = 0;\n for (const [\n idx,\n {\n tokens: {\n tag,\n name,\n type,\n description,\n end,\n },\n },\n ] of tg.source.entries()) {\n // May be text after a line break within a tag description\n if (description) {\n reportIndex = null;\n }\n\n if (lastTag && [\n 'any', 'always',\n ].includes(tags[lastTag.slice(1)]?.lines)) {\n continue;\n }\n\n const empty = !tag && !name && !type && !description;\n if (\n empty && !end &&\n (alwaysNever === 'never' ||\n lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n )\n ) {\n reportIndex = idx;\n\n continue;\n }\n\n if (!end) {\n if (empty) {\n emptyLinesCount++;\n } else {\n emptyLinesCount = 0;\n }\n\n lastEmpty = empty ? idx : null;\n }\n\n lastTag = tag;\n }\n\n if (\n typeof endLines === 'number' &&\n lastEmpty !== null && tagIdx === jsdoc.tags.length - 1\n ) {\n const lineDiff = endLines - emptyLinesCount;\n\n if (lineDiff < 0) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: lastEmpty + lineDiff + 1,\n });\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number + lineDiff + 1,\n },\n fixer,\n );\n } else if (lineDiff > 0) {\n const fixer = () => {\n utils.addLines(tagIdx, lastEmpty, endLines - emptyLinesCount);\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number,\n },\n fixer,\n );\n }\n\n return true;\n }\n\n if (reportIndex !== null) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: reportIndex,\n });\n };\n\n utils.reportJSDoc(\n 'Expected no lines between tags',\n {\n line: tg.source[0].number + 1,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n (applyToEndTag ? jsdoc.tags : jsdoc.tags.slice(0, -1)).some((tg, tagIdx) => {\n const lines = [];\n\n let currentTag;\n let tagSourceIdx = 0;\n for (const [\n idx,\n {\n number,\n tokens: {\n tag,\n name,\n type,\n description,\n end,\n },\n },\n ] of tg.source.entries()) {\n if (description) {\n lines.splice(0, lines.length);\n tagSourceIdx = idx;\n }\n\n if (tag) {\n currentTag = tag;\n }\n\n if (!tag && !name && !type && !description && !end) {\n lines.push({\n idx,\n number,\n });\n }\n }\n\n const currentTg = currentTag && tags[currentTag.slice(1)];\n const tagCount = currentTg?.count;\n\n const defaultAlways = alwaysNever === 'always' && currentTg?.lines !== 'never' &&\n currentTg?.lines !== 'any' && lines.length < count;\n\n let overrideAlways;\n let fixCount = count;\n if (!defaultAlways) {\n fixCount = typeof tagCount === 'number' ? tagCount : count;\n overrideAlways = currentTg?.lines === 'always' &&\n lines.length < fixCount;\n }\n\n if (defaultAlways || overrideAlways) {\n const fixer = () => {\n utils.addLines(tagIdx, lines[lines.length - 1]?.idx || tagSourceIdx + 1, fixCount - lines.length);\n };\n\n const line = lines[lines.length - 1]?.number || tg.source[tagSourceIdx].number;\n utils.reportJSDoc(\n `Expected ${fixCount} line${fixCount === 1 ? '' : 's'} between tags but found ${lines.length}`,\n {\n line,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n if (typeof startLines === 'number') {\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n if (!(/\\S/u).test(description)) {\n return;\n }\n\n const trailingLines = description.match(/\\n+$/u)?.[0]?.length;\n const trailingDiff = (trailingLines ?? 0) - startLines;\n if (trailingDiff > 0) {\n utils.reportJSDoc(\n `Expected only ${startLines} line after block description`,\n {\n line: lastDescriptionLine - trailingDiff,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return descLines.slice(0, -trailingDiff).map((desc) => {\n return {\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: desc.trim() ? info.postDelimiter : '',\n }),\n };\n });\n });\n },\n );\n } else if (trailingDiff < 0) {\n utils.reportJSDoc(\n `Expected ${startLines} lines after block description`,\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return [\n ...descLines,\n ...Array.from({\n length: -trailingDiff,\n }, () => {\n return '';\n }),\n ].map((desc) => {\n return {\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: desc.trim() ? info.postDelimiter : '',\n }),\n };\n });\n });\n },\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces lines (or no lines) between tags.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-tag-lines',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'any', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n applyToEndTag: {\n type: 'boolean',\n },\n count: {\n type: 'integer',\n },\n endLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n },\n startLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n },\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n lines: {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n },\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"tagLines.js","names":["_iterateJsdoc","_interopRequireDefault","require","obj","__esModule","default","_default","iterateJsdoc","context","jsdoc","utils","alwaysNever","count","endLines","startLines","applyToEndTag","tags","options","some","tg","tagIdx","lastTag","lastEmpty","reportIndex","emptyLinesCount","idx","tokens","tag","name","type","description","end","source","entries","_tags$lastTag$slice","_tags$lastTag$slice2","includes","slice","lines","empty","length","lineDiff","fixer","removeTag","tagSourceOffset","reportJSDoc","line","number","addLines","currentTag","tagSourceIdx","splice","push","currentTg","tagCount","defaultAlways","overrideAlways","fixCount","_lines2","_lines","_description$match","_description$match$","lastDescriptionLine","getDescription","test","trailingLines","match","trailingDiff","setBlockDescription","info","seedTokens","descLines","map","desc","postDelimiter","trim","Array","from","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperties","properties","anyOf","patternProperties","exports","module"],"sources":["../../src/rules/tagLines.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n alwaysNever = 'never',\n {\n count = 1,\n endLines = 0,\n startLines = 0,\n applyToEndTag = true,\n tags = {},\n } = {},\n ] = context.options;\n\n // eslint-disable-next-line complexity -- Temporary\n jsdoc.tags.some((tg, tagIdx) => {\n let lastTag;\n let lastEmpty = null;\n\n let reportIndex = null;\n let emptyLinesCount = 0;\n for (const [\n idx,\n {\n tokens: {\n tag,\n name,\n type,\n description,\n end,\n },\n },\n ] of tg.source.entries()) {\n // May be text after a line break within a tag description\n if (description) {\n reportIndex = null;\n }\n\n if (lastTag && [\n 'any', 'always',\n ].includes(tags[lastTag.slice(1)]?.lines)) {\n continue;\n }\n\n const empty = !tag && !name && !type && !description;\n if (\n empty && !end &&\n (alwaysNever === 'never' ||\n lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n )\n ) {\n reportIndex = idx;\n\n continue;\n }\n\n if (!end) {\n if (empty) {\n emptyLinesCount++;\n } else {\n emptyLinesCount = 0;\n }\n\n lastEmpty = empty ? idx : null;\n }\n\n lastTag = tag;\n }\n\n if (\n typeof endLines === 'number' &&\n lastEmpty !== null && tagIdx === jsdoc.tags.length - 1\n ) {\n const lineDiff = endLines - emptyLinesCount;\n\n if (lineDiff < 0) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: lastEmpty + lineDiff + 1,\n });\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number + lineDiff + 1,\n },\n fixer,\n );\n } else if (lineDiff > 0) {\n const fixer = () => {\n utils.addLines(tagIdx, lastEmpty, endLines - emptyLinesCount);\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number,\n },\n fixer,\n );\n }\n\n return true;\n }\n\n if (reportIndex !== null) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: reportIndex,\n });\n };\n\n utils.reportJSDoc(\n 'Expected no lines between tags',\n {\n line: tg.source[0].number + 1,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n (applyToEndTag ? jsdoc.tags : jsdoc.tags.slice(0, -1)).some((tg, tagIdx) => {\n const lines = [];\n\n let currentTag;\n let tagSourceIdx = 0;\n for (const [\n idx,\n {\n number,\n tokens: {\n tag,\n name,\n type,\n description,\n end,\n },\n },\n ] of tg.source.entries()) {\n if (description) {\n lines.splice(0, lines.length);\n tagSourceIdx = idx;\n }\n\n if (tag) {\n currentTag = tag;\n }\n\n if (!tag && !name && !type && !description && !end) {\n lines.push({\n idx,\n number,\n });\n }\n }\n\n const currentTg = currentTag && tags[currentTag.slice(1)];\n const tagCount = currentTg?.count;\n\n const defaultAlways = alwaysNever === 'always' && currentTg?.lines !== 'never' &&\n currentTg?.lines !== 'any' && lines.length < count;\n\n let overrideAlways;\n let fixCount = count;\n if (!defaultAlways) {\n fixCount = typeof tagCount === 'number' ? tagCount : count;\n overrideAlways = currentTg?.lines === 'always' &&\n lines.length < fixCount;\n }\n\n if (defaultAlways || overrideAlways) {\n const fixer = () => {\n utils.addLines(tagIdx, lines[lines.length - 1]?.idx || tagSourceIdx + 1, fixCount - lines.length);\n };\n\n const line = lines[lines.length - 1]?.number || tg.source[tagSourceIdx].number;\n utils.reportJSDoc(\n `Expected ${fixCount} line${fixCount === 1 ? '' : 's'} between tags but found ${lines.length}`,\n {\n line,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n if (typeof startLines === 'number') {\n if (!jsdoc.tags.length) {\n return;\n }\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n if (!(/\\S/u).test(description)) {\n return;\n }\n\n const trailingLines = description.match(/\\n+$/u)?.[0]?.length;\n const trailingDiff = (trailingLines ?? 0) - startLines;\n if (trailingDiff > 0) {\n utils.reportJSDoc(\n `Expected only ${startLines} line after block description`,\n {\n line: lastDescriptionLine - trailingDiff,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return descLines.slice(0, -trailingDiff).map((desc) => {\n return {\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: desc.trim() ? info.postDelimiter : '',\n }),\n };\n });\n });\n },\n );\n } else if (trailingDiff < 0) {\n utils.reportJSDoc(\n `Expected ${startLines} lines after block description`,\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return [\n ...descLines,\n ...Array.from({\n length: -trailingDiff,\n }, () => {\n return '';\n }),\n ].map((desc) => {\n return {\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: desc.trim() ? info.postDelimiter : '',\n }),\n };\n });\n });\n },\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces lines (or no lines) between tags.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-tag-lines',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'any', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n applyToEndTag: {\n type: 'boolean',\n },\n count: {\n type: 'integer',\n },\n endLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n },\n startLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n },\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n lines: {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n },\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -11,45 +11,45 @@
11
11
  "debug": "^4.3.4",
12
12
  "escape-string-regexp": "^4.0.0",
13
13
  "esquery": "^1.5.0",
14
- "semver": "^7.3.8",
14
+ "semver": "^7.5.0",
15
15
  "spdx-expression-parse": "^3.0.1"
16
16
  },
17
17
  "description": "JSDoc linting rules for ESLint.",
18
18
  "devDependencies": {
19
19
  "@babel/cli": "^7.21.0",
20
- "@babel/core": "^7.21.3",
20
+ "@babel/core": "^7.21.4",
21
21
  "@babel/eslint-parser": "^7.21.3",
22
22
  "@babel/node": "^7.20.7",
23
23
  "@babel/plugin-syntax-class-properties": "^7.12.13",
24
24
  "@babel/plugin-transform-flow-strip-types": "^7.21.0",
25
- "@babel/preset-env": "^7.20.2",
25
+ "@babel/preset-env": "^7.21.4",
26
26
  "@babel/register": "^7.21.0",
27
27
  "@es-joy/jsdoc-eslint-parser": "^0.17.0",
28
28
  "@hkdobrev/run-if-changed": "^0.3.1",
29
29
  "@semantic-release/commit-analyzer": "^9.0.2",
30
30
  "@semantic-release/github": "^8.0.7",
31
- "@semantic-release/npm": "^10.0.2",
32
- "@typescript-eslint/parser": "^5.57.0",
31
+ "@semantic-release/npm": "^10.0.3",
32
+ "@typescript-eslint/parser": "^5.59.0",
33
33
  "babel-plugin-add-module-exports": "^1.0.4",
34
34
  "babel-plugin-istanbul": "^6.1.1",
35
35
  "camelcase": "^6.3.0",
36
36
  "chai": "^4.3.7",
37
37
  "cross-env": "^7.0.3",
38
38
  "decamelize": "^5.0.1",
39
- "eslint": "^8.37.0",
39
+ "eslint": "^8.38.0",
40
40
  "eslint-config-canonical": "~33.0.1",
41
41
  "gitdown": "^3.1.5",
42
42
  "glob": "^8.1.0",
43
43
  "husky": "^8.0.3",
44
44
  "jsdoc-type-pratt-parser": "^4.0.0",
45
- "lint-staged": "^13.2.0",
45
+ "lint-staged": "^13.2.1",
46
46
  "lodash.defaultsdeep": "^4.6.1",
47
47
  "mocha": "^10.2.0",
48
48
  "nyc": "^15.1.0",
49
49
  "open-editor": "^3.0.0",
50
- "rimraf": "^4.4.1",
51
- "semantic-release": "^21.0.0",
52
- "typescript": "^5.0.3"
50
+ "rimraf": "^5.0.0",
51
+ "semantic-release": "^21.0.1",
52
+ "typescript": "^5.0.4"
53
53
  },
54
54
  "engines": {
55
55
  "node": "^14 || ^16 || ^17 || ^18 || ^19"
@@ -121,5 +121,5 @@
121
121
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
122
122
  "test-index": "npm run test-no-cov -- test/rules/index.js"
123
123
  },
124
- "version": "43.0.1"
124
+ "version": "43.0.3"
125
125
  }