Doc Reader
1次資料を読んでいて詰まった箇所にだけ、事前に生成しておいた解説をホバーで出す VS Code 拡張。
考え方
要約を読むと「他人の言葉」で理解することになる。だから二次資料は作らない。
主役はあくまで原文で、解説は読む速度を落としている箇所(知らない語・意味の掴めないブロック)
にだけ脇から出す。AIの出力を読ませないための、AIの使い方。
学術的には ScholarPhi (CHI 2021, Head et al.) が論文向けに実証した方向性で、
IDE のホバー機能をコード以外の資料にも一般化するもの。
責務の分離
この拡張は「中身を知らないレンダラ」である。
| 担当 |
中身 |
| 拡張機能(このリポジトリ) |
JSON を読む → 該当範囲に印をつける → ホバーで出す |
| 説明データ (JSON) |
別環境で生成する。業務知識はすべてこちら側 |
| 生成スクリプト |
拡張には同梱しない。完全に別プロセス |
拡張側に業務知識・ドメイン固有のロジックを一切入れないため、拡張は公開しても
業務情報が漏れない。またJSONスキーマが変わっても拡張を作り直さずに済む。
ホバー時にAIへ問い合わせることはしない。 事前生成した JSON を引くだけ。
表示方針
既定では下線を出さない。原文の見た目を完全に保つ。
Doc Reader: 下線の表示を切り替える(docReader.toggleUnderlines)を実行した間だけ、
解説のある箇所すべてに下線が浮かび上がる。
使い方
- ワークスペースに
.docreader/ を作り、docs/schema.md の形式で JSON を置く
(pool / anchors / notes の3種類。notes が最後に上書きする)
- コードを開くと、解説のある語にポインタを乗せたときだけホバーが出る
- PDF は右クリック →「エディターを選択」→
Doc Reader: PDF で開く。
既定のビューアは奪わないので、明示的に選ばないと従来どおりに開く
コマンド
| コマンド |
すること |
Doc Reader: 状態を表示 |
読み込んだエントリ数と、読めなかったファイルを出力チャンネルに出す |
Doc Reader: 説明データを読み直す |
JSON を読み直す(ファイル変更時は自動でも走る) |
Doc Reader: 下線の表示を切り替える |
解説のある箇所の下線を出す/消す |
設定
| キー |
既定 |
すること |
docReader.dataPaths |
[".docreader"] |
説明データを探す場所。後に書いたものほど優先 |
docReader.displayFields |
["what","why","source"] |
ホバーに出す fields のキーと順序 |
docReader.requireSource |
true |
source が空のエントリを出さない |
docReader.overlapOrder |
"narrowFirst" |
重なったときの並び順 |
docReader.maxHoverEntries |
5 |
1つのホバーに並べる最大件数 |
docReader.visibleLayers |
[] |
表示する layer。空なら制限なし |
docReader.minSalience |
1 |
この値未満の salience を隠す |
拡張は layer や fields のキーの意味を知らない。
JSON 側で使った名前をそのまま書く。
開発
npm install
npm run compile # 1回ビルド
npm run watch # 監視ビルド
npm run typecheck # 型チェックのみ
npm test # 単体テスト + VS Code 統合テスト
VS Code でこのフォルダを開いて F5 を押すと、拡張が読み込まれた2つ目のウィンドウ
(Extension Development Host) が起動する。Marketplace への公開はテストには不要。
テスト用のワークスペースは sample/。
sample/docs/sample.pdf は node scripts/make-sample-pdf.mjs で作り直せる。
Webview(PDF側)の中身は外から触れないので、確かめたいことを Webview に計算させて
返させている(probe / hoverProbe)。本物の Electron・本物の CSP の上で測っている。
進捗
docs/plan.md が正。ここはその要約。
- [x] Phase 0 — 拡張の雛形。F5 で起動する
- [x] Phase 1 — データ層 + コード側ホバー
- [x] Phase 2 — 範囲・入れ子・下線の制御
- [x] Phase 3 — PDF ビューア。テキストレイヤーの文字座標検証
- [x] Phase 4 — PDF 側の自前ホバー
- [ ] Phase 5 — 配布(任意)
ライセンス
MIT。取り込んだ OSS のライセンスは third-party-licenses/ を参照。