Lộ trình học tập repo VS Code

← Về MOC

Kiến thức nền cần có

  • TypeScript cơ bản: interface, class, generic, decorator, async/await. Tài liệu chính thức: TypeScript Handbook (typescriptlang.org/docs/handbook).
  • Node.js & npm cơ bản: cài package, chạy script.
  • Git: fork, branch, pull request.
  • (Tùy chọn) HTML/CSS/DOM nếu muốn sửa giao diện.

Giai đoạn 1 – Người dùng nâng cao viết extension (1–2 tuần)

Mục tiêu: hiểu Extension API, chưa cần build repo.

#Việc làmGhi chú tham chiếu
1Đọc tổng quan Code - OSS và cấu trúc repoTổng quan: Code - OSS và Visual Studio Code, Cấu trúc thư mục gốc của repo
2Làm Hello World bằng yo code, chạy F5Thực hành: viết extension đầu tiên
3Làm bài “SQL Helper” (status bar + command + setting)Thực hành: viết extension đầu tiên
4Đọc extension sql và json trong repo – hiểu grammar & language configurationBuilt-in Extensions – extension tích hợp sẵn
5Đọc tài liệu Extension Host, hiểu extensionKind, main/browserExtension Host & RPC

✅ Tự kiểm tra: giải thích được activation event, contribution point, vì sao context.subscriptions quan trọng.

Giai đoạn 2 – Hiểu kiến trúc lõi (2–3 tuần)

Mục tiêu: đọc hiểu code trong src/vs.

#Việc làmGhi chú
1Nắm 7 lớp và 6 môi trường đíchKiến trúc phân lớp (Layers), Môi trường đích (Target Environments)
2Vẽ lại sơ đồ tiến trình trên giấyKiến trúc đa tiến trình (Multi-process)
3Lần theo luồng khởi động trong codeLuồng khởi động (Startup flow)
4Đọc src/vs/platform/instantiation/common/instantiation.tsDependency Injection & Services
5Đọc trọn thư mục workbench/contrib/timeline (nhỏ, đủ thành phần)Contribution Model & Registry
6Đọc base/common/lifecycle.ts, event.tsDisposable & Event
7Đọc hướng dẫn observables, thử viết lại ví dụ hóa đơnObservables (lập trình phản ứng)
8Lần theo một API: createStatusBarItem từ vscode.d.ts → mainThreadStatusBar.tsExtension Host & RPC

✅ Tự kiểm tra: trả lời được “Nếu tôi thêm một service mới chỉ dùng cho desktop, tôi đặt file ở đâu, đăng ký thế nào, và import từ đâu?”

Giai đoạn 3 – Build, debug, test (1–2 tuần)

#Việc làmGhi chú
1Cài môi trường (hoặc dùng Codespaces) và build thành côngBuild & Run từ mã nguồn
2Chạy ./scripts/code.sh, thử Reload Window sau khi sửa một chuỗi giao diệnBuild & Run từ mã nguồn
3Đặt breakpoint ở renderer và extension hostDebug VS Code
4Chạy unit test một file bằng npm run test-node -- --run ...Testing – kiểm thử
5Viết thêm 1 test case cho strings.test.ts (chỉ để luyện, không cần gửi PR)Testing – kiểm thử

Giai đoạn 4 – Đóng góp thật (liên tục)

#Việc làmGhi chú
1Đọc kỹ quy ước code và chạy eslint trên file sửaCoding Guidelines – quy ước viết code
2Tìm issue nhãn good first issue, bình luận xin nhậnQuy trình đóng góp (Issue, PR, API)
3Gửi PR nhỏ, có test, liên kết issueQuy trình đóng góp (Issue, PR, API)
4(Nâng cao) Tìm hiểu Agents Window, ChatAgents Window & AI trong repo

Bài tập tổng hợp (mức khó tăng dần)

  1. Dễ – Tìm nơi khai báo setting editor.fontSize. Gợi ý: tìm chuỗi 'editor.fontSize' sẽ không thấy, vì setting editor được đăng ký theo kiểu khác – hãy mở src/vs/editor/common/config/editorOptions.ts và tìm class EditorFontSize cùng dòng fontSize: register(new EditorFontSize()). Bài học: không phải setting nào cũng đăng ký trực tiếp qua registerConfiguration.
  2. Dễ – Liệt kê 5 built-in extension có cả main và browser trong package.json.
  3. Trung bình – Theo công thức ở Extension Host & RPC, lần theo API vscode.window.showInformationMessage tới tận file mainThread… xử lý.
  4. Trung bình – Vẽ sơ đồ phụ thuộc của contrib timeline: nó import từ những contrib nào khác? Có vi phạm quy tắc “không với vào internals” không?
  5. Khó – Tạo (trên bản fork, không gửi PR) một contribution “Hello Status” trong workbench/contrib/helloStatus/browser/helloStatus.contribution.ts: dùng registerWorkbenchContribution2 với WorkbenchPhase.Eventually để ghi log qua ILogService. Nhớ import file này từ workbench.common.main.ts và chạy npm run valid-layers-check.

Liên kết