summaryrefslogtreecommitdiff
path: root/support/texlab/src/symbol/latex_section/theorem.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/symbol/latex_section/theorem.rs')
-rw-r--r--support/texlab/src/symbol/latex_section/theorem.rs68
1 files changed, 36 insertions, 32 deletions
diff --git a/support/texlab/src/symbol/latex_section/theorem.rs b/support/texlab/src/symbol/latex_section/theorem.rs
index 1f2190ea47..dac231fbfa 100644
--- a/support/texlab/src/symbol/latex_section/theorem.rs
+++ b/support/texlab/src/symbol/latex_section/theorem.rs
@@ -1,47 +1,51 @@
use super::{label_name, selection_range};
-use crate::symbol::{LatexSymbol, LatexSymbolKind};
-use crate::syntax::*;
-use crate::workspace::*;
+use crate::{
+ feature::DocumentView,
+ outline::OutlineContext,
+ symbol::types::{LatexSymbol, LatexSymbolKind},
+ syntax::latex,
+ workspace::DocumentContent,
+};
+use titlecase::titlecase;
-pub fn symbols(view: &DocumentView, tree: &LatexSyntaxTree) -> Vec<LatexSymbol> {
- tree.env
+pub fn symbols(view: &DocumentView, table: &latex::SymbolTable) -> Vec<LatexSymbol> {
+ table
.environments
.iter()
- .filter_map(|env| make_symbol(view, tree, env))
+ .filter_map(|env| make_symbol(view, table, *env))
.collect()
}
fn make_symbol(
view: &DocumentView,
- main_tree: &LatexSyntaxTree,
- environment: &LatexEnvironment,
+ main_table: &latex::SymbolTable,
+ env: latex::Environment,
) -> Option<LatexSymbol> {
- let environment_name = environment.left.name().map(LatexToken::text)?;
+ let env_name = env.left.name(&main_table).map(latex::Token::text)?;
- for document in &view.related_documents {
- if let SyntaxTree::Latex(tree) = &document.tree {
- for definition in &tree.math.theorem_definitions {
- if environment_name == definition.name().text() {
- let kind = definition
- .command
- .args
- .get(definition.index + 1)
- .map(|content| extract_group(content))
- .unwrap_or_else(|| titlelize(environment_name));
+ for document in &view.related {
+ if let DocumentContent::Latex(table) = &document.content {
+ for definition in &table.theorem_definitions {
+ if definition.name(&table).text() == env_name {
+ let kind = table
+ .print_group_content(
+ definition.parent,
+ latex::GroupKind::Group,
+ definition.arg_index + 1,
+ )
+ .unwrap_or_else(|| titlecase(env_name));
- let description = environment
- .left
- .command
- .options
- .get(0)
- .map(|content| extract_group(content));
+ let desc = main_table.print_group_content(
+ env.left.parent,
+ latex::GroupKind::Options,
+ 0,
+ );
- let label = main_tree.find_label_by_environment(environment);
+ let label = main_table.find_label_by_environment(env);
let number = label
- .as_ref()
- .and_then(|label| OutlineContext::find_number(view, label));
+ .and_then(|label| OutlineContext::find_number(view, &main_table, *label));
- let name = match (description, number) {
+ let name = match (desc, number) {
(Some(desc), Some(num)) => format!("{} {} ({})", kind, num, desc),
(Some(desc), None) => format!("{} ({})", kind, desc),
(None, Some(num)) => format!("{} {}", kind, num),
@@ -50,11 +54,11 @@ fn make_symbol(
let symbol = LatexSymbol {
name,
- label: label_name(label),
+ label: label_name(main_table, label),
kind: LatexSymbolKind::Theorem,
deprecated: false,
- full_range: environment.range(),
- selection_range: selection_range(environment.range(), label),
+ full_range: env.range(&main_table),
+ selection_range: selection_range(main_table, env.range(&main_table), label),
children: Vec::new(),
};
return Some(symbol);