Make doc comment highlight injection configurable

This commit is contained in:
Lukas Wirth 2022-08-22 13:44:07 +02:00
parent 9a201873b8
commit 9700c95ced
4 changed files with 22 additions and 4 deletions

View file

@ -38,11 +38,19 @@ pub struct HlRange {
#[derive(Copy, Clone, Debug, PartialEq, Eq)] #[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub struct HighlightConfig { pub struct HighlightConfig {
/// Whether to highlight strings
pub strings: bool, pub strings: bool,
/// Whether to highlight punctuation
pub punctuation: bool, pub punctuation: bool,
/// Whether to specialize punctuation highlights
pub specialize_punctuation: bool, pub specialize_punctuation: bool,
pub specialize_operator: bool, /// Whether to highlight operator
pub operator: bool, pub operator: bool,
/// Whether to specialize operator highlights
pub specialize_operator: bool,
/// Whether to inject highlights into doc comments
pub inject_doc_comment: bool,
/// Whether to highlight unresolved things be their syntax
pub syntactic_name_ref_highlighting: bool, pub syntactic_name_ref_highlighting: bool,
} }
@ -325,9 +333,11 @@ fn traverse(
Enter(it) => it, Enter(it) => it,
Leave(NodeOrToken::Token(_)) => continue, Leave(NodeOrToken::Token(_)) => continue,
Leave(NodeOrToken::Node(node)) => { Leave(NodeOrToken::Node(node)) => {
// Doc comment highlighting injection, we do this when leaving the node if config.inject_doc_comment {
// so that we overwrite the highlighting of the doc comment itself. // Doc comment highlighting injection, we do this when leaving the node
inject::doc_comment(hl, sema, config, file_id, &node); // so that we overwrite the highlighting of the doc comment itself.
inject::doc_comment(hl, sema, config, file_id, &node);
}
continue; continue;
} }
}; };

View file

@ -31,6 +31,7 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo
specialize_punctuation: true, specialize_punctuation: true,
specialize_operator: true, specialize_operator: true,
operator: true, operator: true,
inject_doc_comment: true,
syntactic_name_ref_highlighting: false, syntactic_name_ref_highlighting: false,
}, },
file_id, file_id,

View file

@ -12,6 +12,7 @@ const HL_CONFIG: HighlightConfig = HighlightConfig {
specialize_punctuation: true, specialize_punctuation: true,
specialize_operator: true, specialize_operator: true,
operator: true, operator: true,
inject_doc_comment: true,
syntactic_name_ref_highlighting: false, syntactic_name_ref_highlighting: false,
}; };

View file

@ -411,6 +411,11 @@ config_data! {
/// When enabled, rust-analyzer will emit special token types for operator tokens instead /// When enabled, rust-analyzer will emit special token types for operator tokens instead
/// of the generic `operator` token type. /// of the generic `operator` token type.
semanticHighlighting_operator_specialization_enable: bool = "false", semanticHighlighting_operator_specialization_enable: bool = "false",
/// Inject additional highlighting into doc comments.
///
/// When enabled, rust-analyzer will highlight rust source in doc comments as well as intra
/// doc links.
semanticHighlighting_doc_comment_inject_enable: bool = "true",
/// Show full signature of the callable. Only shows parameters if disabled. /// Show full signature of the callable. Only shows parameters if disabled.
signatureInfo_detail: SignatureDetail = "\"full\"", signatureInfo_detail: SignatureDetail = "\"full\"",
@ -1200,6 +1205,7 @@ impl Config {
.semanticHighlighting_punctuation_specialization_enable, .semanticHighlighting_punctuation_specialization_enable,
operator: self.data.semanticHighlighting_operator_enable, operator: self.data.semanticHighlighting_operator_enable,
specialize_operator: self.data.semanticHighlighting_operator_specialization_enable, specialize_operator: self.data.semanticHighlighting_operator_specialization_enable,
inject_doc_comment: self.data.semanticHighlighting_doc_comment_inject_enable,
syntactic_name_ref_highlighting: false, syntactic_name_ref_highlighting: false,
} }
} }