7 unstable releases

0.4.2 Apr 14, 2024
0.4.1 Jul 21, 2023
0.4.0 Jun 24, 2023
0.3.1 Apr 3, 2023
0.1.0 May 8, 2019

#2028 in Procedural macros

Download history 9/week @ 2024-05-13 23/week @ 2024-05-20 21/week @ 2024-05-27 19/week @ 2024-06-03 21/week @ 2024-06-10 16/week @ 2024-06-17 9/week @ 2024-06-24 48/week @ 2024-07-01 8/week @ 2024-07-08 7/week @ 2024-07-15 37/week @ 2024-07-22 15/week @ 2024-07-29 14/week @ 2024-08-05 8/week @ 2024-08-12 13/week @ 2024-08-19 28/week @ 2024-08-26

65 downloads per month

MIT/Apache

10KB
99 lines

Data structures that describe Syn's syntax tree.

The Syn syntax tree is made up of more than 200 types. Occasionally it can come up that you need to implement some behavior across them all.

  • For example the Rust integration for AST Explorer wants to turn a syntax tree from Syn into a JavaScript value understood by the platform's existing cross-language syntax tree visualization code.

  • As another example from within Syn itself, the traits and implementations of the visit, visit_mut, and fold modules can be generated programmatically from a description of the syntax tree.

To make this type of code as easy as possible to implement in any language, every Syn release comes with a machine-readable description of that version of the syntax tree as a JSON file syn.json. This syn-codegen crate provides the canonical data structures for parsing and making use of the representation in syn.json from Rust code.

Example

use syn_codegen::Definitions;

const SYN: &str = include_str!("syn.json");

fn main() {
    let defs: Definitions = serde_json::from_str(SYN).unwrap();

    for node in &defs.types {
        println!("syn::{}", node.ident);
    }
}

Dependencies

~0.9–1.3MB
~23K SLoC