Skip to content

Commit 0cf8c7d

Browse files
committed
Mark TeX math delimiters as deprecated
1 parent 0cd852f commit 0cf8c7d

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

src/features/semantic_tokens.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
mod label;
2+
mod math_delimiter;
23

34
use bitflags::bitflags;
45
use lsp_types::{
@@ -17,6 +18,7 @@ use crate::{
1718
#[repr(u32)]
1819
pub enum TokenKind {
1920
Label = 0,
21+
MathDelimiter = 1,
2022
}
2123

2224
bitflags! {
@@ -25,15 +27,20 @@ bitflags! {
2527
const NONE = 0;
2628
const UNDEFINED = 1;
2729
const UNUSED = 2;
30+
const DEPRECATED = 4;
2831
}
2932
}
3033

3134
pub fn legend() -> SemanticTokensLegend {
3235
SemanticTokensLegend {
33-
token_types: vec![SemanticTokenType::new("label")],
36+
token_types: vec![
37+
SemanticTokenType::new("label"),
38+
SemanticTokenType::new("mathDelimiter"),
39+
],
3440
token_modifiers: vec![
3541
SemanticTokenModifier::new("undefined"),
3642
SemanticTokenModifier::new("unused"),
43+
SemanticTokenModifier::new("deprecated"),
3744
],
3845
}
3946
}
@@ -105,5 +112,6 @@ pub fn find_all(db: &dyn Db, uri: &Url, viewport: Range) -> Option<SemanticToken
105112
let viewport = document.line_index(db).offset_lsp_range(viewport);
106113
let mut builder = TokenBuilder::default();
107114
label::find(db, document, viewport, &mut builder);
115+
math_delimiter::find(db, document, viewport, &mut builder);
108116
Some(builder.finish(document.line_index(db)))
109117
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use rowan::TextRange;
2+
3+
use crate::{db::Document, syntax::latex, Db};
4+
5+
use super::{Token, TokenBuilder, TokenKind, TokenModifiers};
6+
7+
pub fn find(
8+
db: &dyn Db,
9+
document: Document,
10+
viewport: TextRange,
11+
builder: &mut TokenBuilder,
12+
) -> Option<()> {
13+
let root = document.parse(db).as_tex()?.root(db);
14+
15+
for token in root
16+
.covering_element(viewport)
17+
.as_node()?
18+
.descendants_with_tokens()
19+
.filter_map(|elem| elem.into_token())
20+
.filter(|token| token.kind() == latex::DOLLAR)
21+
{
22+
builder.push(Token {
23+
range: token.text_range(),
24+
kind: TokenKind::MathDelimiter,
25+
modifiers: TokenModifiers::DEPRECATED,
26+
});
27+
}
28+
29+
Some(())
30+
}

0 commit comments

Comments
 (0)