Spaces:
Sleeping
Sleeping
# typst-syntax | |
Welcome to the Typst Syntax crate! This crate manages the syntactical structure | |
of Typst by holding some core abstractions like assigning source file ids, | |
parsing Typst syntax, creating an Abstract Syntax Tree (AST), initializing | |
source "spans" (for linking AST elements to their outputs in a document), and | |
syntax highlighting. | |
Below are quick descriptions of the files you might be editing if you find | |
yourself here :) | |
- `lexer.rs`: The lexical foundation of the parser, which converts a string of | |
characters into tokens. | |
- `parser.rs`: The main parser definition, preparing a Concrete Syntax Tree made | |
of nested vectors of `SyntaxNode`s. | |
- `reparser.rs`: The algorithm for reparsing the minimal required amount of | |
source text for efficient incremental compilation. | |
- `ast.rs`: The conversion layer between the Concrete Syntax Tree of the parser | |
and the Abstract Syntax Tree used for code evaluation. | |
- `node.rs` & `span.rs`: The underlying data structure for the Concrete Syntax | |
Tree and the definitions of source spans used for efficiently pointing to a | |
syntax node in things like diagnostics. | |
- `kind.rs` & `set.rs`: An enum with all syntactical tokens and nodes and | |
bit-set data structure for sets of `SyntaxKind`s. | |
- `highlight.rs`: Extracting of syntax highlighting information out of the | |
Concrete Syntax Tree (and outputting as HTML). | |
- `path.rs`, `file.rs`, `package.rs`: The system for interning project and | |
package paths as unique file IDs and resolving them in a virtual filesystem | |
(not actually for _opening_ files). | |
The structure of the parser is largely adapted from Rust Analyzer. Their | |
[documentation][ra] is a good reference for a number of the design decisions | |
around the parser and AST. | |
The reparsing algorithm is explained in Section 4 of [Martin's thesis][thesis] | |
(though it changed a bit since). | |
[ra]: https://github.com/rust-lang/rust-analyzer/blob/master/docs/dev/syntax.md | |
[thesis]: | |
https://www.researchgate.net/publication/364622490_Fast_Typesetting_with_Incremental_Compilation | |