@@ -95,6 +95,9 @@ const TEST_BINDING_PY_TEMPLATE: &str = include_str!("./templates/test_binding.py
9595const PACKAGE_SWIFT_TEMPLATE : & str = include_str ! ( "./templates/package.swift" ) ;
9696const TESTS_SWIFT_TEMPLATE : & str = include_str ! ( "./templates/tests.swift" ) ;
9797
98+ const BUILD_ZIG_TEMPLATE : & str = include_str ! ( "./templates/build.zig" ) ;
99+ const BUILD_ZIG_ZON_TEMPLATE : & str = include_str ! ( "./templates/build.zig.zon" ) ;
100+
98101const TREE_SITTER_JSON_SCHEMA : & str =
99102 "https://tree-sitter.github.io/tree-sitter/assets/schemas/config.schema.json" ;
100103
@@ -314,18 +317,37 @@ pub fn generate_grammar_files(
314317 }
315318
316319 // Write .gitignore file
317- missing_path ( repo_path. join ( ".gitignore" ) , |path| {
318- generate_file ( path, GITIGNORE_TEMPLATE , language_name, & generate_opts)
319- } ) ?;
320+ missing_path_else (
321+ repo_path. join ( ".gitignore" ) ,
322+ allow_update,
323+ |path| generate_file ( path, GITIGNORE_TEMPLATE , language_name, & generate_opts) ,
324+ |path| {
325+ let contents = fs:: read_to_string ( path) ?;
326+ if !contents. contains ( "Zig artifacts" ) {
327+ eprintln ! ( "Replacing .gitignore" ) ;
328+ generate_file ( path, GITIGNORE_TEMPLATE , language_name, & generate_opts) ?;
329+ }
330+ Ok ( ( ) )
331+ } ,
332+ ) ?;
320333
321334 // Write .gitattributes file
322335 missing_path_else (
323336 repo_path. join ( ".gitattributes" ) ,
324337 allow_update,
325338 |path| generate_file ( path, GITATTRIBUTES_TEMPLATE , language_name, & generate_opts) ,
326339 |path| {
327- let contents = fs:: read_to_string ( path) ?;
328- write_file ( path, contents. replace ( "bindings/c/* " , "bindings/c/** " ) ) ?;
340+ let mut contents = fs:: read_to_string ( path) ?;
341+ contents = contents. replace ( "bindings/c/* " , "bindings/c/** " ) ;
342+ if !contents. contains ( "Zig bindings" ) {
343+ contents. push ( '\n' ) ;
344+ contents. push_str ( indoc ! { "
345+ # Zig bindings
346+ build.zig linguist-generated
347+ build.zig.zon linguist-generated
348+ " } ) ;
349+ }
350+ write_file ( path, contents) ?;
329351 Ok ( ( ) )
330352 } ,
331353 ) ?;
@@ -658,6 +680,17 @@ pub fn generate_grammar_files(
658680 } ) ?;
659681 }
660682
683+ // Generate Zig bindings
684+ if tree_sitter_config. bindings . zig {
685+ missing_path ( repo_path. join ( "build.zig" ) , |path| {
686+ generate_file ( path, BUILD_ZIG_TEMPLATE , language_name, & generate_opts)
687+ } ) ?;
688+
689+ missing_path ( repo_path. join ( "build.zig.zon" ) , |path| {
690+ generate_file ( path, BUILD_ZIG_ZON_TEMPLATE , language_name, & generate_opts)
691+ } ) ?;
692+ }
693+
661694 Ok ( ( ) )
662695}
663696
0 commit comments