diff --git a/Cargo.lock b/Cargo.lock index 745703f84..c4967d49a 100644 Binary files a/Cargo.lock and b/Cargo.lock differ diff --git a/Cargo.toml b/Cargo.toml index d7a04800b..a6611b482 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -93,11 +93,11 @@ incremental = true codegen-units = 256 [workspace.dependencies] -anstyle = "1.0.8" -anyhow = "1.0.89" -bstr = "1.11.0" -cc = "1.2.1" -clap = { version = "4.5.21", features = [ +anstyle = "1.0.10" +anyhow = "1.0.94" +bstr = "1.11.1" +cc = "1.2.4" +clap = { version = "4.5.23", features = [ "cargo", "derive", "env", @@ -111,40 +111,40 @@ ctrlc = { version = "3.4.5", features = ["termination"] } dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } dirs = "5.0.1" filetime = "0.2.25" -fs4 = "0.9.1" +fs4 = "0.12.0" git2 = "0.19.0" glob = "0.3.1" heck = "0.5.0" html-escape = "0.2.13" -indexmap = "2.5.0" +indexmap = "2.7.0" indoc = "2.0.5" lazy_static = "1.5.0" -libloading = "0.8.5" +libloading = "0.8.6" log = { version = "0.4.22", features = ["std"] } memchr = "2.7.4" -once_cell = "1.19.0" +once_cell = "1.20.2" path-slash = "0.2.1" pretty_assertions = "1.4.1" rand = "0.8.5" -regex = "1.10.6" -regex-syntax = "0.8.4" -rustc-hash = "2.0.0" -semver = { version = "1.0.23", features = ["serde"] } -serde = { version = "1.0.215", features = ["derive"] } -serde_derive = "1.0.210" +regex = "1.11.1" +regex-syntax = "0.8.5" +rustc-hash = "2.1.0" +semver = { version = "1.0.24", features = ["serde"] } +serde = { version = "1.0.216", features = ["derive"] } +serde_derive = "1.0.216" serde_json = { version = "1.0.133", features = ["preserve_order"] } similar = "2.6.0" smallbitvec = "2.5.3" streaming-iterator = "0.1.9" tempfile = "3.14.0" -thiserror = "1.0.69" +thiserror = "2.0.7" tiny_http = "0.12.0" toml = "0.8.19" unindent = "0.2.3" -url = { version = "2.5.2", features = ["serde"] } +url = { version = "2.5.4", features = ["serde"] } walkdir = "2.5.0" -wasmparser = "0.218.0" -webbrowser = "1.0.2" +wasmparser = "0.221.2" +webbrowser = "1.0.3" tree-sitter = { version = "0.25.0", path = "./lib" } tree-sitter-generate = { version = "0.25.0", path = "./cli/generate" } diff --git a/cli/src/tests/proc_macro/Cargo.toml b/cli/src/tests/proc_macro/Cargo.toml index ef9919565..81a059540 100644 --- a/cli/src/tests/proc_macro/Cargo.toml +++ b/cli/src/tests/proc_macro/Cargo.toml @@ -12,7 +12,7 @@ workspace = true proc-macro = true [dependencies] -proc-macro2 = "1.0.86" +proc-macro2 = "1.0.92" quote = "1.0.37" rand = "0.8.5" -syn = { version = "2.0.79", features = ["full"] } +syn = { version = "2.0.90", features = ["full"] } diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 08455a91b..8052b94e8 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -45,21 +45,22 @@ std = ["regex/std", "regex/perf", "regex-syntax/unicode"] wasm = ["std", "wasmtime-c-api"] [dependencies] -regex = { version = "1.10.6", default-features = false, features = ["unicode"] } -regex-syntax = { version = "0.8.4", default-features = false } +regex = { version = "1.11.1", default-features = false, features = ["unicode"] } +regex-syntax = { version = "0.8.5", default-features = false } tree-sitter-language = { version = "0.1", path = "language" } streaming-iterator = "0.1.9" [dependencies.wasmtime-c-api] -version = "26.0.1" +version = "27.0.0" optional = true package = "wasmtime-c-api-impl" default-features = false -features = ["cranelift"] +features = ["cranelift", "gc-drc"] [build-dependencies] -bindgen = { version = "0.70.1", optional = true } +bindgen = { version = "0.71.1", optional = true } cc.workspace = true +serde_json.workspace = true [lib] path = "binding_rust/lib.rs" diff --git a/lib/binding_rust/bindings.rs b/lib/binding_rust/bindings.rs index 807bf019d..19ad2b778 100644 --- a/lib/binding_rust/bindings.rs +++ b/lib/binding_rust/bindings.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.70.1 */ +/* automatically generated by rust-bindgen 0.71.1 */ pub const TREE_SITTER_LANGUAGE_VERSION: u32 = 15; pub const TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION: u32 = 13; diff --git a/lib/binding_rust/build.rs b/lib/binding_rust/build.rs index a9e553def..255740afc 100644 --- a/lib/binding_rust/build.rs +++ b/lib/binding_rust/build.rs @@ -52,6 +52,33 @@ fn main() { #[cfg(feature = "bindgen")] fn generate_bindings(out_dir: &std::path::Path) { + use std::{process::Command, str::FromStr}; + + use bindgen::RustTarget; + + let output = Command::new("cargo") + .args(["metadata", "--format-version", "1"]) + .output() + .unwrap(); + + let metadata = serde_json::from_slice::(&output.stdout).unwrap(); + + let Some(rust_version) = metadata + .get("packages") + .and_then(|packages| packages.as_array()) + .and_then(|packages| { + packages.iter().find_map(|package| { + if package["name"] == "tree-sitter" { + package.get("rust_version").and_then(|v| v.as_str()) + } else { + None + } + }) + }) + else { + panic!("Failed to find tree-sitter package in cargo metadata"); + }; + const HEADER_PATH: &str = "include/tree_sitter/api.h"; println!("cargo:rerun-if-changed={HEADER_PATH}"); @@ -79,6 +106,8 @@ fn generate_bindings(out_dir: &std::path::Path) { .no_copy(no_copy.join("|")) .prepend_enum_name(false) .use_core() + .clang_arg("-D TREE_SITTER_FEATURE_WASM") + .rust_target(RustTarget::from_str(rust_version).unwrap()) .generate() .expect("Failed to generate bindings"); diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index 83bb30087..a5ccd6819 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -17,7 +17,7 @@ workspace = true [dependencies] anstyle.workspace = true anyhow.workspace = true -bindgen = { version = "0.70.1" } +bindgen = { version = "0.71.1" } cc.workspace = true clap.workspace = true git2.workspace = true diff --git a/xtask/src/generate.rs b/xtask/src/generate.rs index 1af04275f..d7fb8ba1d 100644 --- a/xtask/src/generate.rs +++ b/xtask/src/generate.rs @@ -1,6 +1,7 @@ -use std::{collections::BTreeSet, ffi::OsStr, fs, path::Path, process::Command}; +use std::{collections::BTreeSet, ffi::OsStr, fs, path::Path, process::Command, str::FromStr}; use anyhow::{Context, Result}; +use bindgen::RustTarget; use crate::{bail_on_err, GenerateFixtures}; @@ -67,6 +68,29 @@ pub fn run_fixtures(args: &GenerateFixtures) -> Result<()> { } pub fn run_bindings() -> Result<()> { + let output = Command::new("cargo") + .args(["metadata", "--format-version", "1"]) + .output() + .unwrap(); + + let metadata = serde_json::from_slice::(&output.stdout).unwrap(); + + let Some(rust_version) = metadata + .get("packages") + .and_then(|packages| packages.as_array()) + .and_then(|packages| { + packages.iter().find_map(|package| { + if package["name"] == "tree-sitter" { + package.get("rust_version").and_then(|v| v.as_str()) + } else { + None + } + }) + }) + else { + panic!("Failed to find tree-sitter package in cargo metadata"); + }; + let no_copy = [ "TSInput", "TSLanguage", @@ -91,6 +115,7 @@ pub fn run_bindings() -> Result<()> { .prepend_enum_name(false) .use_core() .clang_arg("-D TREE_SITTER_FEATURE_WASM") + .rust_target(RustTarget::from_str(rust_version).unwrap()) .generate() .expect("Failed to generate bindings");