From 887dd2d5bb5dd3fda1da8aa0de7300a78fdebd6b Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Wed, 26 May 2021 13:29:00 +0200 Subject: [PATCH] Document semantic token modifiers --- crates/ide/src/syntax_highlighting.rs | 24 ++++++++++++++++++++++ crates/ide/src/syntax_highlighting/tags.rs | 2 ++ 2 files changed, 26 insertions(+) diff --git a/crates/ide/src/syntax_highlighting.rs b/crates/ide/src/syntax_highlighting.rs index cf1a8bad796..7f7f4d38af1 100644 --- a/crates/ide/src/syntax_highlighting.rs +++ b/crates/ide/src/syntax_highlighting.rs @@ -49,6 +49,30 @@ pub struct HlRange { // The general rule is that a reference to an entity gets colored the same way as the entity itself. // We also give special modifier for `mut` and `&mut` local variables. // +// .Token Modifiers +// +// Token modifiers allow to style some elements in the source code more precisely. +// +// Rust-analyzer currently emits the following token modifiers: +// +// [horizontal] +// associated:: Emitted for associated items. +// async:: Emitted for async functions and the `async` and `await` keywords. +// attribute:: Emitted for tokens inside attributes. +// callable:: Emitted for locals whose types implements one of the `Fn*` traits. +// consuming:: Emitted for locals that are being consumed when use in a function call. +// controlFlow:: Emitted for control-flow related tokens, this includes the `?` operator. +// declaration:: Emitted for names of definitions, like `foo` in `fn foo() {}`. +// documentation:: Emitted for documentation comments. +// injected:: Emitted for doc-string injected highlighting like rust source blocks in documentation. +// intraDocLink:: Emitted for intra doc links in doc-strings. +// library:: Emitted for items that are defined outside of the current crate. +// mutable:: Emitted for mutable locals and statics. +// static:: Emitted for "static" functions, also known as functions that do not take a `self` param. +// trait:: Emitted for associated trait items. +// unsafe:: Emitted for unsafe operations, like unsafe function calls, as well as the `unsafe` token. +// +// // image::https://user-images.githubusercontent.com/48062697/113164457-06cfb980-9239-11eb-819b-0f93e646acf8.png[] // image::https://user-images.githubusercontent.com/48062697/113187625-f7f50100-9250-11eb-825e-91c58f236071.png[] pub(crate) fn highlight( diff --git a/crates/ide/src/syntax_highlighting/tags.rs b/crates/ide/src/syntax_highlighting/tags.rs index e94f17cd98b..9d481deae34 100644 --- a/crates/ide/src/syntax_highlighting/tags.rs +++ b/crates/ide/src/syntax_highlighting/tags.rs @@ -37,6 +37,8 @@ pub enum HlTag { None, } +// Don't forget to adjust the feature description in crates/ide/src/syntax_highlighting.rs. +// And make sure to use the lsp strings used when converting to the protocol in crates\rust-analyzer\src\semantic_tokens.rs, not the names of the variants here. #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] #[repr(u8)] pub enum HlMod {