From 473f0a1a4dfe26c22d8089b6e756de274210e189 Mon Sep 17 00:00:00 2001 From: ObserverOfTime Date: Tue, 19 Nov 2024 18:07:28 +0200 Subject: [PATCH] feat(bindings): update some binding files - setup.py - binding.gyp --- cli/src/init.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 6 deletions(-) diff --git a/cli/src/init.rs b/cli/src/init.rs index 819842c8..4d5f26af 100644 --- a/cli/src/init.rs +++ b/cli/src/init.rs @@ -6,6 +6,7 @@ use std::{ use anyhow::{anyhow, Context, Result}; use heck::{ToKebabCase, ToShoutySnakeCase, ToSnakeCase, ToUpperCamelCase}; +use indoc::indoc; use regex::Regex; use semver::Version; use serde::{Deserialize, Serialize}; @@ -515,9 +516,19 @@ pub fn generate_grammar_files( generate_file(path, JS_BINDING_CC_TEMPLATE, language_name, &generate_opts) })?; - missing_path(repo_path.join("binding.gyp"), |path| { - generate_file(path, BINDING_GYP_TEMPLATE, language_name, &generate_opts) - })?; + missing_path_else( + repo_path.join("binding.gyp"), + allow_update, + |path| generate_file(path, BINDING_GYP_TEMPLATE, language_name, &generate_opts), + |path| { + let contents = fs::read_to_string(path)?; + if contents.contains("fs.exists(") { + write_file(path, contents.replace("fs.exists(", "fs.existsSync(")) + } else { + Ok(()) + } + }, + )?; Ok(()) })?; @@ -624,9 +635,48 @@ pub fn generate_grammar_files( Ok(()) })?; - missing_path(repo_path.join("setup.py"), |path| { - generate_file(path, SETUP_PY_TEMPLATE, language_name, &generate_opts) - })?; + missing_path_else( + repo_path.join("setup.py"), + allow_update, + |path| generate_file(path, SETUP_PY_TEMPLATE, language_name, &generate_opts), + |path| { + let mut contents = fs::read_to_string(path)?; + if contents.contains("sources.extend") || !contents.contains("egg_info") { + contents = contents + .replace("sources.extend", "sources.append") + .replace( + "from setuptools.command.build import build\n", + indoc! {" + from setuptools.command.build import build + from setuptools.command.egg_info import egg_info + "}, + ) + .replace( + "setup(\n", + indoc! {r#" + class EggInfo(egg_info): + def find_sources(self): + super().find_sources() + self.filelist.recursive_include("queries", "*.scm") + self.filelist.include("src/tree_sitter/*.h") + + + setup( + "#}, + ) + .replace( + "\"bdist_wheel\": BdistWheel\n", + indoc! {r#" + "bdist_wheel": BdistWheel, + "egg_info": EggInfo, + "#}, + ); + write_file(path, contents) + } else { + Ok(()) + } + }, + )?; missing_path(repo_path.join("pyproject.toml"), |path| { generate_file(