✨ feat(vscode): 代码阅读注释里不带路径的引用 [Name] 能点,本文件定义的优先、再找导入的
This commit is contained in:
1 parent
0958506681
commit
300d8a07b9
16 files changed
+600
-124
No files matched your search
@@ -5,7 +5,7 @@ import { onMessage, postMessage } from './vscode'
|
||||
/** 坏链接悬停上的字,走页面上统一的 data-tooltip,不用原生 title。 */
|
||||
const MISSING = '找不到'
|
||||
|
||||
/** 文件或符号没有的仓库链接:红色波浪线,悬停「找不到」。问到之前先是普通链接。 */
|
||||
/** 文件或符号没有的仓库链接、找不到的不带路径的引用:红色波浪线,悬停「找不到」。问到之前先是普通链接。 */
|
||||
function paintLink(anchor: HTMLAnchorElement, broken: boolean): void {
|
||||
const tip = anchor.getAttribute('data-tooltip')
|
||||
if (broken) {
|
||||
@@ -36,16 +36,31 @@ function paint(links: RepoLinks): void {
|
||||
}
|
||||
|
||||
/**
|
||||
* 注释、说明、问 AI 的回答里的仓库路径链接:点了发给扩展端打开(不走 webview 把 http 链接交给外部打开的那条),
|
||||
* 画出来之后把路径发去问哪些文件没有。
|
||||
* 注释、说明、问 AI 的回答里的仓库路径链接,和注释里不带路径的引用:点了发给扩展端打开(不走 webview 把 http 链接交给外部打开的那条),
|
||||
* 画出来之后把路径、引用发去问哪些文件没有、哪些引用找不到;文档换了版本再问一次(引用跟着源码变)。
|
||||
*/
|
||||
export function useRepoLinks(): void {
|
||||
const [links] = useState(() => new RepoLinks(postMessage))
|
||||
|
||||
useEffect(() => {
|
||||
let timer = 0
|
||||
const scan = (): void => {
|
||||
window.clearTimeout(timer)
|
||||
timer = window.setTimeout(() => {
|
||||
const anchors = [...document.querySelectorAll<HTMLAnchorElement>('.cr-markdown a')]
|
||||
for (const anchor of anchors)
|
||||
paintLink(anchor, links.isBroken(anchor.getAttribute('href') ?? ''))
|
||||
links.scan(anchors.map(anchor => anchor.getAttribute('href') ?? ''))
|
||||
}, 50)
|
||||
}
|
||||
const off = onMessage((msg) => {
|
||||
if (msg.type === 'document') {
|
||||
links.stale()
|
||||
scan()
|
||||
return
|
||||
}
|
||||
if (msg.type === 'repoLinksChecked') {
|
||||
if (links.checked(msg.id, msg.missing))
|
||||
if (links.checked(msg.id, msg.missing, msg.unresolved))
|
||||
paint(links)
|
||||
return
|
||||
}
|
||||
@@ -67,16 +82,6 @@ export function useRepoLinks(): void {
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
}
|
||||
let timer = 0
|
||||
const scan = (): void => {
|
||||
window.clearTimeout(timer)
|
||||
timer = window.setTimeout(() => {
|
||||
const anchors = [...document.querySelectorAll<HTMLAnchorElement>('.cr-markdown a')]
|
||||
for (const anchor of anchors)
|
||||
paintLink(anchor, links.isBroken(anchor.getAttribute('href') ?? ''))
|
||||
links.scan(anchors.map(anchor => anchor.getAttribute('href') ?? ''))
|
||||
}, 50)
|
||||
}
|
||||
const observer = new MutationObserver(scan)
|
||||
observer.observe(document.body, { childList: true, subtree: true })
|
||||
document.addEventListener('click', onClick, true)
|
||||
|
||||
Reference in new issue
Block a user