From 09fcacdfd18b1f95d604584a70434a7a9ae1d0c3 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 18 Aug 2023 11:31:40 -0700 Subject: [PATCH] Upgrade Tree-sitter for error recovery bug fix --- Cargo.lock | 2 +- Cargo.toml | 2 +- crates/language/src/syntax_map.rs | 10 ++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 69285a1abf..aab5504a86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8126,7 +8126,7 @@ dependencies = [ [[package]] name = "tree-sitter" version = "0.20.10" -source = "git+https://github.com/tree-sitter/tree-sitter?rev=1c65ca24bc9a734ab70115188f465e12eecf224e#1c65ca24bc9a734ab70115188f465e12eecf224e" +source = "git+https://github.com/tree-sitter/tree-sitter?rev=35a6052fbcafc5e5fc0f9415b8652be7dcaf7222#35a6052fbcafc5e5fc0f9415b8652be7dcaf7222" dependencies = [ "cc", "regex", diff --git a/Cargo.toml b/Cargo.toml index 1938e832e9..7ea79138c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -135,7 +135,7 @@ tree-sitter-lua = "0.0.14" tree-sitter-nix = { git = "https://github.com/nix-community/tree-sitter-nix", rev = "66e3e9ce9180ae08fc57372061006ef83f0abde7" } [patch.crates-io] -tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "1c65ca24bc9a734ab70115188f465e12eecf224e" } +tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "35a6052fbcafc5e5fc0f9415b8652be7dcaf7222" } async-task = { git = "https://github.com/zed-industries/async-task", rev = "341b57d6de98cdfd7b418567b8de2022ca993a6e" } # TODO - Remove when a version is released with this PR: https://github.com/servo/core-foundation-rs/pull/457 diff --git a/crates/language/src/syntax_map.rs b/crates/language/src/syntax_map.rs index 1590294b1a..b6e1d16e18 100644 --- a/crates/language/src/syntax_map.rs +++ b/crates/language/src/syntax_map.rs @@ -72,7 +72,7 @@ pub struct SyntaxMapMatch<'a> { struct SyntaxMapCapturesLayer<'a> { depth: usize, - captures: QueryCaptures<'a, 'a, TextProvider<'a>>, + captures: QueryCaptures<'a, 'a, TextProvider<'a>, &'a [u8]>, next_capture: Option>, grammar_index: usize, _query_cursor: QueryCursorHandle, @@ -83,7 +83,7 @@ struct SyntaxMapMatchesLayer<'a> { next_pattern_index: usize, next_captures: Vec>, has_next: bool, - matches: QueryMatches<'a, 'a, TextProvider<'a>>, + matches: QueryMatches<'a, 'a, TextProvider<'a>, &'a [u8]>, grammar_index: usize, _query_cursor: QueryCursorHandle, } @@ -1279,7 +1279,9 @@ fn get_injections( } for (language, mut included_ranges) in combined_injection_ranges.drain() { - included_ranges.sort_unstable(); + included_ranges.sort_unstable_by(|a, b| { + Ord::cmp(&a.start_byte, &b.start_byte).then_with(|| Ord::cmp(&a.end_byte, &b.end_byte)) + }); queue.push(ParseStep { depth, language: ParseStepLanguage::Loaded { language }, @@ -1697,7 +1699,7 @@ impl std::fmt::Debug for SyntaxLayer { } } -impl<'a> tree_sitter::TextProvider<'a> for TextProvider<'a> { +impl<'a> tree_sitter::TextProvider<&'a [u8]> for TextProvider<'a> { type I = ByteChunks<'a>; fn text(&mut self, node: tree_sitter::Node) -> Self::I {