向 Zed 添加新语言

LSP

Zed 使用 语言服务器协议 提供语言支持。理论上,这意味着我们可以支持任何具有 LSP 服务器的语言。

语法高亮

定义语法高亮规则

我们使用树形解析器查询匹配某些属性以高亮显示。

简单示例

(property_identifier) @property
const font: FontFamily = {
  weight: "normal",
  underline: false,
  italic: false,
};

匹配属性标识符并使用标识符 @property 高亮显示它。在上述示例中,将高亮显示 weightunderlineitalic

复杂示例

(_
  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)

; ...