mirror of
https://github.com/github/codeql.git
synced 2026-07-31 15:33:00 +02:00
YEAST (YEAST Elaborates Abstract Syntax Trees) is a framework for
transforming tree-sitter parse trees before CodeQL extraction.
Core components:
- shared/yeast/ — Ast, Node, Schema, query matching engine, captures,
FreshScope, BuildCtx
- shared/yeast-macros/ — proc macros: query!, tree!, trees!, rule!
The query language is inspired by tree-sitter queries:
(assignment left: (_) @lhs right: (_) @rhs)
Templates support embedded Rust ({expr}), splicing ({..expr}),
computed literals (#{expr}), and fresh identifiers ($name).
The rule! macro combines query and transform:
rule!((for pattern: (_) @pat ...) => (call receiver: {val} ...))
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
22 lines
513 B
Rust
22 lines
513 B
Rust
//! (de)-serialize helpers for tree_sitter::Range
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
#[serde(remote = "tree_sitter::Point")]
|
|
pub struct Point {
|
|
pub row: usize,
|
|
pub column: usize,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
#[serde(remote = "tree_sitter::Range")]
|
|
pub struct Range {
|
|
pub start_byte: usize,
|
|
pub end_byte: usize,
|
|
#[serde(with = "Point")]
|
|
pub start_point: tree_sitter::Point,
|
|
#[serde(with = "Point")]
|
|
pub end_point: tree_sitter::Point,
|
|
}
|