diff --git a/README.md b/README.md index e84cfc5e5..a8fc5d7bd 100644 --- a/README.md +++ b/README.md @@ -22332,6 +22332,39 @@ function quux () {} function quux () {} // Settings: {"jsdoc":{"mode":"closure"}} // Message: Syntax error in supresss type: blah + +/** + * @param {Object[]} employees + * @param {string} employees[.name - The name of an employee. + */ +function quux () {} +// Message: Invalid name: unpaired brackets + +/** + * @param {Object[]} employees + * @param {string} [] - The name of an employee. + */ +function quux () {} +// Message: Invalid name: empty name + +/** + * @param {Object[]} employees + * @param {string} [] - The name of an employee. + */ +function quux () {} +// Message: Invalid name: empty name + +/** + * @param {string} [name=] - The name of an employee. + */ +function quux () {} +// Message: Invalid name: empty default value + +/** + * @param {string} [name==] - The name of an employee. + */ +function quux () {} +// Message: Invalid name: invalid default value syntax ```` The following patterns are not considered problems: @@ -22663,6 +22696,18 @@ function quux() { */ function quux ( id, options ) { } + + +/** + * Assign the project to a list of employees. + * @param {Object[]} employees - The employees who are responsible for the project. + * @param {string} employees[].name - The name of an employee. + * @param {string} employees[].department - The employee's department. + */ +function assign(employees) { + // ... +} +// "jsdoc/valid-types": ["error"|"warn", {"allowEmptyNamepaths":true,"checkSeesForNamepaths":false}] ```` diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 77ba8d9d9..5dcc64d62 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -19,8 +19,8 @@ const extraTypes = [ 'Array', 'Object', 'RegExp', 'Date', 'Function', ]; -// https://www.typescriptlang.org/docs/handbook/utility-types.html const typescriptGlobals = [ + // https://www.typescriptlang.org/docs/handbook/utility-types.html 'Partial', 'Required', 'Readonly', diff --git a/src/rules/validTypes.js b/src/rules/validTypes.js index b3c77889c..e4569991b 100644 --- a/src/rules/validTypes.js +++ b/src/rules/validTypes.js @@ -158,6 +158,16 @@ export default iterateJsdoc(({ return true; }; + if (tag.problems.length) { + const msg = tag.problems.reduce((str, { + message, + }) => { + return str + '; ' + message; + }, '').slice(2); + report(`Invalid name: ${msg}`, null, tag); + continue; + } + if (tag.tag === 'borrows') { const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '') .trim(); diff --git a/test/rules/assertions/validTypes.js b/test/rules/assertions/validTypes.js index 072d4fef5..5feb20b4e 100644 --- a/test/rules/assertions/validTypes.js +++ b/test/rules/assertions/validTypes.js @@ -974,6 +974,84 @@ export default { ], ignoreReadme: true, }, + { + code: ` + /** + * @param {Object[]} employees + * @param {string} employees[.name - The name of an employee. + */ + function quux () {} + + `, + errors: [ + { + line: 4, + message: 'Invalid name: unpaired brackets', + }, + ], + }, + { + code: ` + /** + * @param {Object[]} employees + * @param {string} [] - The name of an employee. + */ + function quux () {} + + `, + errors: [ + { + line: 4, + message: 'Invalid name: empty name', + }, + ], + }, + { + code: ` + /** + * @param {Object[]} employees + * @param {string} [] - The name of an employee. + */ + function quux () {} + + `, + errors: [ + { + line: 4, + message: 'Invalid name: empty name', + }, + ], + }, + { + code: ` + /** + * @param {string} [name=] - The name of an employee. + */ + function quux () {} + + `, + errors: [ + { + line: 3, + message: 'Invalid name: empty default value', + }, + ], + }, + { + code: ` + /** + * @param {string} [name==] - The name of an employee. + */ + function quux () {} + + `, + errors: [ + { + line: 3, + message: 'Invalid name: invalid default value syntax', + }, + ], + }, ], valid: [ { @@ -1619,5 +1697,25 @@ export default { `, ignoreReadme: true, }, + { + code: ` + + /** + * Assign the project to a list of employees. + * @param {Object[]} employees - The employees who are responsible for the project. + * @param {string} employees[].name - The name of an employee. + * @param {string} employees[].department - The employee's department. + */ + function assign(employees) { + // ... + } + `, + options: [ + { + allowEmptyNamepaths: true, + checkSeesForNamepaths: false, + }, + ], + }, ], };