Compile error while following `Rust Tree-sitter` instruction
cushionbadak opened this issue · comments
Problem
I got an error while following instruction in Rust Tree-sitter
readme.
README File: https://github.com/tree-sitter/tree-sitter/blob/01bf431261d5238fcf74b1e5e5612f1d259d013f/lib/binding_rust/README.md
Cargo.toml
:
[package]
name = "rust_struct_crusher_240418"
version = "0.1.0"
edition = "2021"
[build-dependencies]
cc="*"
[dependencies]
tree-sitter = "0.21.0"
tree-sitter-rust = "0.20.4"
src/main.rs
:
use tree_sitter::{Language, Parser};
fn main() {
let mut parser = Parser::new();
parser
.set_language(tree_sitter_rust::language())
.expect("Error loading Rust grammar");
}
Error message when cargo build
:
Compiling rust_struct_crusher_240418 v0.1.0 (/Volumes/T7/workspace/rust_struct_crusher_240418)
warning: unused import: `Language`
--> src/main.rs:1:19
|
1 | use tree_sitter::{Language, Parser};
| ^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
error[E0308]: mismatched types
--> src/main.rs:7:23
|
7 | .set_language(tree_sitter_rust::language())
| ------------ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `&Language`, found `Language`
| |
| arguments to this method are incorrect
|
note: method defined here
--> /Users/jb/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tree-sitter-0.21.0/binding_rust/lib.rs:450:12
|
450 | pub fn set_language(&mut self, language: &Language) -> Result<(), LanguageError> {
| ^^^^^^^^^^^^
For more information about this error, try `rustc --explain E0308`.
warning: `rust_struct_crusher_240418` (bin "rust_struct_crusher_240418") generated 1 warning
error: could not compile `rust_struct_crusher_240418` (bin "rust_struct_crusher_240418") due to 1 previous error; 1 warning emitted
Rust Version (rustc -Vv)
rustc 1.79.0-nightly (0d8b3346a 2024-04-14)
binary: rustc
commit-hash: 0d8b3346a3992ab11ea35ff0fb95a6864b91f797
commit-date: 2024-04-14
host: x86_64-apple-darwin
release: 1.79.0-nightly
LLVM version: 18.1.3
Cargo Version (cargo -Vv)
cargo 1.79.0-nightly (48eca1b16 2024-04-12)
release: 1.79.0-nightly
commit-hash: 48eca1b164695022295ce466b64b44e4e0228b08
commit-date: 2024-04-12
host: x86_64-apple-darwin
libgit2: 1.7.2 (sys:0.18.3 vendored)
libcurl: 8.4.0 (sys:0.4.72+curl-8.6.0 system ssl:(SecureTransport) LibreSSL/3.3.6)
ssl: OpenSSL 1.1.1w 11 Sep 2023
os: Mac OS 14.4.1 [64-bit]
Steps to reproduce
.
Expected behavior
Compile Success
Tree-sitter version (tree-sitter --version)
tree-sitter 0.21.0
Operating system/version
macOS 14.4.1
I guess #3275 has similar problem
If I modify the method call from .set_language(tree_sitter_rust::language())
to .set_language(&tree_sitter_rust::langauge())
, I got following error message:
Compiling rust_struct_crusher_240418 v0.1.0 (/Volumes/T7/workspace/rust_struct_crusher_240418)
warning: unused import: `Language`
--> src/main.rs:1:19
|
1 | use tree_sitter::{Language, Parser};
| ^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
error[E0308]: mismatched types
--> src/main.rs:7:23
|
7 | .set_language(&tree_sitter_rust::language())
| ------------ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `tree_sitter::Language`, found a different `tree_sitter::Language`
| |
| arguments to this method are incorrect
|
= note: `tree_sitter::Language` and `tree_sitter::Language` have similar names, but are actually distinct types
note: `tree_sitter::Language` is defined in crate `tree_sitter`
--> /Users/jb/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tree-sitter-0.20.10/binding_rust/lib.rs:43:1
|
43 | pub struct Language(*const ffi::TSLanguage);
| ^^^^^^^^^^^^^^^^^^^
note: `tree_sitter::Language` is defined in crate `tree_sitter`
--> /Users/jb/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tree-sitter-0.21.0/binding_rust/lib.rs:54:1
|
54 | pub struct Language(*const ffi::TSLanguage);
| ^^^^^^^^^^^^^^^^^^^
= note: perhaps two different versions of crate `tree_sitter` are being used?
note: method defined here
--> /Users/jb/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tree-sitter-0.21.0/binding_rust/lib.rs:450:12
|
450 | pub fn set_language(&mut self, language: &Language) -> Result<(), LanguageError> {
| ^^^^^^^^^^^^
For more information about this error, try `rustc --explain E0308`.
warning: `rust_struct_crusher_240418` (bin "rust_struct_crusher_240418") generated 1 warning
error: could not compile `rust_struct_crusher_240418` (bin "rust_struct_crusher_240418") due to 1 previous error; 1 warning emitted
I found that the version mismatch from tree-sitter-rust
repo's Cargo.toml
causes the problem.
[dependencies]
tree-sitter = "~0.20.10"
That version problem is resolved at tree-sitter-rust 0.21.0
https://github.com/tree-sitter/tree-sitter-rust/blob/473634230435c18033384bebaa6d6a17c2523281/Cargo.toml#L22-L23
[dependencies]
tree-sitter = ">=0.21.0"
I changed my application's Cargo.toml
dependency version from tree-sitter-rust = "0.20.4"
to tree-sitter-rust = "0.21"
, and the compile error vanished.
(though it requires .set_language(&tree_sitter_rust::langauge())
modification)
[package]
name = "rust_struct_crusher_240418"
version = "0.1.0"
edition = "2021"
[build-dependencies]
cc="*"
[dependencies]
tree-sitter = "0.21.0"
tree-sitter-rust = "0.21"