diff options
Diffstat (limited to 'support/texlab/src/symbol/latex_section/float.rs')
-rw-r--r-- | support/texlab/src/symbol/latex_section/float.rs | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/support/texlab/src/symbol/latex_section/float.rs b/support/texlab/src/symbol/latex_section/float.rs index 9356d0ed3e..7ade3602cf 100644 --- a/support/texlab/src/symbol/latex_section/float.rs +++ b/support/texlab/src/symbol/latex_section/float.rs @@ -1,38 +1,40 @@ use super::{label_name, selection_range}; -use crate::symbol::{LatexSymbol, LatexSymbolKind}; -use crate::syntax::*; -use crate::workspace::*; +use crate::{ + feature::DocumentView, + outline::{OutlineCaptionKind, OutlineContext}, + symbol::types::{LatexSymbol, LatexSymbolKind}, + syntax::{latex, SyntaxNode}, +}; -pub fn symbols(view: &DocumentView, tree: &LatexSyntaxTree) -> Vec<LatexSymbol> { - tree.structure +pub fn symbols(view: &DocumentView, table: &latex::SymbolTable) -> Vec<LatexSymbol> { + table .captions .iter() - .filter_map(|caption| make_symbol(view, tree, caption)) + .filter_map(|caption| make_symbol(view, table, *caption)) .collect() } fn make_symbol( view: &DocumentView, - tree: &LatexSyntaxTree, - caption: &LatexCaption, + table: &latex::SymbolTable, + caption: latex::Caption, ) -> Option<LatexSymbol> { - let environment = tree - .env + let env = table .environments .iter() - .find(|env| tree.is_direct_child(env, caption.start()))?; - let text = extract_group(&caption.command.args[caption.index]); + .find(|env| table.is_direct_child(**env, table[caption.parent].start()))?; - let kind = environment + let text = + table.print_group_content(caption.parent, latex::GroupKind::Group, caption.arg_index)?; + + let kind = env .left - .name() - .map(LatexToken::text) + .name(&table) + .map(latex::Token::text) .and_then(OutlineCaptionKind::parse)?; - let label = tree.find_label_by_environment(environment); - let number = label - .as_ref() - .and_then(|label| OutlineContext::find_number(view, label)); + let label = table.find_label_by_environment(*env); + let number = label.and_then(|label| OutlineContext::find_number(view, table, *label)); let name = match &number { Some(number) => format!("{} {}: {}", kind.as_str(), number, text), @@ -41,7 +43,7 @@ fn make_symbol( let symbol = LatexSymbol { name, - label: label_name(label), + label: label_name(table, label), kind: match kind { OutlineCaptionKind::Figure => LatexSymbolKind::Figure, OutlineCaptionKind::Table => LatexSymbolKind::Table, @@ -49,8 +51,8 @@ fn make_symbol( OutlineCaptionKind::Algorithm => LatexSymbolKind::Algorithm, }, deprecated: false, - full_range: environment.range(), - selection_range: selection_range(environment.range(), label), + full_range: env.range(&table), + selection_range: selection_range(table, env.range(&table), label), children: Vec::new(), }; Some(symbol) |