Built-in Extensions (extension tích hợp sẵn)
← Về MOC · Trước: Extension Host & RPC
1. Tổng quan
Thư mục extensions/ chứa 97 extension đi kèm sản phẩm. Chúng được viết bằng chính Extension API công khai (giống extension bạn tự viết) và chạy trong extension host – không truy cập được nội bộ src/vs.
Đây là "kho ví dụ" chất lượng nhất
Muốn học viết extension, đọc built-in extension là cách tốt nhất: code do chính đội VS Code viết, dùng API ổn định, được bảo trì liên tục.
2. Phân loại
| Nhóm | Ví dụ thư mục | Đặc điểm |
|---|---|---|
| Ngôn ngữ cơ bản (grammar + cấu hình) | sql, json, python, csharp, cpp, go, rust, yaml, xml… | Chỉ khai báo trong package.json, không có code – tô màu cú pháp, comment, ngoặc |
Hỗ trợ ngôn ngữ nâng cao (hậu tố -language-features) | typescript-language-features, json-language-features, html-…, css-…, markdown-…, php-… | Có code: gợi ý (IntelliSense), Go to Definition, kiểm lỗi… |
| Tính năng lõi | git, git-base, github, emmet, npm, merge-conflict, references-view, debug-auto-launch, terminal-suggest | Tính năng lớn viết dưới dạng extension |
| Xác thực | github-authentication, microsoft-authentication | Cung cấp đăng nhập |
| AI | copilot (GitHub Copilot Chat) | Xem Agents Window & AI trong repo |
Theme (12 thư mục theme-*) | theme-defaults, theme-monokai, theme-solarized-dark, theme-seti (icon)… | Chỉ khai báo themes/iconThemes |
| Test / công cụ phát triển | vscode-api-tests, vscode-colorize-tests, vscode-test-resolver, extension-editing | Phục vụ kiểm thử VS Code |
README chính thức giải thích quy ước: extension có hậu tố language-features cung cấp hỗ trợ ngôn ngữ “giàu” (gợi ý, Go to Definition). Ví dụ json lo tô màu JSON, còn json-language-features lo hỗ trợ nâng cao.
3. Ví dụ chi tiết: extension sql (liên quan T-SQL)
Đây là extension chỉ có khai báo, không có code TypeScript:
extensions/sql/
├── package.json ← khai báo ngôn ngữ + grammar
├── language-configuration.json ← comment, ngoặc, folding
├── syntaxes/sql.tmLanguage.json ← grammar tô màu (TextMate)
├── build/update-grammar.mjs ← script cập nhật grammar từ repo nguồn
└── cgmanifest.json ← ghi nguồn gốc thành phần bên thứ ba3.1 package.json – phần contributes
{
"contributes": {
"languages": [{
"id": "sql",
"extensions": [".sql", ".dsql"],
"aliases": ["MS SQL", "T-SQL"],
"configuration": "./language-configuration.json"
}],
"grammars": [{
"language": "sql",
"scopeName": "source.sql",
"path": "./syntaxes/sql.tmLanguage.json"
}]
}
}Giải thích:
languages: đăng ký language ID (mã ngôn ngữ)sqlcho file.sql,.dsql. Tên hiển thị dưới thanh trạng thái là alias đầu tiên “MS SQL”.grammars: gắn TextMate grammar (bộ quy tắc regex để tô màu cú pháp, định dạng gốc từ trình soạn thảo TextMate) cho ngôn ngữ.
Hệ quả thực tế
Grammar mặc định nhắm tới T-SQL / MS SQL. Khi viết PostgreSQL (
pgsql), một số cú pháp riêng (ví dụ$$ ... $$,::type) có thể tô màu chưa chuẩn – lúc đó cần extension chuyên cho PostgreSQL từ Marketplace.
3.2 language-configuration.json
{
"comments": {
"lineComment": "--", // Ctrl+/ chèn "--"
"blockComment": ["/*", "*/"] // Shift+Alt+A chèn /* */
},
"autoClosingPairs": [
{ "open": "N'", "close": "'", "notIn": ["string", "comment"] }, // gõ N' tự đóng ' (chuỗi Unicode T-SQL)
{ "open": "'", "close": "'", "notIn": ["string", "comment"] }
],
"folding": {
"markers": { // thu gọn vùng code giữa 2 marker
"start": "^\\s*--\\s*#region\\b",
"end": "^\\s*--\\s*#endregion\\b"
}
}
}Ứng dụng ngay: trong file .sql bạn có thể thu gọn khối code dài bằng marker:
-- #region Tính số dư cuối kỳ tài khoản
SELECT TK, SUM(PS_NO) - SUM(PS_CO) AS SO_DU -- số dư = phát sinh nợ - phát sinh có
FROM dbo.CHUNG_TU_CT
GROUP BY TK;
-- #endregion3.3 Nguồn grammar
File grammar ghi rõ nó được chuyển đổi từ repo microsoft/vscode-mssql (SQL.plist), và muốn sửa lỗi tô màu thì gửi PR vào repo gốc đó, không sửa trực tiếp trong vscode. Lệnh cập nhật: npm run update-grammar (trong thư mục extensions/sql).
4. So sánh manifest một số extension
| Extension | main (Node) | browser (Web) | Activation event tiêu biểu |
|---|---|---|---|
sql | — | — | Không cần (chỉ khai báo) |
git | ./out/main | — | * (kích hoạt ngay), onFileSystem:git |
typescript-language-features | ./out/extension | ./dist/browser/extension | onLanguage:typescript… |
markdown-language-features | ./out/extension | ./dist/browser/extension | onLanguage:markdown… |
copilot | ./dist/extension | — | onStartupFinished… |
Nhận xét: extension có cả main và browser chạy được cả desktop lẫn VS Code for the Web.
5. Phát triển và test built-in extension
- Build:
npm run watch(hoặcnpm run gulp compile-extensions– xem Build & Run từ mã nguồn). - Test: theo wiki Writing Tests, extension test dùng hệ thống test extension công khai; chạy bằng
./scripts/test-integration.shhoặc cấu hình launch trong từng thư mục extension (ví dụ “VS Code Git Tests” trong.vscode/launch.json). Xem Testing – kiểm thử.
Liên kết
- Tự viết extension đầu tiên: Thực hành: viết extension đầu tiên