blob: 4ad20577b7951fe61c91ef1d4136f61b0f815d45 [file] [log] [blame]
{"version":3,"sources":["../../src/rules/requireFileOverview.js"],"names":["defaultTags","file","initialCommentsOnly","mustExist","preventDuplicates","setDefaults","state","globalTags","hasDuplicates","hasTag","hasNonCommentBeforeTag","jsdocNode","utils","context","options","tags","Object","keys","tagName","targetTagName","getPreferredTagName","hasDuplicate","hasNonComment","start","exit","entries","obj","getPreferredTagNameObject","blocked","reportSettings","replacement","iterateAllJsdocs","meta","schema","additionalProperties","properties","patternProperties","type","nonComment","node"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst defaultTags = {\n file: {\n initialCommentsOnly: true,\n mustExist: true,\n preventDuplicates: true,\n },\n};\n\nconst setDefaults = (state) => {\n // First iteration\n if (!state.globalTags) {\n state.globalTags = {};\n state.hasDuplicates = {};\n state.hasTag = {};\n state.hasNonCommentBeforeTag = {};\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n state,\n utils,\n context,\n}) => {\n const {\n tags = defaultTags,\n } = context.options[0] || {};\n\n setDefaults(state);\n\n for (const tagName of Object.keys(tags)) {\n const targetTagName = utils.getPreferredTagName({tagName});\n\n const hasTag = targetTagName && utils.hasTag(targetTagName);\n\n state.hasTag[tagName] = hasTag || state.hasTag[tagName];\n\n const hasDuplicate = state.hasDuplicates[tagName];\n\n if (hasDuplicate === false) {\n // Was marked before, so if a tag now, is a dupe\n state.hasDuplicates[tagName] = hasTag;\n } else if (!hasDuplicate && hasTag) {\n // No dupes set before, but has first tag, so change state\n // from `undefined` to `false` so can detect next time\n state.hasDuplicates[tagName] = false;\n state.hasNonCommentBeforeTag[tagName] = state.hasNonComment &&\n state.hasNonComment < jsdocNode.start;\n }\n }\n}, {\n exit ({context, state, utils}) {\n setDefaults(state);\n const {\n tags = defaultTags,\n } = context.options[0] || {};\n\n for (const [tagName, {\n mustExist = false,\n preventDuplicates = false,\n initialCommentsOnly = false,\n }] of Object.entries(tags)) {\n const obj = utils.getPreferredTagNameObject({tagName});\n if (obj && obj.blocked) {\n utils.reportSettings(\n `\\`settings.jsdoc.tagNamePreference\\` cannot block @${obj.tagName} ` +\n 'for the `require-file-overview` rule',\n );\n } else {\n const targetTagName = obj && obj.replacement || obj;\n if (mustExist && !state.hasTag[tagName]) {\n utils.reportSettings(`Missing @${targetTagName}`);\n }\n if (preventDuplicates && state.hasDuplicates[tagName]) {\n utils.reportSettings(\n `Duplicate @${targetTagName}`,\n );\n }\n if (initialCommentsOnly &&\n state.hasNonCommentBeforeTag[tagName]\n ) {\n utils.reportSettings(\n `@${targetTagName} should be at the beginning of the file`,\n );\n }\n }\n }\n },\n iterateAllJsdocs: true,\n meta: {\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n initialCommentsOnly: {\n type: 'boolean',\n },\n mustExist: {\n type: 'boolean',\n },\n preventDuplicates: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n nonComment ({state, node}) {\n if (!state.hasNonComment) {\n state.hasNonComment = node.start;\n }\n },\n});\n"],"file":"requireFileOverview.js"}