| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = void 0; |
| var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc")); |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
| const defaultTags = { |
| file: { |
| initialCommentsOnly: true, |
| mustExist: true, |
| preventDuplicates: true |
| } |
| }; |
| const setDefaults = state => { |
| // First iteration |
| if (!state.globalTags) { |
| state.globalTags = {}; |
| state.hasDuplicates = {}; |
| state.hasTag = {}; |
| state.hasNonCommentBeforeTag = {}; |
| } |
| }; |
| var _default = (0, _iterateJsdoc.default)(({ |
| jsdocNode, |
| state, |
| utils, |
| context |
| }) => { |
| const { |
| tags = defaultTags |
| } = context.options[0] || {}; |
| setDefaults(state); |
| for (const tagName of Object.keys(tags)) { |
| const targetTagName = utils.getPreferredTagName({ |
| tagName |
| }); |
| const hasTag = targetTagName && utils.hasTag(targetTagName); |
| state.hasTag[tagName] = hasTag || state.hasTag[tagName]; |
| const hasDuplicate = state.hasDuplicates[tagName]; |
| if (hasDuplicate === false) { |
| // Was marked before, so if a tag now, is a dupe |
| state.hasDuplicates[tagName] = hasTag; |
| } else if (!hasDuplicate && hasTag) { |
| // No dupes set before, but has first tag, so change state |
| // from `undefined` to `false` so can detect next time |
| state.hasDuplicates[tagName] = false; |
| state.hasNonCommentBeforeTag[tagName] = state.hasNonComment && state.hasNonComment < jsdocNode.range[0]; |
| } |
| } |
| }, { |
| exit({ |
| context, |
| state, |
| utils |
| }) { |
| setDefaults(state); |
| const { |
| tags = defaultTags |
| } = context.options[0] || {}; |
| for (const [tagName, { |
| mustExist = false, |
| preventDuplicates = false, |
| initialCommentsOnly = false |
| }] of Object.entries(tags)) { |
| const obj = utils.getPreferredTagNameObject({ |
| tagName |
| }); |
| if (obj && obj.blocked) { |
| utils.reportSettings(`\`settings.jsdoc.tagNamePreference\` cannot block @${obj.tagName} ` + 'for the `require-file-overview` rule'); |
| } else { |
| const targetTagName = obj && obj.replacement || obj; |
| if (mustExist && !state.hasTag[tagName]) { |
| utils.reportSettings(`Missing @${targetTagName}`); |
| } |
| if (preventDuplicates && state.hasDuplicates[tagName]) { |
| utils.reportSettings(`Duplicate @${targetTagName}`); |
| } |
| if (initialCommentsOnly && state.hasNonCommentBeforeTag[tagName]) { |
| utils.reportSettings(`@${targetTagName} should be at the beginning of the file`); |
| } |
| } |
| } |
| }, |
| iterateAllJsdocs: true, |
| meta: { |
| docs: { |
| description: 'Checks that all files have one `@file`, `@fileoverview`, or `@overview` tag at the beginning of the file.', |
| url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-file-overview' |
| }, |
| schema: [{ |
| additionalProperties: false, |
| properties: { |
| tags: { |
| patternProperties: { |
| '.*': { |
| additionalProperties: false, |
| properties: { |
| initialCommentsOnly: { |
| type: 'boolean' |
| }, |
| mustExist: { |
| type: 'boolean' |
| }, |
| preventDuplicates: { |
| type: 'boolean' |
| } |
| }, |
| type: 'object' |
| } |
| }, |
| type: 'object' |
| } |
| }, |
| type: 'object' |
| }], |
| type: 'suggestion' |
| }, |
| nonComment({ |
| state, |
| node |
| }) { |
| if (!state.hasNonComment) { |
| state.hasNonComment = node.range[0]; |
| } |
| } |
| }); |
| exports.default = _default; |
| module.exports = exports.default; |
| //# sourceMappingURL=requireFileOverview.js.map |