Shorten names

This commit is contained in:
Aleksey Kladov 2021-01-09 14:48:15 +03:00
parent c6150a3706
commit 3dfa2768ac
7 changed files with 50 additions and 67 deletions

View file

@ -77,7 +77,7 @@ pub use crate::{
runnables::{Runnable, RunnableKind, TestId},
syntax_highlighting::{
tags::{Highlight, HlMod, HlMods, HlTag},
HighlightedRange,
HlRange,
},
};
pub use assists::{Assist, AssistConfig, AssistId, AssistKind, InsertUseConfig};
@ -449,12 +449,12 @@ impl Analysis {
}
/// Computes syntax highlighting for the given file
pub fn highlight(&self, file_id: FileId) -> Cancelable<Vec<HighlightedRange>> {
pub fn highlight(&self, file_id: FileId) -> Cancelable<Vec<HlRange>> {
self.with_db(|db| syntax_highlighting::highlight(db, file_id, None, false))
}
/// Computes syntax highlighting for the given file range.
pub fn highlight_range(&self, frange: FileRange) -> Cancelable<Vec<HighlightedRange>> {
pub fn highlight_range(&self, frange: FileRange) -> Cancelable<Vec<HlRange>> {
self.with_db(|db| {
syntax_highlighting::highlight(db, frange.file_id, Some(frange.range), false)
})

View file

@ -34,7 +34,7 @@ use crate::{
pub(crate) use html::highlight_as_html;
#[derive(Debug, Clone)]
pub struct HighlightedRange {
pub struct HlRange {
pub range: TextRange,
pub highlight: Highlight,
pub binding_hash: Option<u64>,
@ -54,7 +54,7 @@ pub(crate) fn highlight(
file_id: FileId,
range_to_highlight: Option<TextRange>,
syntactic_name_ref_highlighting: bool,
) -> Vec<HighlightedRange> {
) -> Vec<HlRange> {
let _p = profile::span("highlight");
let sema = Semantics::new(db);
@ -98,7 +98,7 @@ pub(crate) fn highlight(
match event.clone().map(|it| it.into_node().and_then(ast::MacroCall::cast)) {
WalkEvent::Enter(Some(mc)) => {
if let Some(range) = macro_call_range(&mc) {
stack.add(HighlightedRange {
stack.add(HlRange {
range,
highlight: HlTag::Symbol(SymbolKind::Macro).into(),
binding_hash: None,
@ -198,7 +198,7 @@ pub(crate) fn highlight(
}
if macro_rules_highlighter.highlight(element_to_highlight.clone()).is_none() {
stack.add(HighlightedRange { range, highlight, binding_hash });
stack.add(HlRange { range, highlight, binding_hash });
}
if let Some(string) =
@ -209,7 +209,7 @@ pub(crate) fn highlight(
if let Some(char_ranges) = string.char_ranges() {
for (piece_range, _) in char_ranges.iter().filter(|(_, char)| char.is_ok()) {
if string.text()[piece_range.start().into()..].starts_with('\\') {
stack.add(HighlightedRange {
stack.add(HlRange {
range: piece_range + range.start(),
highlight: HlTag::EscapeSequence.into(),
binding_hash: None,

View file

@ -4,7 +4,7 @@ use syntax::{
AstNode, AstToken, SyntaxElement, SyntaxKind, SyntaxNode, TextRange,
};
use crate::{HighlightedRange, HlTag, SymbolKind};
use crate::{HlRange, HlTag, SymbolKind};
use super::highlights::Highlights;
@ -46,7 +46,7 @@ impl FormatStringHighlighter {
if self.format_string.as_ref() == Some(&SyntaxElement::from(string.syntax().clone())) {
string.lex_format_specifier(|piece_range, kind| {
if let Some(highlight) = highlight_format_specifier(kind) {
stack.add(HighlightedRange {
stack.add(HlRange {
range: piece_range + range.start(),
highlight: highlight.into(),
binding_hash: None,

View file

@ -4,33 +4,29 @@ use std::{cmp::Ordering, iter};
use stdx::equal_range_by;
use syntax::TextRange;
use crate::{HighlightedRange, HlTag};
use crate::{HlRange, HlTag};
pub(super) struct Highlights {
root: Node,
}
struct Node {
highlighted_range: HighlightedRange,
hl_range: HlRange,
nested: Vec<Node>,
}
impl Highlights {
pub(super) fn new(range: TextRange) -> Highlights {
Highlights {
root: Node::new(HighlightedRange {
range,
highlight: HlTag::None.into(),
binding_hash: None,
}),
root: Node::new(HlRange { range, highlight: HlTag::None.into(), binding_hash: None }),
}
}
pub(super) fn add(&mut self, highlighted_range: HighlightedRange) {
self.root.add(highlighted_range);
pub(super) fn add(&mut self, hl_range: HlRange) {
self.root.add(hl_range);
}
pub(super) fn to_vec(self) -> Vec<HighlightedRange> {
pub(super) fn to_vec(self) -> Vec<HlRange> {
let mut res = Vec::new();
self.root.flatten(&mut res);
res
@ -38,59 +34,54 @@ impl Highlights {
}
impl Node {
fn new(highlighted_range: HighlightedRange) -> Node {
Node { highlighted_range, nested: Vec::new() }
fn new(hl_range: HlRange) -> Node {
Node { hl_range, nested: Vec::new() }
}
fn add(&mut self, highlighted_range: HighlightedRange) {
assert!(self.highlighted_range.range.contains_range(highlighted_range.range));
fn add(&mut self, hl_range: HlRange) {
assert!(self.hl_range.range.contains_range(hl_range.range));
// Fast path
if let Some(last) = self.nested.last_mut() {
if last.highlighted_range.range.contains_range(highlighted_range.range) {
return last.add(highlighted_range);
if last.hl_range.range.contains_range(hl_range.range) {
return last.add(hl_range);
}
if last.highlighted_range.range.end() <= highlighted_range.range.start() {
return self.nested.push(Node::new(highlighted_range));
if last.hl_range.range.end() <= hl_range.range.start() {
return self.nested.push(Node::new(hl_range));
}
}
let (start, len) = equal_range_by(&self.nested, |n| {
ordering(n.highlighted_range.range, highlighted_range.range)
});
let (start, len) =
equal_range_by(&self.nested, |n| ordering(n.hl_range.range, hl_range.range));
if len == 1
&& self.nested[start].highlighted_range.range.contains_range(highlighted_range.range)
{
return self.nested[start].add(highlighted_range);
if len == 1 && self.nested[start].hl_range.range.contains_range(hl_range.range) {
return self.nested[start].add(hl_range);
}
let nested = self
.nested
.splice(start..start + len, iter::once(Node::new(highlighted_range)))
.splice(start..start + len, iter::once(Node::new(hl_range)))
.collect::<Vec<_>>();
self.nested[start].nested = nested;
}
fn flatten(&self, acc: &mut Vec<HighlightedRange>) {
let mut start = self.highlighted_range.range.start();
fn flatten(&self, acc: &mut Vec<HlRange>) {
let mut start = self.hl_range.range.start();
let mut nested = self.nested.iter();
loop {
let next = nested.next();
let end = next.map_or(self.highlighted_range.range.end(), |it| {
it.highlighted_range.range.start()
});
let end = next.map_or(self.hl_range.range.end(), |it| it.hl_range.range.start());
if start < end {
acc.push(HighlightedRange {
acc.push(HlRange {
range: TextRange::new(start, end),
highlight: self.highlighted_range.highlight,
binding_hash: self.highlighted_range.binding_hash,
highlight: self.hl_range.highlight,
binding_hash: self.hl_range.binding_hash,
});
}
start = match next {
Some(child) => {
child.flatten(acc);
child.highlighted_range.range.end()
child.hl_range.range.end()
}
None => break,
}

View file

@ -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<HighlightedRange>, Injector)> {
pub(super) fn extract_doc_comments(node: &SyntaxNode) -> Option<(Vec<HlRange>, 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<Highlighted
pos
};
new_comments.push(HighlightedRange {
new_comments.push(HlRange {
range: TextRange::new(
range.start(),
range.start() + TextSize::try_from(pos).unwrap(),
@ -196,7 +188,7 @@ pub(super) fn extract_doc_comments(node: &SyntaxNode) -> Option<(Vec<Highlighted
/// Injection of syntax highlighting of doctests.
pub(super) fn highlight_doc_comment(
new_comments: Vec<HighlightedRange>,
new_comments: Vec<HlRange>,
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,

View file

@ -1,7 +1,7 @@
//! Syntax highlighting for macro_rules!.
use syntax::{SyntaxElement, SyntaxKind, SyntaxToken, TextRange, T};
use crate::{HighlightedRange, HlTag};
use crate::{HlRange, HlTag};
#[derive(Default)]
pub(super) struct MacroRulesHighlighter {
@ -19,11 +19,11 @@ impl MacroRulesHighlighter {
}
}
pub(super) fn highlight(&self, element: SyntaxElement) -> Option<HighlightedRange> {
pub(super) fn highlight(&self, element: SyntaxElement) -> Option<HlRange> {
if let Some(state) = self.state.as_ref() {
if matches!(state.rule_state, RuleState::Matcher | RuleState::Expander) {
if let Some(range) = is_metavariable(element) {
return Some(HighlightedRange {
return Some(HlRange {
range,
highlight: HlTag::UnresolvedReference.into(),
binding_hash: None,

View file

@ -6,9 +6,9 @@ use std::{
use ide::{
Assist, AssistKind, CallInfo, CompletionItem, CompletionItemKind, Documentation, FileId,
FileRange, FileSystemEdit, Fold, FoldKind, Highlight, HighlightedRange, HlMod, HlTag, Indel,
InlayHint, InlayKind, InsertTextFormat, LineIndex, Markup, NavigationTarget, ReferenceAccess,
Runnable, Severity, SourceChange, SourceFileEdit, SymbolKind, TextEdit, TextRange, TextSize,
FileRange, FileSystemEdit, Fold, FoldKind, Highlight, HlMod, HlRange, HlTag, Indel, InlayHint,
InlayKind, InsertTextFormat, LineIndex, Markup, NavigationTarget, ReferenceAccess, Runnable,
Severity, SourceChange, SourceFileEdit, SymbolKind, TextEdit, TextRange, TextSize,
};
use itertools::Itertools;
@ -336,7 +336,7 @@ static TOKEN_RESULT_COUNTER: AtomicU32 = AtomicU32::new(1);
pub(crate) fn semantic_tokens(
text: &str,
line_index: &LineIndex,
highlights: Vec<HighlightedRange>,
highlights: Vec<HlRange>,
) -> lsp_types::SemanticTokens {
let id = TOKEN_RESULT_COUNTER.fetch_add(1, Ordering::SeqCst).to_string();
let mut builder = semantic_tokens::SemanticTokensBuilder::new(id);