treesitter-types-c 0.1.1

Pre-generated strongly-typed AST types for C (tree-sitter-c)
Documentation

Strongly-typed AST types for C, auto-generated from tree-sitter-c's node-types.json.

This crate is generated by treesitter-types and is automatically kept up to date when a new version of the grammar crate is released.

These types have been tested by parsing the Git source code.

See the Tree-sitter project for more information about the underlying parser framework.

Example

use treesitter_types_c::*;

// A minimal C hello-world program.
let src = b"\
#include <stdio.h>

int main() {
    printf(\"Hello, World!\\n\");
    return 0;
}
";

// Parse the source with tree-sitter and convert into typed AST.
let mut parser = tree_sitter::Parser::new();
parser.set_language(&tree_sitter_c::LANGUAGE.into()).unwrap();
let tree = parser.parse(src, None).unwrap();
let tu = TranslationUnit::from_node(tree.root_node(), src).unwrap();

// The translation unit has two top-level children.
assert_eq!(tu.children.len(), 2);

// 1) The #include directive.
let TranslationUnitChildren::PreprocInclude(include) = &tu.children[0] else {
    panic!("expected a preproc include");
};
assert_eq!(include.span.start.row, 0);

// 2) The `main` function definition with return type `int`.
let TranslationUnitChildren::FunctionDefinition(func) = &tu.children[1] else {
    panic!("expected a function definition");
};
let TypeSpecifier::PrimitiveType(return_type) = &func.r#type else {
    panic!("expected a primitive type");
};
assert_eq!(return_type.text(), "int");

// The declarator holds the function name and parameter list.
let Declarator::FunctionDeclarator(decl) = &func.declarator else {
    panic!("expected a function declarator");
};
assert!(decl.parameters.children.is_empty()); // no parameters