语言扩展概述
Visual Studio Code 通过语言扩展为不同的编程语言提供智能编辑功能。VS Code 的核心编辑器本身并未内置语言支持,而是提供了一组 API 来启用丰富的语言功能。
例如,HTML 扩展使用这些 API 来为 HTML 文件显示语法高亮。同样,当你键入 console. 且 IntelliSense 中出现 log 时,这正是 Typescript Language Features 扩展在起作用。
VS Code 将其中一些扩展与编辑器捆绑在一起,以便从一开始就为你提供丰富的语言支持。
语言功能大致可分为两类
声明式语言功能
声明式语言功能在配置文件中定义。例如随 VS Code 一起打包的 html、css 和 typescript-basic 扩展,它们提供了以下声明式语言功能的子集
- 语法高亮
- 代码片段补全
- 括号匹配
- 括号自动闭合
- 括号自动包围
- 注释切换
- 自动缩进
- 折叠(按标记)
我们有三篇指南,指导如何编写提供声明式语言功能的语言扩展。
- 语法高亮指南:VS Code 使用 TextMate 语法来实现语法高亮。本指南将引导你编写一个简单的 TextMate 语法并将其转换为 VS Code 扩展。
- 代码片段补全指南:本指南介绍如何将一组代码片段打包到扩展中。
- 语言配置指南:VS Code 允许扩展为任何编程语言定义语言配置。该文件控制着基本的编辑功能,例如注释切换、括号匹配/包围以及区域折叠(旧版)。
编程式语言功能
编程式语言功能包括自动补全、错误检查和转到定义。这些功能通常由语言服务器(Language Server)驱动,这是一个分析你的项目以提供动态功能的程序。一个例子是随 VS Code 一起打包的 typescript-language-features 扩展。它利用 TypeScript 语言服务来提供编程式语言功能,例如
- 悬停提示信息 (
vscode.languages.registerHoverProvider) - 自动补全 (
vscode.languages.registerCompletionItemProvider) - 转到定义 (
vscode.languages.registerDefinitionProvider) - 错误检查
- 格式化
- 重构
- 折叠
以下是编程式语言功能的完整列表。

语言服务器协议 (Language Server Protocol)
通过标准化语言服务器(静态代码分析工具)与语言客户端(通常是源代码编辑器)之间的通信,语言服务器协议允许扩展作者编写一个代码分析程序并在多个编辑器中重用它。
在编程式语言功能列表中,你可以找到所有 VS Code 语言功能及其如何映射到语言服务器协议规范的说明。
我们提供了一份深入的指南,解释如何在 VS Code 中实现语言服务器扩展

特殊情况
多根工作区支持
当用户打开多根工作区时,你可能需要相应地调整你的语言服务器扩展。本主题讨论了支持多根工作区的多种方法。
嵌入式语言
嵌入式语言在 Web 开发中很常见。例如,HTML 中的 CSS/JavaScript,以及 JavaScript/TypeScript 中的 GraphQL。嵌入式语言主题讨论了如何使语言功能可用于嵌入式语言。