🐛 fix(vscode): 代码阅读注释里的链接指到别的文件时用预览打开,和 ⌘ 点击跳到定义走同一条路

This commit is contained in:
cruldra committed 2026-10-08 07:17:26 +08:00
1 parent e04a90c877
commit bc7380c716
9 files changed
+123 -72

No files matched your search

+4 -13
View File
@@ -9,6 +9,7 @@ import { shellCommandRules } from './commands/shellCommands'
import { systemCommandRules } from './commands/systemCommands'
import { BlockFilter } from './editor/blockFilter'
import { NEXT_OCCURRENCE, PREVIOUS_OCCURRENCE } from './editor/occurrenceNavigation'
import { languageOf, openingFor } from './editor/openTarget'
import { PATH_PREVIEW_SCHEME } from './editor/pathPreview'
import { PREVIEW_VIEW_TYPE, PreviewEditorProvider } from './editor/previewEditor'
import { showPreview, showSource } from './editor/switchEditor'
@@ -59,20 +60,10 @@ const LANGUAGE_IDS_CONTEXT = 'superpowers.codeReader.languageIds'
const FILES_VIEW = 'superpowers.codeReader.files'
const OPEN_COMMAND = 'superpowers.codeReader.open'
/** 按 VS Code 的判断(含 files.associations)取文件的 languageId;图片等二进制文件打不开成文本,返回 undefined。 */
async function languageOf(uri: Uri): Promise<string | undefined> {
try {
return (await workspace.openTextDocument(uri)).languageId
}
catch {
return undefined
}
}
/** 侧栏点文件:语言受支持就用预览打开,否则用普通编辑器。 */
/** 侧栏点文件:语言受支持就用预览打开,否则用 VS Code 默认的打开方式(见 openingFor)。 */
async function openFile(uri: Uri, registry: CodeReaderRegistry): Promise<void> {
const languageId = await languageOf(uri)
if (languageId !== undefined && registry.languageFor(languageId))
const opening = openingFor(await languageOf(uri), languageId => registry.languageFor(languageId) !== undefined)
if (opening.kind === 'preview')
// 和 vscode.open 一样按「预览标签」打开(用户关了 workbench.editor.enablePreview 时 VS Code 自会固定)
await commands.executeCommand('vscode.openWith', uri, PREVIEW_VIEW_TYPE, { preview: true })
else