type_sitter_gen/lib.rs
1#![doc = include_str!("../README.md")]
2
3use proc_macro2::TokenStream;
4use syn::parse_quote;
5
6pub use crate::error::*;
7pub use crate::node_types::*;
8pub(crate) use crate::print_ctx::*;
9pub use crate::queries::*;
10pub use anon_unions::*;
11
12mod anon_unions;
13mod error;
14mod mk_syntax;
15mod node_types;
16mod print_ctx;
17mod queries;
18mod vec_set;
19
20/// = `parse_quote!(::type_sitter)`. The default path to the `type_sitter` crate.
21pub fn type_sitter() -> syn::Path {
22 parse_quote!(::type_sitter)
23}
24
25/// = `parse_quote!(::type_sitter::raw)`. The default path to re-exported `tree-sitter` or
26/// `yak-sitter` from `type-sitter`.
27pub fn type_sitter_raw() -> syn::Path {
28 parse_quote!(::type_sitter::raw)
29}
30
31/// = `parse_quote!(::type_sitter_lib)`. The default path to the `type_sitter_lib` crate.
32pub fn type_sitter_lib() -> syn::Path {
33 parse_quote!(::type_sitter_lib)
34}
35
36/// = `parse_quote!(::tree_sitter)`. The default path to the `tree_sitter` crate.
37pub fn tree_sitter() -> syn::Path {
38 parse_quote!(::tree_sitter)
39}
40
41/// = `parse_quote!(::yak_sitter)`. Path to a wrapper which provides convenience functions for
42/// tree-sitter nodes at the cost of worse performance.
43pub fn yak_sitter() -> syn::Path {
44 parse_quote!(::yak_sitter)
45}
46
47/// = `parse_quote!(super::nodes)`. The default path to the typed nodes crate from the queries
48/// crate. What you will often pass to [generate_queries] and co.
49pub fn super_nodes() -> syn::Path {
50 parse_quote!(super::nodes)
51}
52
53/// Utility to pretty-print tokens.
54///
55/// It's used by [`GeneratedNodeTokens`] and [`GeneratedQueryTokens`] to provide readable output
56/// when using `type-sitter-gen` or `type-sitter-cli`. `type-sitter-proc` doesn't get
57/// pretty-printed tokens because the proc-macro returns a [`TokenStream`] instead of a string.
58fn pretty_print(tokens: &TokenStream) -> String {
59 let str = tokens.to_string();
60 syn::parse_file(&str)
61 .map(|f| prettyplease::unparse(&f))
62 .unwrap_or_else(|err| {
63 eprintln!("Failed to pretty print tokens: {}", err);
64 str
65 })
66}