From b1d5817dd18b7b5fc102a63b084b1ee7ff4f9996 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 24 Apr 2020 23:40:41 +0200 Subject: Convert code to text-size --- crates/ra_ide/src/call_info.rs | 2 +- crates/ra_ide/src/completion/complete_keyword.rs | 2 +- crates/ra_ide/src/completion/complete_postfix.rs | 6 ++-- .../ra_ide/src/completion/complete_trait_impl.rs | 8 ++--- crates/ra_ide/src/completion/completion_context.rs | 13 +++---- crates/ra_ide/src/diagnostics.rs | 2 +- crates/ra_ide/src/extend_selection.rs | 42 ++++++++++------------ crates/ra_ide/src/folding_ranges.rs | 4 +-- crates/ra_ide/src/hover.rs | 2 +- crates/ra_ide/src/join_lines.rs | 38 ++++++++++---------- crates/ra_ide/src/lib.rs | 4 +-- crates/ra_ide/src/matching_brace.rs | 4 +-- crates/ra_ide/src/references/rename.rs | 4 +-- crates/ra_ide/src/source_change.rs | 4 +-- crates/ra_ide/src/syntax_highlighting.rs | 12 +++---- crates/ra_ide/src/syntax_highlighting/html.rs | 11 +++--- crates/ra_ide/src/syntax_tree.rs | 8 ++--- crates/ra_ide/src/test_utils.rs | 4 +-- crates/ra_ide/src/typing.rs | 20 +++++------ crates/ra_ide/src/typing/on_enter.rs | 6 ++-- 20 files changed, 96 insertions(+), 100 deletions(-) (limited to 'crates/ra_ide/src') diff --git a/crates/ra_ide/src/call_info.rs b/crates/ra_ide/src/call_info.rs index 5da254a6e..780a03c13 100644 --- a/crates/ra_ide/src/call_info.rs +++ b/crates/ra_ide/src/call_info.rs @@ -126,7 +126,7 @@ impl FnCallNode { ast::CallExpr(it) => Some(FnCallNode::CallExpr(it)), ast::MethodCallExpr(it) => { let arg_list = it.arg_list()?; - if !syntax.text_range().is_subrange(&arg_list.syntax().text_range()) { + if !arg_list.syntax().text_range().contains_range(syntax.text_range()) { return None; } Some(FnCallNode::MethodCallExpr(it)) diff --git a/crates/ra_ide/src/completion/complete_keyword.rs b/crates/ra_ide/src/completion/complete_keyword.rs index adefb290e..306ce96dc 100644 --- a/crates/ra_ide/src/completion/complete_keyword.rs +++ b/crates/ra_ide/src/completion/complete_keyword.rs @@ -97,7 +97,7 @@ fn is_in_loop_body(leaf: &SyntaxToken) -> bool { } }; if let Some(body) = loop_body { - if leaf.text_range().is_subrange(&body.syntax().text_range()) { + if body.syntax().text_range().contains_range(leaf.text_range()) { return true; } } diff --git a/crates/ra_ide/src/completion/complete_postfix.rs b/crates/ra_ide/src/completion/complete_postfix.rs index 8d397b0fe..d6a37d720 100644 --- a/crates/ra_ide/src/completion/complete_postfix.rs +++ b/crates/ra_ide/src/completion/complete_postfix.rs @@ -2,7 +2,7 @@ use ra_syntax::{ ast::{self, AstNode}, - TextRange, TextUnit, + TextRange, TextSize, }; use ra_text_edit::TextEdit; @@ -115,7 +115,7 @@ pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) { fn get_receiver_text(receiver: &ast::Expr, receiver_is_ambiguous_float_literal: bool) -> String { if receiver_is_ambiguous_float_literal { let text = receiver.syntax().text(); - let without_dot = ..text.len() - TextUnit::of_char('.'); + let without_dot = ..text.len() - TextSize::of('.'); text.slice(without_dot).to_string() } else { receiver.to_string() @@ -143,7 +143,7 @@ fn postfix_snippet( let edit = { let receiver_syntax = receiver.syntax(); let receiver_range = ctx.sema.original_range(receiver_syntax).range; - let delete_range = TextRange::from_to(receiver_range.start(), ctx.source_range().end()); + let delete_range = TextRange::new(receiver_range.start(), ctx.source_range().end()); TextEdit::replace(delete_range, snippet.to_string()) }; CompletionItem::new(CompletionKind::Postfix, ctx.source_range(), label) diff --git a/crates/ra_ide/src/completion/complete_trait_impl.rs b/crates/ra_ide/src/completion/complete_trait_impl.rs index c39943252..e2a8c59cd 100644 --- a/crates/ra_ide/src/completion/complete_trait_impl.rs +++ b/crates/ra_ide/src/completion/complete_trait_impl.rs @@ -141,7 +141,7 @@ fn add_function_impl( } else { CompletionItemKind::Function }; - let range = TextRange::from_to(fn_def_node.text_range().start(), ctx.source_range().end()); + let range = TextRange::new(fn_def_node.text_range().start(), ctx.source_range().end()); match ctx.config.snippet_cap { Some(cap) => { @@ -167,7 +167,7 @@ fn add_type_alias_impl( let snippet = format!("type {} = ", alias_name); - let range = TextRange::from_to(type_def_node.text_range().start(), ctx.source_range().end()); + let range = TextRange::new(type_def_node.text_range().start(), ctx.source_range().end()); CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) .text_edit(TextEdit::replace(range, snippet)) @@ -189,7 +189,7 @@ fn add_const_impl( let snippet = make_const_compl_syntax(&const_.source(ctx.db).value); let range = - TextRange::from_to(const_def_node.text_range().start(), ctx.source_range().end()); + TextRange::new(const_def_node.text_range().start(), ctx.source_range().end()); CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) .text_edit(TextEdit::replace(range, snippet)) @@ -216,7 +216,7 @@ fn make_const_compl_syntax(const_: &ast::ConstDef) -> String { .map_or(const_end, |f| f.text_range().start()); let len = end - start; - let range = TextRange::from_to(0.into(), len); + let range = TextRange::new(0.into(), len); let syntax = const_.syntax().text().slice(range).to_string(); diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs index 37880448a..5f2797e41 100644 --- a/crates/ra_ide/src/completion/completion_context.rs +++ b/crates/ra_ide/src/completion/completion_context.rs @@ -7,7 +7,7 @@ use ra_syntax::{ algo::{find_covering_element, find_node_at_offset}, ast, AstNode, SyntaxKind::*, - SyntaxNode, SyntaxToken, TextRange, TextUnit, + SyntaxNode, SyntaxToken, TextRange, TextSize, }; use ra_text_edit::AtomTextEdit; @@ -20,7 +20,7 @@ pub(crate) struct CompletionContext<'a> { pub(super) sema: Semantics<'a, RootDatabase>, pub(super) db: &'a RootDatabase, pub(super) config: &'a CompletionConfig, - pub(super) offset: TextUnit, + pub(super) offset: TextSize, /// The token before the cursor, in the original file. pub(super) original_token: SyntaxToken, /// The token before the cursor, in the macro-expanded file. @@ -167,7 +167,7 @@ impl<'a> CompletionContext<'a> { match self.token.kind() { // workaroud when completion is triggered by trigger characters. IDENT => self.original_token.text_range(), - _ => TextRange::offset_len(self.offset, 0.into()), + _ => TextRange::empty(self.offset), } } @@ -190,7 +190,7 @@ impl<'a> CompletionContext<'a> { &mut self, original_file: &SyntaxNode, file_with_fake_ident: SyntaxNode, - offset: TextUnit, + offset: TextSize, ) { // First, let's try to complete a reference to some declaration. if let Some(name_ref) = find_node_at_offset::(&file_with_fake_ident, offset) { @@ -224,7 +224,8 @@ impl<'a> CompletionContext<'a> { } if let Some(let_stmt) = bind_pat.syntax().ancestors().find_map(ast::LetStmt::cast) { if let Some(pat) = let_stmt.pat() { - if bind_pat.syntax().text_range().is_subrange(&pat.syntax().text_range()) { + if pat.syntax().text_range().contains_range(bind_pat.syntax().text_range()) + { self.is_pat_binding_or_const = false; } } @@ -246,7 +247,7 @@ impl<'a> CompletionContext<'a> { &mut self, original_file: &SyntaxNode, name_ref: ast::NameRef, - offset: TextUnit, + offset: TextSize, ) { self.name_ref_syntax = find_node_at_offset(&original_file, name_ref.syntax().text_range().start()); diff --git a/crates/ra_ide/src/diagnostics.rs b/crates/ra_ide/src/diagnostics.rs index e7e201709..adfb1b9b2 100644 --- a/crates/ra_ide/src/diagnostics.rs +++ b/crates/ra_ide/src/diagnostics.rs @@ -171,7 +171,7 @@ fn text_edit_for_remove_unnecessary_braces_with_self_in_use_statement( if single_use_tree.path()?.segment()?.syntax().first_child_or_token()?.kind() == T![self] { let start = use_tree_list_node.prev_sibling_or_token()?.text_range().start(); let end = use_tree_list_node.text_range().end(); - let range = TextRange::from_to(start, end); + let range = TextRange::new(start, end); return Some(TextEdit::delete(range)); } None diff --git a/crates/ra_ide/src/extend_selection.rs b/crates/ra_ide/src/extend_selection.rs index 753d2ef6a..9f329b5d3 100644 --- a/crates/ra_ide/src/extend_selection.rs +++ b/crates/ra_ide/src/extend_selection.rs @@ -9,7 +9,7 @@ use ra_syntax::{ ast::{self, AstNode, AstToken}, Direction, NodeOrToken, SyntaxKind::{self, *}, - SyntaxNode, SyntaxToken, TextRange, TextUnit, TokenAtOffset, T, + SyntaxNode, SyntaxToken, TextRange, TextSize, TokenAtOffset, T, }; use crate::FileRange; @@ -121,10 +121,10 @@ fn extend_tokens_from_range( let mut first_token = skip_trivia_token(first_token, Direction::Next)?; let mut last_token = skip_trivia_token(last_token, Direction::Prev)?; - while !first_token.text_range().is_subrange(&original_range) { + while !original_range.contains_range(first_token.text_range()) { first_token = skip_trivia_token(first_token.next_token()?, Direction::Next)?; } - while !last_token.text_range().is_subrange(&original_range) { + while !original_range.contains_range(last_token.text_range()) { last_token = skip_trivia_token(last_token.prev_token()?, Direction::Prev)?; } @@ -161,8 +161,8 @@ fn extend_tokens_from_range( .take_while(validate) .last()?; - let range = first.text_range().extend_to(&last.text_range()); - if original_range.is_subrange(&range) && original_range != range { + let range = first.text_range().cover(last.text_range()); + if range.contains_range(original_range) && original_range != range { Some(range) } else { None @@ -176,7 +176,7 @@ fn shallowest_node(node: &SyntaxNode) -> SyntaxNode { fn extend_single_word_in_comment_or_string( leaf: &SyntaxToken, - offset: TextUnit, + offset: TextSize, ) -> Option { let text: &str = leaf.text(); let cursor_position: u32 = (offset - leaf.text_range().start()).into(); @@ -190,10 +190,10 @@ fn extend_single_word_in_comment_or_string( let start_idx = before.rfind(non_word_char)? as u32; let end_idx = after.find(non_word_char).unwrap_or_else(|| after.len()) as u32; - let from: TextUnit = (start_idx + 1).into(); - let to: TextUnit = (cursor_position + end_idx).into(); + let from: TextSize = (start_idx + 1).into(); + let to: TextSize = (cursor_position + end_idx).into(); - let range = TextRange::from_to(from, to); + let range = TextRange::new(from, to); if range.is_empty() { None } else { @@ -201,24 +201,24 @@ fn extend_single_word_in_comment_or_string( } } -fn extend_ws(root: &SyntaxNode, ws: SyntaxToken, offset: TextUnit) -> TextRange { +fn extend_ws(root: &SyntaxNode, ws: SyntaxToken, offset: TextSize) -> TextRange { let ws_text = ws.text(); - let suffix = TextRange::from_to(offset, ws.text_range().end()) - ws.text_range().start(); - let prefix = TextRange::from_to(ws.text_range().start(), offset) - ws.text_range().start(); + let suffix = TextRange::new(offset, ws.text_range().end()) - ws.text_range().start(); + let prefix = TextRange::new(ws.text_range().start(), offset) - ws.text_range().start(); let ws_suffix = &ws_text.as_str()[suffix]; let ws_prefix = &ws_text.as_str()[prefix]; if ws_text.contains('\n') && !ws_suffix.contains('\n') { if let Some(node) = ws.next_sibling_or_token() { let start = match ws_prefix.rfind('\n') { - Some(idx) => ws.text_range().start() + TextUnit::from((idx + 1) as u32), + Some(idx) => ws.text_range().start() + TextSize::from((idx + 1) as u32), None => node.text_range().start(), }; let end = if root.text().char_at(node.text_range().end()) == Some('\n') { - node.text_range().end() + TextUnit::of_char('\n') + node.text_range().end() + TextSize::of('\n') } else { node.text_range().end() }; - return TextRange::from_to(start, end); + return TextRange::new(start, end); } } ws.text_range() @@ -270,13 +270,10 @@ fn extend_list_item(node: &SyntaxNode) -> Option { .filter(|node| is_single_line_ws(node)) .unwrap_or(delimiter_node); - return Some(TextRange::from_to(node.text_range().start(), final_node.text_range().end())); + return Some(TextRange::new(node.text_range().start(), final_node.text_range().end())); } if let Some(delimiter_node) = nearby_delimiter(delimiter, node, Direction::Prev) { - return Some(TextRange::from_to( - delimiter_node.text_range().start(), - node.text_range().end(), - )); + return Some(TextRange::new(delimiter_node.text_range().start(), node.text_range().end())); } None @@ -286,10 +283,7 @@ fn extend_comments(comment: ast::Comment) -> Option { let prev = adj_comments(&comment, Direction::Prev); let next = adj_comments(&comment, Direction::Next); if prev != next { - Some(TextRange::from_to( - prev.syntax().text_range().start(), - next.syntax().text_range().end(), - )) + Some(TextRange::new(prev.syntax().text_range().start(), next.syntax().text_range().end())) } else { None } diff --git a/crates/ra_ide/src/folding_ranges.rs b/crates/ra_ide/src/folding_ranges.rs index 4eeb76d14..034c4c7d4 100644 --- a/crates/ra_ide/src/folding_ranges.rs +++ b/crates/ra_ide/src/folding_ranges.rs @@ -141,7 +141,7 @@ fn contiguous_range_for_group_unless( } if first != &last { - Some(TextRange::from_to(first.text_range().start(), last.text_range().end())) + Some(TextRange::new(first.text_range().start(), last.text_range().end())) } else { // The group consists of only one element, therefore it cannot be folded None @@ -187,7 +187,7 @@ fn contiguous_range_for_comment( } if first != last { - Some(TextRange::from_to( + Some(TextRange::new( first.syntax().text_range().start(), last.syntax().text_range().end(), )) diff --git a/crates/ra_ide/src/hover.rs b/crates/ra_ide/src/hover.rs index a31187994..fcc2ab7fb 100644 --- a/crates/ra_ide/src/hover.rs +++ b/crates/ra_ide/src/hover.rs @@ -275,7 +275,7 @@ mod tests { ", ); let hover = analysis.hover(position).unwrap().unwrap(); - assert_eq!(hover.range, TextRange::from_to(95.into(), 100.into())); + assert_eq!(hover.range, TextRange::new(95.into(), 100.into())); assert_eq!(trim_markup_opt(hover.info.first()), Some("u32")); } diff --git a/crates/ra_ide/src/join_lines.rs b/crates/ra_ide/src/join_lines.rs index 7d70dab9c..040846ec3 100644 --- a/crates/ra_ide/src/join_lines.rs +++ b/crates/ra_ide/src/join_lines.rs @@ -7,7 +7,7 @@ use ra_syntax::{ ast::{self, AstNode, AstToken}, Direction, NodeOrToken, SourceFile, SyntaxKind::{self, WHITESPACE}, - SyntaxNode, SyntaxToken, TextRange, TextUnit, T, + SyntaxNode, SyntaxToken, TextRange, TextSize, T, }; use ra_text_edit::{TextEdit, TextEditBuilder}; @@ -19,7 +19,7 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit { None => return TextEditBuilder::default().finish(), Some(pos) => pos, }; - TextRange::offset_len(range.start() + pos, TextUnit::of_char('\n')) + TextRange::at(range.start() + pos, TextSize::of('\n')) } else { range }; @@ -30,13 +30,13 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit { }; let mut edit = TextEditBuilder::default(); for token in node.descendants_with_tokens().filter_map(|it| it.into_token()) { - let range = match range.intersection(&token.text_range()) { + let range = match range.intersect(token.text_range()) { Some(range) => range, None => continue, } - token.text_range().start(); let text = token.text(); for (pos, _) in text[range].bytes().enumerate().filter(|&(_, b)| b == b'\n') { - let pos: TextUnit = (pos as u32).into(); + let pos: TextSize = (pos as u32).into(); let off = token.text_range().start() + range.start() + pos; if !edit.invalidates_offset(off) { remove_newline(&mut edit, &token, off); @@ -47,16 +47,16 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit { edit.finish() } -fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextUnit) { +fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextSize) { if token.kind() != WHITESPACE || token.text().bytes().filter(|&b| b == b'\n').count() != 1 { // The node is either the first or the last in the file - let suff = &token.text()[TextRange::from_to( - offset - token.text_range().start() + TextUnit::of_char('\n'), - TextUnit::of_str(token.text()), + let suff = &token.text()[TextRange::new( + offset - token.text_range().start() + TextSize::of('\n'), + TextSize::of(token.text().as_str()), )]; let spaces = suff.bytes().take_while(|&b| b == b' ').count(); - edit.replace(TextRange::offset_len(offset, ((spaces + 1) as u32).into()), " ".to_string()); + edit.replace(TextRange::at(offset, ((spaces + 1) as u32).into()), " ".to_string()); return; } @@ -65,7 +65,7 @@ fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextU let next = token.next_sibling_or_token().unwrap(); if is_trailing_comma(prev.kind(), next.kind()) { // Removes: trailing comma, newline (incl. surrounding whitespace) - edit.delete(TextRange::from_to(prev.text_range().start(), token.text_range().end())); + edit.delete(TextRange::new(prev.text_range().start(), token.text_range().end())); return; } if prev.kind() == T![,] && next.kind() == T!['}'] { @@ -76,7 +76,7 @@ fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextU " " }; edit.replace( - TextRange::from_to(prev.text_range().start(), token.text_range().end()), + TextRange::new(prev.text_range().start(), token.text_range().end()), space.to_string(), ); return; @@ -87,9 +87,9 @@ fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextU next.as_token().cloned().and_then(ast::Comment::cast), ) { // Removes: newline (incl. surrounding whitespace), start of the next comment - edit.delete(TextRange::from_to( + edit.delete(TextRange::new( token.text_range().start(), - next.syntax().text_range().start() + TextUnit::of_str(next.prefix()), + next.syntax().text_range().start() + TextSize::of(next.prefix()), )); return; } @@ -420,10 +420,10 @@ fn foo() { check_join_lines( r" <|>use ra_syntax::{ - TextUnit, TextRange, + TextSize, TextRange, };", r" -<|>use ra_syntax::{TextUnit, TextRange, +<|>use ra_syntax::{TextSize, TextRange, };", ); } @@ -434,11 +434,11 @@ fn foo() { check_join_lines( r" use ra_syntax::{ -<|> TextUnit, TextRange +<|> TextSize, TextRange };", r" use ra_syntax::{ -<|> TextUnit, TextRange};", +<|> TextSize, TextRange};", ); } @@ -448,11 +448,11 @@ use ra_syntax::{ check_join_lines( r" use ra_syntax::{ -<|> TextUnit, TextRange, +<|> TextSize, TextRange, };", r" use ra_syntax::{ -<|> TextUnit, TextRange};", +<|> TextSize, TextRange};", ); } diff --git a/crates/ra_ide/src/lib.rs b/crates/ra_ide/src/lib.rs index f692fbaa2..09f602fe1 100644 --- a/crates/ra_ide/src/lib.rs +++ b/crates/ra_ide/src/lib.rs @@ -60,7 +60,7 @@ use ra_ide_db::{ symbol_index::{self, FileSymbol}, LineIndexDatabase, }; -use ra_syntax::{SourceFile, TextRange, TextUnit}; +use ra_syntax::{SourceFile, TextRange, TextSize}; use crate::display::ToNav; @@ -265,7 +265,7 @@ impl Analysis { /// Returns position of the matching brace (all types of braces are /// supported). - pub fn matching_brace(&self, position: FilePosition) -> Cancelable> { + pub fn matching_brace(&self, position: FilePosition) -> Cancelable> { self.with_db(|db| { let parse = db.parse(position.file_id); let file = parse.tree(); diff --git a/crates/ra_ide/src/matching_brace.rs b/crates/ra_ide/src/matching_brace.rs index d1204fac0..b85348706 100644 --- a/crates/ra_ide/src/matching_brace.rs +++ b/crates/ra_ide/src/matching_brace.rs @@ -1,8 +1,8 @@ //! FIXME: write short doc here -use ra_syntax::{ast::AstNode, SourceFile, SyntaxKind, TextUnit, T}; +use ra_syntax::{ast::AstNode, SourceFile, SyntaxKind, TextSize, T}; -pub fn matching_brace(file: &SourceFile, offset: TextUnit) -> Option { +pub fn matching_brace(file: &SourceFile, offset: TextSize) -> Option { const BRACES: &[SyntaxKind] = &[T!['{'], T!['}'], T!['['], T![']'], T!['('], T![')'], T![<], T![>]]; let (brace_node, brace_idx) = file diff --git a/crates/ra_ide/src/references/rename.rs b/crates/ra_ide/src/references/rename.rs index 9acc6158a..1c64b3eb9 100644 --- a/crates/ra_ide/src/references/rename.rs +++ b/crates/ra_ide/src/references/rename.rs @@ -54,7 +54,7 @@ fn source_edit_from_reference(reference: Reference, new_name: &str) -> SourceFil ReferenceKind::StructFieldShorthandForField => { replacement_text.push_str(new_name); replacement_text.push_str(": "); - TextRange::from_to( + TextRange::new( reference.file_range.range.start(), reference.file_range.range.start(), ) @@ -62,7 +62,7 @@ fn source_edit_from_reference(reference: Reference, new_name: &str) -> SourceFil ReferenceKind::StructFieldShorthandForLocal => { replacement_text.push_str(": "); replacement_text.push_str(new_name); - TextRange::from_to(reference.file_range.range.end(), reference.file_range.range.end()) + TextRange::new(reference.file_range.range.end(), reference.file_range.range.end()) } _ => { replacement_text.push_str(new_name); diff --git a/crates/ra_ide/src/source_change.rs b/crates/ra_ide/src/source_change.rs index f5f7f8807..71b0e8f75 100644 --- a/crates/ra_ide/src/source_change.rs +++ b/crates/ra_ide/src/source_change.rs @@ -6,7 +6,7 @@ use ra_db::RelativePathBuf; use ra_text_edit::TextEdit; -use crate::{FileId, FilePosition, SourceRootId, TextUnit}; +use crate::{FileId, FilePosition, SourceRootId, TextSize}; #[derive(Debug)] pub struct SourceChange { @@ -104,7 +104,7 @@ pub enum FileSystemEdit { pub(crate) struct SingleFileChange { pub label: String, pub edit: TextEdit, - pub cursor_position: Option, + pub cursor_position: Option, } impl SingleFileChange { diff --git a/crates/ra_ide/src/syntax_highlighting.rs b/crates/ra_ide/src/syntax_highlighting.rs index c0728bfb1..6f02614a6 100644 --- a/crates/ra_ide/src/syntax_highlighting.rs +++ b/crates/ra_ide/src/syntax_highlighting.rs @@ -61,16 +61,16 @@ impl HighlightedRangeStack { let prev = self.stack.last_mut().unwrap(); let needs_flattening = !children.is_empty() && !prev.is_empty() - && children.first().unwrap().range.is_subrange(&prev.last().unwrap().range); + && prev.last().unwrap().range.contains_range(children.first().unwrap().range); if !needs_flattening { prev.extend(children); } else { let mut parent = prev.pop().unwrap(); for ele in children { - assert!(ele.range.is_subrange(&parent.range)); + assert!(parent.range.contains_range(ele.range)); let mut cloned = parent.clone(); - parent.range = TextRange::from_to(parent.range.start(), ele.range.start()); - cloned.range = TextRange::from_to(ele.range.end(), cloned.range.end()); + parent.range = TextRange::new(parent.range.start(), ele.range.start()); + cloned.range = TextRange::new(ele.range.end(), cloned.range.end()); if !parent.range.is_empty() { prev.push(parent); } @@ -152,7 +152,7 @@ pub(crate) fn highlight( }; // Element outside of the viewport, no need to highlight - if range_to_highlight.intersection(&event_range).is_none() { + if range_to_highlight.intersect(event_range).is_none() { continue; } @@ -309,7 +309,7 @@ fn macro_call_range(macro_call: &ast::MacroCall) -> Option { } } - Some(TextRange::from_to(range_start, range_end)) + Some(TextRange::new(range_start, range_end)) } fn highlight_element( diff --git a/crates/ra_ide/src/syntax_highlighting/html.rs b/crates/ra_ide/src/syntax_highlighting/html.rs index 4496529a1..4f17d1040 100644 --- a/crates/ra_ide/src/syntax_highlighting/html.rs +++ b/crates/ra_ide/src/syntax_highlighting/html.rs @@ -1,7 +1,7 @@ //! Renders a bit of code as HTML. use ra_db::SourceDatabase; -use ra_syntax::{AstNode, TextUnit}; +use ra_syntax::{AstNode, TextSize}; use crate::{FileId, RootDatabase}; @@ -23,17 +23,18 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo let ranges = highlight(db, file_id, None); let text = parse.tree().syntax().to_string(); - let mut prev_pos = TextUnit::from(0); + let mut prev_pos = TextSize::from(0); let mut buf = String::new(); buf.push_str(&STYLE); buf.push_str("
");
+    // TODO: unusize
     for range in &ranges {
         if range.range.start() > prev_pos {
-            let curr = &text[prev_pos.to_usize()..range.range.start().to_usize()];
+            let curr = &text[usize::from(prev_pos)..usize::from(range.range.start())];
             let text = html_escape(curr);
             buf.push_str(&text);
         }
-        let curr = &text[range.range.start().to_usize()..range.range.end().to_usize()];
+        let curr = &text[usize::from(range.range.start())..usize::from(range.range.end())];
 
         let class = range.highlight.to_string().replace('.', " ");
         let color = match (rainbow, range.binding_hash) {
@@ -47,7 +48,7 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo
         prev_pos = range.range.end();
     }
     // Add the remaining (non-highlighted) text
-    let curr = &text[prev_pos.to_usize()..];
+    let curr = &text[usize::from(prev_pos)..];
     let text = html_escape(curr);
     buf.push_str(&text);
     buf.push_str("
"); diff --git a/crates/ra_ide/src/syntax_tree.rs b/crates/ra_ide/src/syntax_tree.rs index 5842ae2e8..a8a97a69f 100644 --- a/crates/ra_ide/src/syntax_tree.rs +++ b/crates/ra_ide/src/syntax_tree.rs @@ -5,7 +5,7 @@ use ra_ide_db::RootDatabase; use ra_syntax::{ algo, AstNode, NodeOrToken, SourceFile, SyntaxKind::{RAW_STRING, STRING}, - SyntaxToken, TextRange, TextUnit, + SyntaxToken, TextRange, TextSize, }; pub use ra_db::FileId; @@ -66,13 +66,13 @@ fn syntax_tree_for_token(node: &SyntaxToken, text_range: TextRange) -> Option Option>( +pub fn check_action Option>( before: &str, after: &str, f: F, diff --git a/crates/ra_ide/src/typing.rs b/crates/ra_ide/src/typing.rs index f55cd3bf5..98af79dff 100644 --- a/crates/ra_ide/src/typing.rs +++ b/crates/ra_ide/src/typing.rs @@ -21,7 +21,7 @@ use ra_ide_db::RootDatabase; use ra_syntax::{ algo::find_node_at_offset, ast::{self, AstToken}, - AstNode, SourceFile, TextRange, TextUnit, + AstNode, SourceFile, TextRange, TextSize, }; use ra_text_edit::TextEdit; @@ -45,7 +45,7 @@ pub(crate) fn on_char_typed( fn on_char_typed_inner( file: &SourceFile, - offset: TextUnit, + offset: TextSize, char_typed: char, ) -> Option { assert!(TRIGGER_CHARS.contains(char_typed)); @@ -60,7 +60,7 @@ fn on_char_typed_inner( /// Returns an edit which should be applied after `=` was typed. Primarily, /// this works when adding `let =`. // FIXME: use a snippet completion instead of this hack here. -fn on_eq_typed(file: &SourceFile, offset: TextUnit) -> Option { +fn on_eq_typed(file: &SourceFile, offset: TextSize) -> Option { assert_eq!(file.syntax().text().char_at(offset), Some('=')); let let_stmt: ast::LetStmt = find_node_at_offset(file.syntax(), offset)?; if let_stmt.semicolon_token().is_some() { @@ -86,7 +86,7 @@ fn on_eq_typed(file: &SourceFile, offset: TextUnit) -> Option } /// Returns an edit which should be applied when a dot ('.') is typed on a blank line, indenting the line appropriately. -fn on_dot_typed(file: &SourceFile, offset: TextUnit) -> Option { +fn on_dot_typed(file: &SourceFile, offset: TextSize) -> Option { assert_eq!(file.syntax().text().char_at(offset), Some('.')); let whitespace = file.syntax().token_at_offset(offset).left_biased().and_then(ast::Whitespace::cast)?; @@ -96,13 +96,13 @@ fn on_dot_typed(file: &SourceFile, offset: TextUnit) -> Option let newline = text.rfind('\n')?; &text[newline + 1..] }; - let current_indent_len = TextUnit::of_str(current_indent); + let current_indent_len = TextSize::of(current_indent); // Make sure dot is a part of call chain let field_expr = ast::FieldExpr::cast(whitespace.syntax().parent())?; let prev_indent = leading_indent(field_expr.syntax())?; let target_indent = format!(" {}", prev_indent); - let target_indent_len = TextUnit::of_str(&target_indent); + let target_indent_len = TextSize::of(&target_indent); if current_indent_len == target_indent_len { return None; } @@ -110,20 +110,20 @@ fn on_dot_typed(file: &SourceFile, offset: TextUnit) -> Option Some(SingleFileChange { label: "reindent dot".to_string(), edit: TextEdit::replace( - TextRange::from_to(offset - current_indent_len, offset), + TextRange::new(offset - current_indent_len, offset), target_indent, ), cursor_position: Some( - offset + target_indent_len - current_indent_len + TextUnit::of_char('.'), + offset + target_indent_len - current_indent_len + TextSize::of('.'), ), }) } /// Adds a space after an arrow when `fn foo() { ... }` is turned into `fn foo() -> { ... }` -fn on_arrow_typed(file: &SourceFile, offset: TextUnit) -> Option { +fn on_arrow_typed(file: &SourceFile, offset: TextSize) -> Option { let file_text = file.syntax().text(); assert_eq!(file_text.char_at(offset), Some('>')); - let after_arrow = offset + TextUnit::of_char('>'); + let after_arrow = offset + TextSize::of('>'); if file_text.char_at(after_arrow) != Some('{') { return None; } diff --git a/crates/ra_ide/src/typing/on_enter.rs b/crates/ra_ide/src/typing/on_enter.rs index 6bcf2d72b..30c8c5572 100644 --- a/crates/ra_ide/src/typing/on_enter.rs +++ b/crates/ra_ide/src/typing/on_enter.rs @@ -7,7 +7,7 @@ use ra_syntax::{ ast::{self, AstToken}, AstNode, SmolStr, SourceFile, SyntaxKind::*, - SyntaxToken, TextUnit, TokenAtOffset, + SyntaxToken, TextSize, TokenAtOffset, }; use ra_text_edit::TextEdit; @@ -28,7 +28,7 @@ pub(crate) fn on_enter(db: &RootDatabase, position: FilePosition) -> Option Option