向 Zed 添加新语言
LSP
Zed 使用 语言服务器协议 提供语言支持。理论上,这意味着我们可以支持任何具有 LSP 服务器的语言。
语法高亮
定义语法高亮规则
我们使用树形解析器查询匹配某些属性以高亮显示。
简单示例
(property_identifier) @property
const font: FontFamily = {
weight: "normal",
underline: false,
italic: false,
};
匹配属性标识符并使用标识符 @property
高亮显示它。在上述示例中,将高亮显示 weight
、underline
和 italic
。
复杂示例
(_
return_type: (type_annotation
[
(type_identifier) @type.return
(generic_type
name: (type_identifier) @type.return)
]))
function buildDefaultSyntax(colorScheme: Theme): Partial<Syntax> {
// ...
}
匹配函数返回类型,并使用标识符 @type.return
高亮显示类型。在上述示例中,将高亮显示 Partial
。
示例 - Typescript
以下是我们 TypeScript 的 highlights.scm
的示例部分
; crates/zed/src/languages/typescript/highlights.scm
; Variables
(identifier) @variable
; Properties
(property_identifier) @property
; Function and method calls
(call_expression
function: (identifier) @function)
(call_expression
function: (member_expression
property: (property_identifier) @function.method))
; Function and method definitions
(function
name: (identifier) @function)
(function_declaration
name: (identifier) @function)
(method_definition
name: (property_identifier) @function.method)
; ...