From 64a6ee45351a71cdeb1d1dddc8fc746abdcff07b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 9 Jan 2021 14:44:01 +0300 Subject: Shorten frequent names --- crates/ide/src/syntax_highlighting/injection.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'crates/ide/src/syntax_highlighting/injection.rs') diff --git a/crates/ide/src/syntax_highlighting/injection.rs b/crates/ide/src/syntax_highlighting/injection.rs index 98ee03e0d..a6941234e 100644 --- a/crates/ide/src/syntax_highlighting/injection.rs +++ b/crates/ide/src/syntax_highlighting/injection.rs @@ -7,7 +7,7 @@ use ide_db::call_info::ActiveParameter; use itertools::Itertools; use syntax::{ast, AstToken, SyntaxNode, SyntaxToken, TextRange, TextSize}; -use crate::{Analysis, HighlightModifier, HighlightTag, HighlightedRange, RootDatabase}; +use crate::{Analysis, HighlightedRange, HlMod, HlTag, RootDatabase}; use super::{highlights::Highlights, injector::Injector}; @@ -28,7 +28,7 @@ pub(super) fn highlight_injection( if let Some(range) = literal.open_quote_text_range() { acc.add(HighlightedRange { range, - highlight: HighlightTag::StringLiteral.into(), + highlight: HlTag::StringLiteral.into(), binding_hash: None, }) } @@ -44,7 +44,7 @@ pub(super) fn highlight_injection( if let Some(range) = literal.close_quote_text_range() { acc.add(HighlightedRange { range, - highlight: HighlightTag::StringLiteral.into(), + highlight: HlTag::StringLiteral.into(), binding_hash: None, }) } @@ -171,7 +171,7 @@ pub(super) fn extract_doc_comments(node: &SyntaxNode) -> Option<(Vec Date: Sat, 9 Jan 2021 14:48:15 +0300 Subject: Shorten names --- crates/ide/src/syntax_highlighting/injection.rs | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) (limited to 'crates/ide/src/syntax_highlighting/injection.rs') diff --git a/crates/ide/src/syntax_highlighting/injection.rs b/crates/ide/src/syntax_highlighting/injection.rs index a6941234e..13dde1dc4 100644 --- a/crates/ide/src/syntax_highlighting/injection.rs +++ b/crates/ide/src/syntax_highlighting/injection.rs @@ -7,7 +7,7 @@ use ide_db::call_info::ActiveParameter; use itertools::Itertools; use syntax::{ast, AstToken, SyntaxNode, SyntaxToken, TextRange, TextSize}; -use crate::{Analysis, HighlightedRange, HlMod, HlTag, RootDatabase}; +use crate::{Analysis, HlMod, HlRange, HlTag, RootDatabase}; use super::{highlights::Highlights, injector::Injector}; @@ -26,11 +26,7 @@ pub(super) fn highlight_injection( let (analysis, tmp_file_id) = Analysis::from_single_file(marker_info.cleaned_text.clone()); if let Some(range) = literal.open_quote_text_range() { - acc.add(HighlightedRange { - range, - highlight: HlTag::StringLiteral.into(), - binding_hash: None, - }) + acc.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None }) } for mut h in analysis.highlight(tmp_file_id).unwrap() { @@ -42,11 +38,7 @@ pub(super) fn highlight_injection( } if let Some(range) = literal.close_quote_text_range() { - acc.add(HighlightedRange { - range, - highlight: HlTag::StringLiteral.into(), - binding_hash: None, - }) + acc.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None }) } Some(()) @@ -116,7 +108,7 @@ const RUSTDOC_FENCE_TOKENS: &[&'static str] = &[ /// Lastly, a vector of new comment highlight ranges (spanning only the /// comment prefix) is returned which is used in the syntax highlighting /// injection to replace the previous (line-spanning) comment ranges. -pub(super) fn extract_doc_comments(node: &SyntaxNode) -> Option<(Vec, Injector)> { +pub(super) fn extract_doc_comments(node: &SyntaxNode) -> Option<(Vec, Injector)> { let mut inj = Injector::default(); // wrap the doctest into function body to get correct syntax highlighting let prefix = "fn doctest() {\n"; @@ -166,7 +158,7 @@ pub(super) fn extract_doc_comments(node: &SyntaxNode) -> Option<(Vec Option<(Vec, + new_comments: Vec, inj: Injector, stack: &mut Highlights, ) { @@ -207,7 +199,7 @@ pub(super) fn highlight_doc_comment( for h in analysis.with_db(|db| super::highlight(db, tmp_file_id, None, true)).unwrap() { for r in inj.map_range_up(h.range) { - stack.add(HighlightedRange { + stack.add(HlRange { range: r, highlight: h.highlight | HlMod::Injected, binding_hash: h.binding_hash, -- cgit v1.2.3 From d4fb7476efc8bf956c56ba2b0e946f48f38a6efc Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 9 Jan 2021 15:18:49 +0300 Subject: Better names --- crates/ide/src/syntax_highlighting/injection.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'crates/ide/src/syntax_highlighting/injection.rs') diff --git a/crates/ide/src/syntax_highlighting/injection.rs b/crates/ide/src/syntax_highlighting/injection.rs index 13dde1dc4..22d7f601a 100644 --- a/crates/ide/src/syntax_highlighting/injection.rs +++ b/crates/ide/src/syntax_highlighting/injection.rs @@ -12,7 +12,7 @@ use crate::{Analysis, HlMod, HlRange, HlTag, RootDatabase}; use super::{highlights::Highlights, injector::Injector}; pub(super) fn highlight_injection( - acc: &mut Highlights, + hl: &mut Highlights, sema: &Semantics, literal: ast::String, expanded: SyntaxToken, @@ -21,24 +21,25 @@ pub(super) fn highlight_injection( if !active_parameter.name.starts_with("ra_fixture") { return None; } + let value = literal.value()?; let marker_info = MarkerInfo::new(&*value); let (analysis, tmp_file_id) = Analysis::from_single_file(marker_info.cleaned_text.clone()); if let Some(range) = literal.open_quote_text_range() { - acc.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None }) + hl.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None }) } - for mut h in analysis.highlight(tmp_file_id).unwrap() { - let range = marker_info.map_range_up(h.range); + for mut hl_range in analysis.highlight(tmp_file_id).unwrap() { + let range = marker_info.map_range_up(hl_range.range); if let Some(range) = literal.map_range_up(range) { - h.range = range; - acc.add(h); + hl_range.range = range; + hl.add(hl_range); } } if let Some(range) = literal.close_quote_text_range() { - acc.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None }) + hl.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None }) } Some(()) -- cgit v1.2.3 From 62b17bac92595d384aaeb0a0fdc5c03269a0dbac Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 9 Jan 2021 15:54:38 +0300 Subject: Simplify --- crates/ide/src/syntax_highlighting/injection.rs | 78 +++++++++---------------- 1 file changed, 27 insertions(+), 51 deletions(-) (limited to 'crates/ide/src/syntax_highlighting/injection.rs') diff --git a/crates/ide/src/syntax_highlighting/injection.rs b/crates/ide/src/syntax_highlighting/injection.rs index 22d7f601a..de2180b04 100644 --- a/crates/ide/src/syntax_highlighting/injection.rs +++ b/crates/ide/src/syntax_highlighting/injection.rs @@ -21,74 +21,50 @@ pub(super) fn highlight_injection( if !active_parameter.name.starts_with("ra_fixture") { return None; } - let value = literal.value()?; - let marker_info = MarkerInfo::new(&*value); - let (analysis, tmp_file_id) = Analysis::from_single_file(marker_info.cleaned_text.clone()); if let Some(range) = literal.open_quote_text_range() { hl.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None }) } - for mut hl_range in analysis.highlight(tmp_file_id).unwrap() { - let range = marker_info.map_range_up(hl_range.range); - if let Some(range) = literal.map_range_up(range) { - hl_range.range = range; - hl.add(hl_range); - } - } - - if let Some(range) = literal.close_quote_text_range() { - hl.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None }) - } - - Some(()) -} + let mut inj = Injector::default(); -/// Data to remove `$0` from string and map ranges -#[derive(Default, Debug)] -struct MarkerInfo { - cleaned_text: String, - markers: Vec, -} + let mut text = &*value; + let mut offset: TextSize = 0.into(); -impl MarkerInfo { - fn new(mut text: &str) -> Self { + while !text.is_empty() { let marker = "$0"; + let idx = text.find(marker).unwrap_or(text.len()); + let (chunk, next) = text.split_at(idx); + inj.add(chunk, TextRange::at(offset, TextSize::of(chunk))); - let mut res = MarkerInfo::default(); - let mut offset: TextSize = 0.into(); - while !text.is_empty() { - let idx = text.find(marker).unwrap_or(text.len()); - let (chunk, next) = text.split_at(idx); - text = next; - res.cleaned_text.push_str(chunk); - offset += TextSize::of(chunk); + text = next; + offset += TextSize::of(chunk); - if let Some(next) = text.strip_prefix(marker) { - text = next; + if let Some(next) = text.strip_prefix(marker) { + text = next; - let marker_len = TextSize::of(marker); - res.markers.push(TextRange::at(offset, marker_len)); - offset += marker_len; - } + let marker_len = TextSize::of(marker); + offset += marker_len; } - res } - fn map_range_up(&self, range: TextRange) -> TextRange { - TextRange::new( - self.map_offset_up(range.start(), true), - self.map_offset_up(range.end(), false), - ) - } - fn map_offset_up(&self, mut offset: TextSize, start: bool) -> TextSize { - for r in &self.markers { - if r.start() < offset || (start && r.start() == offset) { - offset += r.len() + + let (analysis, tmp_file_id) = Analysis::from_single_file(inj.text().to_string()); + + for mut hl_range in analysis.highlight(tmp_file_id).unwrap() { + for range in inj.map_range_up(hl_range.range) { + if let Some(range) = literal.map_range_up(range) { + hl_range.range = range; + hl.add(hl_range.clone()); } } - offset } + + if let Some(range) = literal.close_quote_text_range() { + hl.add(HlRange { range, highlight: HlTag::StringLiteral.into(), binding_hash: None }) + } + + Some(()) } const RUSTDOC_FENCE: &'static str = "```"; -- cgit v1.2.3 From 4a8d2c098d88da6f36f3cf95f424b471987c5daa Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 9 Jan 2021 16:07:41 +0300 Subject: Better highlight for fixtures --- crates/ide/src/syntax_highlighting/injection.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'crates/ide/src/syntax_highlighting/injection.rs') diff --git a/crates/ide/src/syntax_highlighting/injection.rs b/crates/ide/src/syntax_highlighting/injection.rs index de2180b04..008d5ce24 100644 --- a/crates/ide/src/syntax_highlighting/injection.rs +++ b/crates/ide/src/syntax_highlighting/injection.rs @@ -42,6 +42,10 @@ pub(super) fn highlight_injection( offset += TextSize::of(chunk); if let Some(next) = text.strip_prefix(marker) { + if let Some(range) = literal.map_range_up(TextRange::at(offset, TextSize::of(marker))) { + hl.add(HlRange { range, highlight: HlTag::Keyword.into(), binding_hash: None }); + } + text = next; let marker_len = TextSize::of(marker); -- cgit v1.2.3