Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/syntax_highlighting/format.rs')
-rw-r--r--crates/ide/src/syntax_highlighting/format.rs20
1 files changed, 19 insertions, 1 deletions
diff --git a/crates/ide/src/syntax_highlighting/format.rs b/crates/ide/src/syntax_highlighting/format.rs
index 2ef1315945..518e714547 100644
--- a/crates/ide/src/syntax_highlighting/format.rs
+++ b/crates/ide/src/syntax_highlighting/format.rs
@@ -1,14 +1,20 @@
//! Syntax highlighting for format macro strings.
use ide_db::{
+ defs::Definition,
syntax_helpers::format_string::{is_format_string, lex_format_specifiers, FormatSpecifier},
SymbolKind,
};
use syntax::{ast, TextRange};
-use crate::{syntax_highlighting::highlights::Highlights, HlRange, HlTag};
+use crate::{
+ syntax_highlighting::{highlight::highlight_def, highlights::Highlights},
+ HlRange, HlTag,
+};
pub(super) fn highlight_format_string(
stack: &mut Highlights,
+ sema: &hir::Semantics<'_, ide_db::RootDatabase>,
+ krate: hir::Crate,
string: &ast::String,
expanded_string: &ast::String,
range: TextRange,
@@ -27,6 +33,18 @@ pub(super) fn highlight_format_string(
});
}
});
+
+ if let Some(parts) = sema.as_format_args_parts(string) {
+ parts.into_iter().for_each(|(range, res)| {
+ if let Some(res) = res {
+ stack.add(HlRange {
+ range,
+ highlight: highlight_def(sema, krate, Definition::from(res)),
+ binding_hash: None,
+ })
+ }
+ })
+ }
}
fn highlight_format_specifier(kind: FormatSpecifier) -> Option<HlTag> {