aboutsummaryrefslogtreecommitdiff
path: root/crates/rust-analyzer
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-02-26 16:08:15 +0000
committerAleksey Kladov <[email protected]>2020-02-26 16:17:15 +0000
commitf38bac48e5cc193d88aaea17bfb4234f64f1ded0 (patch)
treeedd6cef6d68d06efebbcd667074af262e099940b /crates/rust-analyzer
parent640ede4ade02e6caae57532506409370c5ca63c9 (diff)
More type safety for highlighting
Diffstat (limited to 'crates/rust-analyzer')
-rw-r--r--crates/rust-analyzer/src/conv.rs48
-rw-r--r--crates/rust-analyzer/src/main_loop/handlers.rs2
-rw-r--r--crates/rust-analyzer/src/req.rs2
3 files changed, 26 insertions, 26 deletions
diff --git a/crates/rust-analyzer/src/conv.rs b/crates/rust-analyzer/src/conv.rs
index 5fcb46b61..5e5610a1e 100644
--- a/crates/rust-analyzer/src/conv.rs
+++ b/crates/rust-analyzer/src/conv.rs
@@ -9,8 +9,8 @@ use lsp_types::{
9 WorkspaceEdit, 9 WorkspaceEdit,
10}; 10};
11use ra_ide::{ 11use ra_ide::{
12 tags, translate_offset_with_edit, CompletionItem, CompletionItemKind, FileId, FilePosition, 12 translate_offset_with_edit, CompletionItem, CompletionItemKind, FileId, FilePosition,
13 FileRange, FileSystemEdit, Fold, FoldKind, InsertTextFormat, LineCol, LineIndex, 13 FileRange, FileSystemEdit, Fold, FoldKind, HighlightTag, InsertTextFormat, LineCol, LineIndex,
14 NavigationTarget, RangeInfo, ReferenceAccess, Severity, SourceChange, SourceFileEdit, 14 NavigationTarget, RangeInfo, ReferenceAccess, Severity, SourceChange, SourceFileEdit,
15}; 15};
16use ra_syntax::{SyntaxKind, TextRange, TextUnit}; 16use ra_syntax::{SyntaxKind, TextRange, TextUnit};
@@ -303,51 +303,51 @@ impl ConvWith<&FoldConvCtx<'_>> for Fold {
303 } 303 }
304} 304}
305 305
306impl Conv for &'static str { 306impl Conv for HighlightTag {
307 type Output = (SemanticTokenType, Vec<SemanticTokenModifier>); 307 type Output = (SemanticTokenType, Vec<SemanticTokenModifier>);
308 308
309 fn conv(self) -> (SemanticTokenType, Vec<SemanticTokenModifier>) { 309 fn conv(self) -> (SemanticTokenType, Vec<SemanticTokenModifier>) {
310 let token_type: SemanticTokenType = match self { 310 let token_type: SemanticTokenType = match self {
311 tags::FIELD => SemanticTokenType::MEMBER, 311 HighlightTag::FIELD => SemanticTokenType::MEMBER,
312 tags::FUNCTION => SemanticTokenType::FUNCTION, 312 HighlightTag::FUNCTION => SemanticTokenType::FUNCTION,
313 tags::MODULE => SemanticTokenType::NAMESPACE, 313 HighlightTag::MODULE => SemanticTokenType::NAMESPACE,
314 tags::CONSTANT => { 314 HighlightTag::CONSTANT => {
315 return ( 315 return (
316 SemanticTokenType::VARIABLE, 316 SemanticTokenType::VARIABLE,
317 vec![SemanticTokenModifier::STATIC, SemanticTokenModifier::READONLY], 317 vec![SemanticTokenModifier::STATIC, SemanticTokenModifier::READONLY],
318 ) 318 )
319 } 319 }
320 tags::MACRO => SemanticTokenType::MACRO, 320 HighlightTag::MACRO => SemanticTokenType::MACRO,
321 321
322 tags::VARIABLE => { 322 HighlightTag::VARIABLE => {
323 return (SemanticTokenType::VARIABLE, vec![SemanticTokenModifier::READONLY]) 323 return (SemanticTokenType::VARIABLE, vec![SemanticTokenModifier::READONLY])
324 } 324 }
325 tags::VARIABLE_MUT => SemanticTokenType::VARIABLE, 325 HighlightTag::VARIABLE_MUT => SemanticTokenType::VARIABLE,
326 326
327 tags::TYPE => SemanticTokenType::TYPE, 327 HighlightTag::TYPE => SemanticTokenType::TYPE,
328 tags::TYPE_BUILTIN => SemanticTokenType::TYPE, 328 HighlightTag::TYPE_BUILTIN => SemanticTokenType::TYPE,
329 tags::TYPE_SELF => { 329 HighlightTag::TYPE_SELF => {
330 return (SemanticTokenType::TYPE, vec![SemanticTokenModifier::REFERENCE]) 330 return (SemanticTokenType::TYPE, vec![SemanticTokenModifier::REFERENCE])
331 } 331 }
332 tags::TYPE_PARAM => SemanticTokenType::TYPE_PARAMETER, 332 HighlightTag::TYPE_PARAM => SemanticTokenType::TYPE_PARAMETER,
333 tags::TYPE_LIFETIME => { 333 HighlightTag::TYPE_LIFETIME => {
334 return (SemanticTokenType::LABEL, vec![SemanticTokenModifier::REFERENCE]) 334 return (SemanticTokenType::LABEL, vec![SemanticTokenModifier::REFERENCE])
335 } 335 }
336 336
337 tags::LITERAL_BYTE => SemanticTokenType::NUMBER, 337 HighlightTag::LITERAL_BYTE => SemanticTokenType::NUMBER,
338 tags::LITERAL_NUMERIC => SemanticTokenType::NUMBER, 338 HighlightTag::LITERAL_NUMERIC => SemanticTokenType::NUMBER,
339 tags::LITERAL_CHAR => SemanticTokenType::NUMBER, 339 HighlightTag::LITERAL_CHAR => SemanticTokenType::NUMBER,
340 340
341 tags::LITERAL_COMMENT => { 341 HighlightTag::LITERAL_COMMENT => {
342 return (SemanticTokenType::COMMENT, vec![SemanticTokenModifier::DOCUMENTATION]) 342 return (SemanticTokenType::COMMENT, vec![SemanticTokenModifier::DOCUMENTATION])
343 } 343 }
344 344
345 tags::LITERAL_STRING => SemanticTokenType::STRING, 345 HighlightTag::LITERAL_STRING => SemanticTokenType::STRING,
346 tags::LITERAL_ATTRIBUTE => SemanticTokenType::KEYWORD, 346 HighlightTag::LITERAL_ATTRIBUTE => SemanticTokenType::KEYWORD,
347 347
348 tags::KEYWORD => SemanticTokenType::KEYWORD, 348 HighlightTag::KEYWORD => SemanticTokenType::KEYWORD,
349 tags::KEYWORD_UNSAFE => SemanticTokenType::KEYWORD, 349 HighlightTag::KEYWORD_UNSAFE => SemanticTokenType::KEYWORD,
350 tags::KEYWORD_CONTROL => SemanticTokenType::KEYWORD, 350 HighlightTag::KEYWORD_CONTROL => SemanticTokenType::KEYWORD,
351 unknown => panic!("Unknown semantic token: {}", unknown), 351 unknown => panic!("Unknown semantic token: {}", unknown),
352 }; 352 };
353 353
diff --git a/crates/rust-analyzer/src/main_loop/handlers.rs b/crates/rust-analyzer/src/main_loop/handlers.rs
index 267edd578..e9f1c4f4b 100644
--- a/crates/rust-analyzer/src/main_loop/handlers.rs
+++ b/crates/rust-analyzer/src/main_loop/handlers.rs
@@ -954,7 +954,7 @@ fn highlight(world: &WorldSnapshot, file_id: FileId) -> Result<Vec<Decoration>>
954 .into_iter() 954 .into_iter()
955 .map(|h| Decoration { 955 .map(|h| Decoration {
956 range: h.range.conv_with(&line_index), 956 range: h.range.conv_with(&line_index),
957 tag: h.tag, 957 tag: h.tag.to_string(),
958 binding_hash: h.binding_hash.map(|x| x.to_string()), 958 binding_hash: h.binding_hash.map(|x| x.to_string()),
959 }) 959 })
960 .collect(); 960 .collect();
diff --git a/crates/rust-analyzer/src/req.rs b/crates/rust-analyzer/src/req.rs
index 642ac41ac..fd6aef597 100644
--- a/crates/rust-analyzer/src/req.rs
+++ b/crates/rust-analyzer/src/req.rs
@@ -112,7 +112,7 @@ pub struct PublishDecorationsParams {
112#[serde(rename_all = "camelCase")] 112#[serde(rename_all = "camelCase")]
113pub struct Decoration { 113pub struct Decoration {
114 pub range: Range, 114 pub range: Range,
115 pub tag: &'static str, 115 pub tag: String,
116 pub binding_hash: Option<String>, 116 pub binding_hash: Option<String>,
117} 117}
118 118