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ómVí 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õigit, git-base, github, emmet, npm, merge-conflict, references-view, debug-auto-launch, terminal-suggestTính năng lớn viết dưới dạng extension
Xác thựcgithub-authentication, microsoft-authenticationCung cấp đăng nhập
AIcopilot (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ểnvscode-api-tests, vscode-colorize-tests, vscode-test-resolver, extension-editingPhụ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ứ ba

3.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ữ) sql cho 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;
-- #endregion

3.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

Extensionmain (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/extensiononLanguage:typescript…
markdown-language-features./out/extension./dist/browser/extensiononLanguage: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ặc npm 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.sh hoặ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