drscrewdriver/dsh-canvas-tsx-sidebar ↗★ 0
dsh-canvas-tsx-sidebar
DSH web plugin (dsh-better-sidebar consumer): render Qoder Canvas `*.canvas.tsx` reports as a structured page in the right sidebar. Static parse only — no code execution. 适合需要静态解析并直观预览 `*.canvas.tsx` 报告而无需执行代码的用户。
インストール
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:drscrewdriver/dsh-canvas-tsx-sidebarドキュメント
README 全文を読む ↗使用
两个入口:
| 入口 | 触发方式 | 行为 |
|---|---|---|
| 文件查看器(接管) | 在文件树里点开任意 .tsx | .canvas.tsx → 结构化页面 + 预览/代码 切换;其他 .tsx → 源码视图 |
| 页签 | 右侧栏 + 菜单 → Canvas 报告 | 手动输入路径查看,不必先在编辑器里打开文件 |
文件查看器可在 Side 卡设置里关闭,关闭后该类型回落内置的代码查看器。
打开某一个文件就渲染那一个文件 —— 插件不扫描工作区。
为什么文件查看器必须认领整个 .tsx
exts: ['tsx'] 是唯一可行的认领方式,代价是它也会认领非 canvas 的 .tsx。证据全部来自
better-sidebar 源码与生态实测:
| # | 约束 | 证据 |
|---|---|---|
| L1 | extOf() 只取最后一段扩展名 → extOf('a.canvas.tsx') === 'tsx' | src/client/paths.ts:80-85 |
| L2 | exts: ['tsx'] 会认领工作区全部 .tsx,且 priority 0 压掉内置 code(-100)的 CodeMirror | service.ts:847-875 |
| L3 | detect 只在 head 字节可用时调用,而 head 仅来自二进制 fs.read —— 文本 .tsx 永远走不到该分支 | service.ts:860 |
| L4 | descriptor 认领后 component 必须渲染,无委托/回退 API | EditorHost.tsx:349,486 |
| L5 | 生态插件 dsh-code-nav 的 LANG_EXT 已含 tsx 并以 priority: 10 认领 | dsh-code-nav/src/lang-registry.js |
→ .canvas.tsx 的判定只能在自有组件内完成。因此:查看器认领全部 .tsx(canvas 走页面,
其余走源码),页签作为不经过文件认领的第二入口保留。