✨ feat(vscode): 代码阅读预览按住 ⌘ / Ctrl 点名字跳到定义

This commit is contained in:
cruldra committed 2026-09-25 12:54:45 +08:00
1 parent e5db1a2e65
commit 4e146eb48f
20 files changed
+870 -60

No files matched your search

+18 -3
View File
@@ -1,11 +1,13 @@
import type { ReactElement } from 'react'
import type { BlockTreeState } from './BlockTree'
import type { DocumentMessage } from './types'
import type { DocumentMessage, Reveal } from './types'
import type { ViewState } from './viewState'
import { TriangleAlert } from 'lucide-react'
import { useCallback, useEffect, useMemo, useState } from 'react'
import { SelectMenu } from '@/components/ui/select-menu'
import { BlockLevel } from './BlockTree'
import { useDefinitionLinks } from './useDefinitionLinks'
import { useReveal } from './useReveal'
import { useScrollPosition } from './useScrollPosition'
import { onMessage, postMessage, viewState } from './vscode'
@@ -24,12 +26,25 @@ export function App(): ReactElement | null {
const [doc, setDoc] = useState<DocumentMessage | null>(null)
const [view, setView] = useState<BlockModes>(savedBlockModes)
const [focusId, setFocusId] = useState<string | null>(null)
/** 等着滚过去的位置:新预览第一份文档带的,或已开着的预览收到的 reveal */
const [reveal, setReveal] = useState<Reveal | null>(null)
const expand = useCallback((ids: string[]) => setView(prev => ({ ...prev, collapsed: prev.collapsed.filter(id => !ids.includes(id)) })), [])
const revealed = useCallback(() => setReveal(null), [])
useScrollPosition(doc)
useReveal(doc, reveal, view.collapsed, expand, revealed)
useDefinitionLinks(doc?.version)
useEffect(() => {
const off = onMessage((msg) => {
if (msg.type === 'document')
setDoc(msg)
switch (msg.type) {
case 'document':
setDoc(msg)
if (msg.reveal)
setReveal(msg.reveal)
return
case 'reveal':
setReveal({ line: msg.line, definition: msg.definition })
}
})
postMessage({ type: 'ready' })
return off