语言扩展概述
Visual Studio Code 通过语言扩展为不同的编程语言提供智能编辑功能。VS Code 不在核心编辑器中提供内置的语言支持,而是提供一组 API 来实现丰富的语言特性。
例如,HTML 扩展使用这些 API 来显示 HTML 文件的语法高亮。 类似地,当您键入 console.
并且 log
出现在 IntelliSense 中时,是 Typescript Language Features 扩展在工作。
VS Code 将其中一些扩展与编辑器捆绑在一起,以便从一开始就为您提供丰富的语言支持。
语言特性大致可以分为两类
声明式语言特性
声明式语言特性在配置文件中定义。例如 VS Code 捆绑的 html、css 和 typescript-basic 扩展,这些扩展提供以下声明式语言特性的子集
- 语法高亮
- 代码片段补全
- 括号匹配
- 括号自动关闭
- 括号自动环绕
- 注释切换
- 自动缩进
- 折叠(通过标记)
我们有三个编写提供声明式语言特性的语言扩展的指南。
- 语法高亮指南:VS Code 使用 TextMate 语法进行语法高亮。 本指南将引导您完成编写简单的 TextMate 语法并将其转换为 VS Code 扩展的过程。
- 代码片段补全指南:本指南说明如何将一组代码片段捆绑到扩展中。
- 语言配置指南:VS Code 允许扩展为任何编程语言定义语言配置。 此文件控制基本的编辑功能,例如注释切换、括号匹配/环绕和区域折叠(旧版)。
程序化语言特性
程序化语言特性包括自动补全、错误检查和跳转到定义。 这些特性通常由语言服务器提供支持,语言服务器是一个分析您的项目以提供动态特性的程序。 一个例子是 VS Code 中捆绑的 typescript-language-features
扩展。 它利用 TypeScript 语言服务来提供程序化语言特性,例如
- 悬停信息(
vscode.languages.registerHoverProvider
) - 自动补全(
vscode.languages.registerCompletionItemProvider
) - 跳转到定义(
vscode.languages.registerDefinitionProvider
) - 错误检查
- 格式化
- 重构
- 折叠
这是 程序化语言特性的完整列表。
语言服务器协议
通过标准化语言服务器(静态代码分析工具)和语言客户端(通常是源代码编辑器)之间的通信,语言服务器协议允许扩展作者编写一个代码分析程序并在多个编辑器中重用它。
在程序化语言特性列表中,您可以找到所有 VS Code 语言特性及其如何映射到 语言服务器协议规范 的列表。
我们提供了一份深入的指南,说明如何在 VS Code 中实现语言服务器扩展
特殊情况
多根工作区支持
当用户打开一个多根工作区时,您可能需要相应地调整您的语言服务器扩展。 本主题讨论了支持多根工作区的多种方法。
嵌入式语言
嵌入式语言在 Web 开发中很常见。 例如,HTML 中的 CSS/JavaScript,以及 JavaScript/TypeScript 中的 GraphQL。嵌入式语言主题讨论了如何使语言特性可用于嵌入式语言。