Skip to content

Commit 680cf1d

Browse files
committed
fix(valid-types): re-allow namepaths in name-definers like typedef in non-typescript mode; fixes #1557
1 parent 87464a6 commit 680cf1d

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

docs/rules/valid-types.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ function quux() {
243243
/**
244244
* @typedef {string} module:abc/def
245245
*/
246-
// Settings: {"jsdoc":{"mode":"permissive"}}
246+
// Settings: {"jsdoc":{"mode":"typescript"}}
247247
// Message: Syntax error in name: module:abc/def
248248

249249
/**
@@ -983,5 +983,10 @@ class Test {
983983
*/
984984
method() { return this; }
985985
}
986+
987+
/**
988+
* @typedef {Object} module:src/core/Player~mediaFormat
989+
*/
990+
// Settings: {"jsdoc":{"mode":"jsdoc"}}
986991
````
987992

src/rules/validTypes.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,12 @@ const tryParsePathIgnoreError = (path, mode) => {
101101

102102
/**
103103
* @param {string} name
104-
* @param {import('jsdoc-type-pratt-parser').ParseMode|"permissive"} mode
104+
* @param {import('jsdoc-type-pratt-parser').ParseMode} mode
105105
* @returns {boolean}
106106
*/
107107
const tryParseNameIgnoreError = (name, mode) => {
108108
try {
109-
parseName(name, mode === 'permissive' ? 'jsdoc' : mode);
109+
parseName(name, mode);
110110

111111
return true;
112112
} catch {
@@ -396,8 +396,14 @@ export default iterateJsdoc(({
396396

397397
const hasNamePosition = utils.tagMightHaveName(tag.tag) &&
398398
Boolean(tag.name);
399-
if (hasNamePosition && !tryParseNameIgnoreError(tag.name, mode)) {
399+
if (
400+
hasNamePosition &&
401+
mode === 'typescript' &&
402+
!tryParseNameIgnoreError(tag.name, mode)
403+
) {
400404
report(`Syntax error in name: ${tag.name}`, null, tag);
405+
} else if (hasNamePosition && mode !== 'typescript') {
406+
validNamepathParsing(tag.name, tag.tag);
401407
}
402408

403409
for (const inlineTag of tag.inlineTags) {

test/rules/assertions/validTypes.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ export default /** @type {import('../index.js').TestCases} */ ({
264264
],
265265
settings: {
266266
jsdoc: {
267-
mode: 'permissive',
267+
mode: 'typescript',
268268
},
269269
},
270270
},
@@ -2018,5 +2018,17 @@ export default /** @type {import('../index.js').TestCases} */ ({
20182018
}
20192019
`,
20202020
},
2021+
{
2022+
code: `
2023+
/**
2024+
* @typedef {Object} module:src/core/Player~mediaFormat
2025+
*/
2026+
`,
2027+
settings: {
2028+
jsdoc: {
2029+
mode: 'jsdoc',
2030+
},
2031+
},
2032+
},
20212033
],
20222034
});

0 commit comments

Comments
 (0)