mirror of
https://github.com/JamesIves/github-pages-deploy-action.git
synced 2023-12-15 20:03:39 +08:00
146 lines
4.1 KiB
JavaScript
146 lines
4.1 KiB
JavaScript
"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 validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, functionParameterNames, jsdoc, jsdocNode, utils, report) => {
|
|
const paramTags = Object.entries(jsdoc.tags).filter(([, tag]) => {
|
|
return tag.tag === targetTagName;
|
|
});
|
|
const paramTagsNonNested = paramTags.filter(([, tag]) => {
|
|
return !tag.name.includes('.');
|
|
});
|
|
let dotted = 0;
|
|
return paramTags.some(([, tag], index) => {
|
|
let tagsIndex;
|
|
const dupeTagInfo = paramTags.find(([tgsIndex, tg], idx) => {
|
|
tagsIndex = tgsIndex;
|
|
return tg.name === tag.name && idx !== index;
|
|
});
|
|
|
|
if (dupeTagInfo) {
|
|
utils.reportJSDoc(`Duplicate @${targetTagName} "${tag.name}"`, dupeTagInfo[1], () => {
|
|
jsdoc.tags.splice(tagsIndex, 1);
|
|
});
|
|
return true;
|
|
}
|
|
|
|
if (tag.name.includes('.')) {
|
|
dotted++;
|
|
return false;
|
|
}
|
|
|
|
const functionParameterName = functionParameterNames[index - dotted];
|
|
|
|
if (!functionParameterName) {
|
|
if (allowExtraTrailingParamDocs) {
|
|
return false;
|
|
}
|
|
|
|
report(`@${targetTagName} "${tag.name}" does not match an existing function parameter.`, null, tag);
|
|
return true;
|
|
}
|
|
|
|
if (functionParameterName === '<ObjectPattern>' || functionParameterName === '<ArrayPattern>') {
|
|
return false;
|
|
}
|
|
|
|
if (functionParameterName !== tag.name.trim()) {
|
|
const expectedNames = functionParameterNames.join(', ');
|
|
const actualNames = paramTagsNonNested.map(([, {
|
|
name
|
|
}]) => {
|
|
return name.trim();
|
|
}).join(', ');
|
|
report(`Expected @${targetTagName} names to be "${expectedNames}". Got "${actualNames}".`, null, tag);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
});
|
|
};
|
|
|
|
const validateParameterNamesDeep = (targetTagName, allowExtraTrailingParamDocs, jsdocParameterNames, jsdoc, report) => {
|
|
let lastRealParameter;
|
|
return jsdocParameterNames.some(({
|
|
name: jsdocParameterName,
|
|
idx
|
|
}) => {
|
|
const isPropertyPath = jsdocParameterName.includes('.');
|
|
|
|
if (isPropertyPath) {
|
|
if (!lastRealParameter) {
|
|
report(`@${targetTagName} path declaration ("${jsdocParameterName}") appears before any real parameter.`, null, jsdoc.tags[idx]);
|
|
return true;
|
|
}
|
|
|
|
let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));
|
|
|
|
if (pathRootNodeName.endsWith('[]')) {
|
|
pathRootNodeName = pathRootNodeName.slice(0, -2);
|
|
}
|
|
|
|
if (pathRootNodeName !== lastRealParameter) {
|
|
report(`@${targetTagName} path declaration ("${jsdocParameterName}") root node name ("${pathRootNodeName}") ` + `does not match previous real parameter name ("${lastRealParameter}").`, null, jsdoc.tags[idx]);
|
|
return true;
|
|
}
|
|
} else {
|
|
lastRealParameter = jsdocParameterName;
|
|
}
|
|
|
|
return false;
|
|
});
|
|
};
|
|
|
|
var _default = (0, _iterateJsdoc.default)(({
|
|
context,
|
|
jsdoc,
|
|
jsdocNode,
|
|
report,
|
|
utils
|
|
}) => {
|
|
const _ref = context.options[0] || {},
|
|
allowExtraTrailingParamDocs = _ref.allowExtraTrailingParamDocs;
|
|
|
|
const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');
|
|
|
|
if (!jsdocParameterNamesDeep.length) {
|
|
return;
|
|
}
|
|
|
|
const functionParameterNames = utils.getFunctionParameterNames();
|
|
const targetTagName = utils.getPreferredTagName({
|
|
tagName: 'param'
|
|
});
|
|
const isError = validateParameterNames(targetTagName, allowExtraTrailingParamDocs, functionParameterNames, jsdoc, jsdocNode, utils, report);
|
|
|
|
if (isError) {
|
|
return;
|
|
}
|
|
|
|
validateParameterNamesDeep(targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report);
|
|
}, {
|
|
meta: {
|
|
fixable: 'code',
|
|
schema: [{
|
|
additionalProperties: false,
|
|
properties: {
|
|
allowExtraTrailingParamDocs: {
|
|
type: 'boolean'
|
|
}
|
|
},
|
|
type: 'object'
|
|
}],
|
|
type: 'suggestion'
|
|
}
|
|
});
|
|
|
|
exports.default = _default;
|
|
module.exports = exports.default;
|
|
//# sourceMappingURL=checkParamNames.js.map
|