Use vendored tree-sitter-rust

ida_star
Wilfred Hughes 2021-08-15 16:50:43 +07:00
parent 8a6c7c8013
commit c80ce0d024
4 changed files with 25 additions and 15 deletions

12
Cargo.lock generated

@ -96,6 +96,7 @@ name = "difftastic"
version = "0.7.0"
dependencies = [
"atty",
"cc",
"clap",
"colored",
"diff",
@ -109,7 +110,6 @@ dependencies = [
"term_size",
"toml",
"tree-sitter",
"tree-sitter-rust",
"typed-arena",
]
@ -326,16 +326,6 @@ dependencies = [
"regex",
]
[[package]]
name = "tree-sitter-rust"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "784f7ef9cdbd4c895dc2d4bb785e95b4a5364a602eec803681db83d1927ddf15"
dependencies = [
"cc",
"tree-sitter",
]
[[package]]
name = "typed-arena"
version = "2.0.1"

@ -23,7 +23,9 @@ strsim = "0.10.0"
lazy_static = "1.4.0"
atty = "0.2.14"
tree-sitter = "0.19.5"
tree-sitter-rust = "0.19.0"
[dev-dependencies]
pretty_assertions = "0.6.1"
[build-dependencies]
cc="*"

@ -0,0 +1,12 @@
use std::path::PathBuf;
fn main() {
let dir: PathBuf = ["vendor", "tree-sitter-rust", "src"].iter().collect();
cc::Build::new()
.include(&dir)
.file(dir.join("parser.c"))
.file(dir.join("scanner.c"))
.warnings(false) // ignore unused parameter warnings
.compile("tree-sitter-javascript");
}

@ -1,19 +1,25 @@
use std::ffi::OsStr;
use tree_sitter::{Parser, TreeCursor};
use tree_sitter::{Language, Parser, TreeCursor};
use typed_arena::Arena;
use crate::{lines::NewlinePositions, syntax::Syntax};
extern "C" {
fn tree_sitter_rust() -> Language;
}
pub fn supported(extension: &OsStr) -> bool {
extension == "rs"
}
pub fn parse<'a>(arena: &'a Arena<Syntax<'a>>, src: &str) -> Vec<&'a Syntax<'a>> {
let mut parser = Parser::new();
let language = unsafe { tree_sitter_rust() };
parser
.set_language(tree_sitter_rust::language())
.expect("Error loading Rust grammar");
.set_language(language)
.expect("Incompatible tree-sitter version in tree-sitter-rust");
let tree = parser.parse(src, None).unwrap();
let nl_pos = NewlinePositions::from(src);