From 0975ccfb7d7c567cbf21d24bf198ff9515af371e Mon Sep 17 00:00:00 2001 From: gered Date: Sun, 10 Nov 2024 11:40:02 -0500 Subject: [PATCH] update rust bindings to use tree-sitter-language --- Cargo.lock | 61 +++++++++++++++++++++++++++++++++++--------- Cargo.toml | 5 +++- bindings/rust/lib.rs | 16 +++++------- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index adb51b5..b755412 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,30 +4,45 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.18" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "cc" -version = "1.0.72" +version = "1.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +checksum = "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" +dependencies = [ + "shlex", +] [[package]] name = "memchr" -version = "2.4.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "regex" -version = "1.5.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", @@ -36,24 +51,46 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" [[package]] name = "tree-sitter" -version = "0.20.2" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c36be3222512d85a112491ae0cc280a38076022414f00b64582da1b7565ffd82" +checksum = "b67baf55e7e1b6806063b1e51041069c90afff16afcbbccd278d899f9d84bca4" dependencies = [ "cc", "regex", + "regex-syntax", + "streaming-iterator", + "tree-sitter-language", ] +[[package]] +name = "tree-sitter-language" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ddffe35a0e5eeeadf13ff7350af564c6e73993a24db62caee1822b185c2600" + [[package]] name = "tree-sitter-toml" version = "0.20.0" dependencies = [ "cc", "tree-sitter", + "tree-sitter-language", ] diff --git a/Cargo.toml b/Cargo.toml index 1e7523a..acbc2e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,10 @@ autoexamples = false path = "bindings/rust/lib.rs" [dependencies] -tree-sitter = "0.20" +tree-sitter-language = "0.1.2" + +[dev-dependencies] +tree-sitter = ">=0.22" [build-dependencies] cc = "1.0" diff --git a/bindings/rust/lib.rs b/bindings/rust/lib.rs index 49011e6..8821ae5 100644 --- a/bindings/rust/lib.rs +++ b/bindings/rust/lib.rs @@ -22,7 +22,7 @@ //! edition = "2021" //! "#; //! let mut parser = Parser::new(); -//! parser.set_language(tree_sitter_toml::language()).expect("Error loading TOML grammar"); +//! parser.set_language(&tree_sitter_toml::LANGUAGE.into()).expect("Error loading TOML grammar"); //! let parsed = parser.parse(code, None); //! # let parsed = parsed.unwrap(); //! # let root = parsed.root_node(); @@ -34,18 +34,16 @@ //! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html //! [tree-sitter]: https://tree-sitter.github.io/ -use tree_sitter::Language; +use tree_sitter_language::LanguageFn; extern "C" { - fn tree_sitter_toml() -> Language; + fn tree_sitter_toml() -> *const (); } -/// Returns the tree-sitter [Language][] for this grammar. +/// The tree-sitter [`LanguageFn`][LanguageFn] for this grammar. /// -/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html -pub fn language() -> Language { - unsafe { tree_sitter_toml() } -} +/// [LanguageFn]: https://docs.rs/tree-sitter-language/*/tree_sitter_language/struct.LanguageFn.html +pub const LANGUAGE: LanguageFn = unsafe { LanguageFn::from_raw(tree_sitter_toml) }; /// The source of the TOML tree-sitter grammar description. pub const GRAMMAR: &str = include_str!("../../grammar.js"); @@ -64,7 +62,7 @@ mod tests { fn can_load_grammar() { let mut parser = tree_sitter::Parser::new(); parser - .set_language(super::language()) + .set_language(&super::LANGUAGE.into()) .expect("Error loading TOML grammar"); } }