🔎 搜索词
getJSDocTags
getTextOfJSDocComment
🕗 版本与回归信息
在5.5.4版本上进行测试,之前版本也存在。
⏯ Playground链接
https://stackblitz.com/edit/gettextofjsdoccomment-dbm6rj?file=main.ts,package-lock.json
💻 代码
import ts from 'typescript';
const filename = 'example.ts';
const code = `
/**
*
* @see {@link entry()}
*/
class Foo {};
`;
const sourceFile = ts.createSourceFile(
filename,
code,
ts.ScriptTarget.ESNext,
true
);
const visitNode = (node: ts.Node) => {
ts.forEachChild(node, visitNode);
const tags = ts.getJSDocTags(node);
if (tags.length) {
tags.forEach((tag) => {
const comment = tag.comment!.slice(1) as any;
console.log(
tag.tagName.getText(),
'> ',
ts.getTextOfJSDocComment(comment)
);
//console.log(comment);
});
}
};
ts.forEachChild(sourceFile, visitNode);
🙁 实际行为
getTextOfJSDocComment
返回 {@link entry ()}
。注意两者之间的空格。
🙂 预期行为
getTextOfJSDocComment
返回 {@link entry()}
。注意两者之间的空格。
关于此问题的其他信息
这是一个 #58584 的变体。
还注意到 {@link core/inject}
变为 {@link core /inject}
时也会出现这个问题。
1条答案
按热度按时间qxsslcnc1#
解析器处理这些情况如下:
TypeScript/src/compiler/utilitiesPublic.ts
第1289行: 936a79b
| | constspace=link.name&&(link.text===""||link.text.startsWith("://")) ? "" : " "; |
格式化程序在
name
和text
之间添加空格,只有两种情况下省略空格。@sandersn,我们是否应该在解析器中添加特殊节点,还是最好直接在格式化程序中处理这些已知情况('/'
和'('
)?