diff options
Diffstat (limited to 'support/texlab/crates/base-db/src/semantics/auxiliary.rs')
-rw-r--r-- | support/texlab/crates/base-db/src/semantics/auxiliary.rs | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/support/texlab/crates/base-db/src/semantics/auxiliary.rs b/support/texlab/crates/base-db/src/semantics/auxiliary.rs index 719953974c..489a7d1ac6 100644 --- a/support/texlab/crates/base-db/src/semantics/auxiliary.rs +++ b/support/texlab/crates/base-db/src/semantics/auxiliary.rs @@ -1,6 +1,6 @@ use rowan::ast::AstNode; use rustc_hash::FxHashMap; -use syntax::latex; +use syntax::latex::{self, HasCurly}; #[derive(Debug, Clone, Default)] pub struct Semantics { @@ -20,20 +20,24 @@ impl Semantics { } } - fn process_label_number(&mut self, label_number: &latex::LabelNumber) { - let Some(name) = label_number + fn process_label_number(&mut self, label_number: &latex::LabelNumber) -> Option<()> { + let name = label_number .name() .and_then(|group| group.key()) - .map(|key| key.to_string()) else { return }; + .map(|key| key.to_string())?; - let Some(text) = label_number - .text() - .map(|node| node.syntax().descendants()) - .into_iter() - .flatten() - .find(|node| node.kind() == latex::TEXT || node.kind() == latex::MIXED_GROUP) - .map(|node| node.text().to_string()) else { return }; + let group = label_number.text()?; + let group = group + .syntax() + .children() + .filter_map(latex::CurlyGroup::cast) + .find_map(|group| { + latex::Text::cast(group.syntax().first_child()?)?; + Some(group) + })?; + let text = group.content_text()?.replace('{', "").replace('}', ""); self.label_numbers.insert(name, text); + Some(()) } } |