blob: 903b2b36abd0b7b18f8a1b40a2dfedc0842267c5 [file] [log] [blame]
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _lodash = _interopRequireDefault(require("lodash"));
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = (0, _iterateJsdoc.default)(({
sourceCode,
jsdoc,
report,
utils,
context,
settings,
jsdocNode
}) => {
if (!jsdoc.tags) {
return;
}
const _ref = context.options[0] || {},
_ref$definedTags = _ref.definedTags,
definedTags = _ref$definedTags === void 0 ? [] : _ref$definedTags;
let definedPreferredTags = [];
let definedNonPreferredTags = [];
const tagNamePreference = settings.tagNamePreference;
if (Object.keys(tagNamePreference).length) {
definedNonPreferredTags = _lodash.default.keys(tagNamePreference); // Replace `_.values` with `Object.values` when we may start requiring Node 7+
definedPreferredTags = _lodash.default.values(tagNamePreference).map(preferredTag => {
if (typeof preferredTag === 'string') {
// May become an empty string but will be filtered out below
return preferredTag;
}
if (!preferredTag) {
return undefined;
}
if (typeof preferredTag !== 'object') {
utils.reportSettings('Invalid `settings.jsdoc.tagNamePreference`. Values must be falsy, a string, or an object.');
}
return preferredTag.replacement;
}).filter(preferredType => {
return preferredType;
});
}
jsdoc.tags.forEach(jsdocTag => {
const tagName = jsdocTag.tag;
if (utils.isValidTag(tagName, [...definedTags, ...definedPreferredTags, ...definedNonPreferredTags])) {
let preferredTagName = utils.getPreferredTagName({
allowObjectReturn: true,
defaultMessage: `Blacklisted tag found (\`@${tagName}\`)`,
tagName
});
let message = `Invalid JSDoc tag (preference). Replace "${tagName}" JSDoc tag with "${preferredTagName}".`;
if (!preferredTagName) {
return;
}
if (typeof preferredTagName === 'object') {
var _preferredTagName = preferredTagName;
message = _preferredTagName.message;
preferredTagName = _preferredTagName.replacement;
}
if (preferredTagName !== tagName) {
report(message, fixer => {
const replacement = sourceCode.getText(jsdocNode).replace(new RegExp(`@${_lodash.default.escapeRegExp(tagName)}\\b`, 'u'), `@${preferredTagName}`);
return fixer.replaceText(jsdocNode, replacement);
}, jsdocTag);
}
} else {
report(`Invalid JSDoc tag name "${tagName}".`, null, jsdocTag);
}
});
}, {
iterateAllJsdocs: true,
meta: {
fixable: 'code',
schema: [{
additionalProperties: false,
properties: {
definedTags: {
items: {
type: 'string'
},
type: 'array'
}
},
type: 'object'
}],
type: 'suggestion'
}
});
exports.default = _default;
module.exports = exports.default;
//# sourceMappingURL=checkTagNames.js.map