diff --git a/Cargo.lock b/Cargo.lock index 6c5ea1c1fce566b0a0d51a798e01062d8b30f0c4..84a9716cf6d74639893940b77a7cdb413ef6e4c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5963,9 +5963,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.3" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "memfd" @@ -10519,7 +10519,7 @@ dependencies = [ [[package]] name = "tree-sitter" version = "0.20.100" -source = "git+https://github.com/tree-sitter/tree-sitter?rev=7f21c3b98c0749ac192da67a0d65dfe3eabc4a63#7f21c3b98c0749ac192da67a0d65dfe3eabc4a63" +source = "git+https://github.com/tree-sitter/tree-sitter?rev=7b4894ba2ae81b988846676f54c0988d4027ef4f#7b4894ba2ae81b988846676f54c0988d4027ef4f" dependencies = [ "cc", "regex", diff --git a/Cargo.toml b/Cargo.toml index 7a883e458641e46694bac722ab86fb3f2363db2e..7ea84d8b565f2c186b714921ea33aaaeb1bc5095 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -407,7 +407,7 @@ features = [ ] [patch.crates-io] -tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "7f21c3b98c0749ac192da67a0d65dfe3eabc4a63" } +tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "7b4894ba2ae81b988846676f54c0988d4027ef4f" } # Workaround for a broken nightly build of gpui: See #7644 and revisit once 0.5.3 is released. pathfinder_simd = { git = "https://github.com/servo/pathfinder.git", rev = "30419d07660dc11a21e42ef4a7fa329600cff152" } diff --git a/crates/language/src/syntax_map.rs b/crates/language/src/syntax_map.rs index 926c4a36eda1b4c8d5e0746cd828eea841d3ea7a..47c871f9f93015676a1c5923562ccee227ba327a 100644 --- a/crates/language/src/syntax_map.rs +++ b/crates/language/src/syntax_map.rs @@ -606,13 +606,21 @@ impl SyntaxSnapshot { LogIncludedRanges(&included_ranges), ); - tree = parse_text( + let result = parse_text( grammar, text.as_rope(), step_start_byte, included_ranges, Some(old_tree.clone()), ); + match result { + Ok(t) => tree = t, + Err(e) => { + log::error!("error parsing text: {:?}", e); + continue; + } + }; + changed_ranges = join_ranges( invalidated_ranges .iter() @@ -651,13 +659,20 @@ impl SyntaxSnapshot { LogIncludedRanges(&included_ranges), ); - tree = parse_text( + let result = parse_text( grammar, text.as_rope(), step_start_byte, included_ranges, None, ); + match result { + Ok(t) => tree = t, + Err(e) => { + log::error!("error parsing text: {:?}", e); + continue; + } + }; changed_ranges = vec![step_start_byte..step_end_byte]; } @@ -1161,16 +1176,12 @@ fn parse_text( start_byte: usize, ranges: Vec, old_tree: Option, -) -> Tree { +) -> anyhow::Result { PARSER.with(|parser| { let mut parser = parser.borrow_mut(); let mut chunks = text.chunks_in_range(start_byte..text.len()); - parser - .set_included_ranges(&ranges) - .expect("overlapping ranges"); - parser - .set_language(&grammar.ts_language) - .expect("incompatible grammar"); + parser.set_included_ranges(&ranges)?; + parser.set_language(&grammar.ts_language)?; parser .parse_with( &mut move |offset, _| { @@ -1179,7 +1190,7 @@ fn parse_text( }, old_tree.as_ref(), ) - .expect("invalid language") + .ok_or_else(|| anyhow::anyhow!("failed to parse")) }) }