summaryrefslogtreecommitdiff
path: root/support/texlab/src/symbol/latex_section/float.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/symbol/latex_section/float.rs')
-rw-r--r--support/texlab/src/symbol/latex_section/float.rs46
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)