mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-07 11:11:30 +00:00
1.7 KiB
1.7 KiB
Adding New Languages to Zed
LSP
Zed uses the Language Server Protocol to provide language support. This means, in theory, we can support any language that has an LSP server.
Syntax Highlighting
Defining syntax highlighting rules
We use tree-sitter queries to match certain properties to highlight.
Simple Example:
(property_identifier) @property
const font: FontFamily = {
weight: "normal",
underline: false,
italic: false,
}
Match a property identifier and highlight it using the identifier @property
. In the above example, weight
, underline
, and italic
would be highlighted.
Complex example:
(_
return_type: (type_annotation
[
(type_identifier) @type.return
(generic_type
name: (type_identifier) @type.return)
]))
function buildDefaultSyntax(colorScheme: Theme): Partial<Syntax> {
// ...
}
Match a function return type, and highlight the type using the identifier @type.return
. In the above example, Partial
would be highlighted.
Example - Typescript
Here is an example portion of our highlights.scm
for TypeScript:
; 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)
; ...