diff --git a/cli/src/init.rs b/cli/src/init.rs index 4c51bc4b..a47ef637 100644 --- a/cli/src/init.rs +++ b/cli/src/init.rs @@ -406,6 +406,7 @@ pub fn generate_grammar_files( |path| { let contents = fs::read_to_string(path)?; if !contents.contains("bun") { + eprintln!("Replacing index.js"); generate_file(path, INDEX_JS_TEMPLATE, language_name, &generate_opts)?; } Ok(()) @@ -732,8 +733,13 @@ pub fn generate_grammar_files( allow_update, |path| generate_file(path, BUILD_ZIG_TEMPLATE, language_name, &generate_opts), |path| { - eprintln!("Replacing build.zig"); - generate_file(path, BUILD_ZIG_TEMPLATE, language_name, &generate_opts) + let contents = fs::read_to_string(path)?; + if !contents.contains("b.pkg_hash.len") { + eprintln!("Replacing build.zig"); + generate_file(path, BUILD_ZIG_TEMPLATE, language_name, &generate_opts) + } else { + Ok(()) + } }, )?; @@ -742,8 +748,13 @@ pub fn generate_grammar_files( allow_update, |path| generate_file(path, BUILD_ZIG_ZON_TEMPLATE, language_name, &generate_opts), |path| { - eprintln!("Replacing build.zig.zon"); - generate_file(path, BUILD_ZIG_ZON_TEMPLATE, language_name, &generate_opts) + let contents = fs::read_to_string(path)?; + if !contents.contains(".name = .tree_sitter_") { + eprintln!("Replacing build.zig.zon"); + generate_file(path, BUILD_ZIG_ZON_TEMPLATE, language_name, &generate_opts) + } else { + Ok(()) + } }, )?; @@ -753,8 +764,13 @@ pub fn generate_grammar_files( allow_update, |path| generate_file(path, ROOT_ZIG_TEMPLATE, language_name, &generate_opts), |path| { - eprintln!("Replacing root.zig"); - generate_file(path, ROOT_ZIG_TEMPLATE, language_name, &generate_opts) + let contents = fs::read_to_string(path)?; + if contents.contains("ts.Language") { + eprintln!("Replacing root.zig"); + generate_file(path, ROOT_ZIG_TEMPLATE, language_name, &generate_opts) + } else { + Ok(()) + } }, )?; diff --git a/cli/src/templates/build.zig b/cli/src/templates/build.zig index 6b9540c2..c2428289 100644 --- a/cli/src/templates/build.zig +++ b/cli/src/templates/build.zig @@ -68,13 +68,16 @@ pub fn build(b: *std.Build) !void { }); tests.root_module.addImport(library_name, module); - var args = try std.process.argsWithAllocator(b.allocator); - defer args.deinit(); - while (args.next()) |a| { - if (std.mem.eql(u8, a, "test")) { - const ts_dep = b.lazyDependency("tree_sitter", .{}) orelse continue; - tests.root_module.addImport("tree-sitter", ts_dep.module("tree-sitter")); - break; + // HACK: fetch tree-sitter dependency only when testing this module + if (b.pkg_hash.len == 0) { + var args = try std.process.argsWithAllocator(b.allocator); + defer args.deinit(); + while (args.next()) |a| { + if (std.mem.eql(u8, a, "test")) { + const ts_dep = b.lazyDependency("tree_sitter", .{}) orelse continue; + tests.root_module.addImport("tree-sitter", ts_dep.module("tree-sitter")); + break; + } } }