File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -21,18 +21,22 @@ pub fn run(options: Options) -> std::io::Result<()> {
2121 Language {
2222 name: "QL" . to_owned( ) ,
2323 node_types: tree_sitter_ql:: NODE_TYPES ,
24+ desugar: None ,
2425 } ,
2526 Language {
2627 name: "Dbscheme" . to_owned( ) ,
2728 node_types: tree_sitter_ql_dbscheme:: NODE_TYPES ,
29+ desugar: None ,
2830 } ,
2931 Language {
3032 name: "Blame" . to_owned( ) ,
3133 node_types: tree_sitter_blame:: NODE_TYPES ,
34+ desugar: None ,
3235 } ,
3336 Language {
3437 name: "JSON" . to_owned( ) ,
3538 node_types: tree_sitter_json:: NODE_TYPES ,
39+ desugar: None ,
3640 } ,
3741 ] ;
3842
Original file line number Diff line number Diff line change @@ -21,10 +21,12 @@ pub fn run(options: Options) -> std::io::Result<()> {
2121 Language {
2222 name: "Ruby" . to_owned( ) ,
2323 node_types: tree_sitter_ruby:: NODE_TYPES ,
24+ desugar: None ,
2425 } ,
2526 Language {
2627 name: "Erb" . to_owned( ) ,
2728 node_types: tree_sitter_embedded_template:: NODE_TYPES ,
29+ desugar: None ,
2830 } ,
2931 ] ;
3032
Original file line number Diff line number Diff line change 11pub struct Language {
22 pub name : String ,
33 pub node_types : & ' static str ,
4+ /// Optional yeast desugaring configuration. When set with an
5+ /// `output_node_types_yaml`, the generator uses that YAML for the
6+ /// dbscheme/QL library instead of `node_types`. The `rules` field is
7+ /// unused at code-generation time; only the schema matters.
8+ pub desugar : Option < yeast:: DesugaringConfig > ,
49}
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ use std::io::Write;
66use std:: path:: PathBuf ;
77
88use crate :: node_types;
9+ use yeast;
910
1011pub mod dbscheme;
1112pub mod language;
@@ -68,7 +69,20 @@ pub fn generate(
6869 let token_name = format ! ( "{}_token" , & prefix) ;
6970 let tokeninfo_name = format ! ( "{}_tokeninfo" , & prefix) ;
7071 let reserved_word_name = format ! ( "{}_reserved_word" , & prefix) ;
71- let nodes = node_types:: read_node_types_str ( & prefix, language. node_types ) ?;
72+ let effective_node_types: String = match language
73+ . desugar
74+ . as_ref ( )
75+ . and_then ( |c| c. output_node_types_yaml )
76+ {
77+ Some ( yaml) => yeast:: node_types_yaml:: convert ( yaml) . map_err ( |e| {
78+ std:: io:: Error :: other ( format ! (
79+ "Failed to convert YAML node-types to JSON for {}: {e}" ,
80+ language. name
81+ ) )
82+ } ) ?,
83+ None => language. node_types . to_string ( ) ,
84+ } ;
85+ let nodes = node_types:: read_node_types_str ( & prefix, & effective_node_types) ?;
7286 let ( dbscheme_entries, mut ast_node_members, token_kinds) = convert_nodes ( & nodes) ;
7387 ast_node_members. insert ( & token_name) ;
7488 writeln ! ( & mut dbscheme_writer, "/*- {} dbscheme -*/" , language. name) ?;
You can’t perform that action at this time.
0 commit comments