From f38bac48e5cc193d88aaea17bfb4234f64f1ded0 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 26 Feb 2020 17:08:15 +0100 Subject: More type safety for highlighting --- crates/rust-analyzer/src/conv.rs | 48 +++++++++++++------------- crates/rust-analyzer/src/main_loop/handlers.rs | 2 +- crates/rust-analyzer/src/req.rs | 2 +- 3 files changed, 26 insertions(+), 26 deletions(-) (limited to 'crates/rust-analyzer') 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::{ WorkspaceEdit, }; use ra_ide::{ - tags, translate_offset_with_edit, CompletionItem, CompletionItemKind, FileId, FilePosition, - FileRange, FileSystemEdit, Fold, FoldKind, InsertTextFormat, LineCol, LineIndex, + translate_offset_with_edit, CompletionItem, CompletionItemKind, FileId, FilePosition, + FileRange, FileSystemEdit, Fold, FoldKind, HighlightTag, InsertTextFormat, LineCol, LineIndex, NavigationTarget, RangeInfo, ReferenceAccess, Severity, SourceChange, SourceFileEdit, }; use ra_syntax::{SyntaxKind, TextRange, TextUnit}; @@ -303,51 +303,51 @@ impl ConvWith<&FoldConvCtx<'_>> for Fold { } } -impl Conv for &'static str { +impl Conv for HighlightTag { type Output = (SemanticTokenType, Vec); fn conv(self) -> (SemanticTokenType, Vec) { let token_type: SemanticTokenType = match self { - tags::FIELD => SemanticTokenType::MEMBER, - tags::FUNCTION => SemanticTokenType::FUNCTION, - tags::MODULE => SemanticTokenType::NAMESPACE, - tags::CONSTANT => { + HighlightTag::FIELD => SemanticTokenType::MEMBER, + HighlightTag::FUNCTION => SemanticTokenType::FUNCTION, + HighlightTag::MODULE => SemanticTokenType::NAMESPACE, + HighlightTag::CONSTANT => { return ( SemanticTokenType::VARIABLE, vec![SemanticTokenModifier::STATIC, SemanticTokenModifier::READONLY], ) } - tags::MACRO => SemanticTokenType::MACRO, + HighlightTag::MACRO => SemanticTokenType::MACRO, - tags::VARIABLE => { + HighlightTag::VARIABLE => { return (SemanticTokenType::VARIABLE, vec![SemanticTokenModifier::READONLY]) } - tags::VARIABLE_MUT => SemanticTokenType::VARIABLE, + HighlightTag::VARIABLE_MUT => SemanticTokenType::VARIABLE, - tags::TYPE => SemanticTokenType::TYPE, - tags::TYPE_BUILTIN => SemanticTokenType::TYPE, - tags::TYPE_SELF => { + HighlightTag::TYPE => SemanticTokenType::TYPE, + HighlightTag::TYPE_BUILTIN => SemanticTokenType::TYPE, + HighlightTag::TYPE_SELF => { return (SemanticTokenType::TYPE, vec![SemanticTokenModifier::REFERENCE]) } - tags::TYPE_PARAM => SemanticTokenType::TYPE_PARAMETER, - tags::TYPE_LIFETIME => { + HighlightTag::TYPE_PARAM => SemanticTokenType::TYPE_PARAMETER, + HighlightTag::TYPE_LIFETIME => { return (SemanticTokenType::LABEL, vec![SemanticTokenModifier::REFERENCE]) } - tags::LITERAL_BYTE => SemanticTokenType::NUMBER, - tags::LITERAL_NUMERIC => SemanticTokenType::NUMBER, - tags::LITERAL_CHAR => SemanticTokenType::NUMBER, + HighlightTag::LITERAL_BYTE => SemanticTokenType::NUMBER, + HighlightTag::LITERAL_NUMERIC => SemanticTokenType::NUMBER, + HighlightTag::LITERAL_CHAR => SemanticTokenType::NUMBER, - tags::LITERAL_COMMENT => { + HighlightTag::LITERAL_COMMENT => { return (SemanticTokenType::COMMENT, vec![SemanticTokenModifier::DOCUMENTATION]) } - tags::LITERAL_STRING => SemanticTokenType::STRING, - tags::LITERAL_ATTRIBUTE => SemanticTokenType::KEYWORD, + HighlightTag::LITERAL_STRING => SemanticTokenType::STRING, + HighlightTag::LITERAL_ATTRIBUTE => SemanticTokenType::KEYWORD, - tags::KEYWORD => SemanticTokenType::KEYWORD, - tags::KEYWORD_UNSAFE => SemanticTokenType::KEYWORD, - tags::KEYWORD_CONTROL => SemanticTokenType::KEYWORD, + HighlightTag::KEYWORD => SemanticTokenType::KEYWORD, + HighlightTag::KEYWORD_UNSAFE => SemanticTokenType::KEYWORD, + HighlightTag::KEYWORD_CONTROL => SemanticTokenType::KEYWORD, unknown => panic!("Unknown semantic token: {}", unknown), }; 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> .into_iter() .map(|h| Decoration { range: h.range.conv_with(&line_index), - tag: h.tag, + tag: h.tag.to_string(), binding_hash: h.binding_hash.map(|x| x.to_string()), }) .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 { #[serde(rename_all = "camelCase")] pub struct Decoration { pub range: Range, - pub tag: &'static str, + pub tag: String, pub binding_hash: Option, } -- cgit v1.2.3