From a3711e08dc4e393957dff136218c47d8b77da14f Mon Sep 17 00:00:00 2001 From: Wilco Kusee Date: Sat, 23 Mar 2019 17:34:49 +0100 Subject: Move highlighting and matching_brace --- crates/ra_ide_api_light/src/lib.rs | 122 +-------------------- .../src/snapshots/tests__highlighting.snap | 32 ------ 2 files changed, 1 insertion(+), 153 deletions(-) delete mode 100644 crates/ra_ide_api_light/src/snapshots/tests__highlighting.snap (limited to 'crates/ra_ide_api_light/src') diff --git a/crates/ra_ide_api_light/src/lib.rs b/crates/ra_ide_api_light/src/lib.rs index 1c5fa0837..df7f144b6 100644 --- a/crates/ra_ide_api_light/src/lib.rs +++ b/crates/ra_ide_api_light/src/lib.rs @@ -5,128 +5,8 @@ mod structure; -use rustc_hash::FxHashSet; -use ra_syntax::{ - SourceFile, SyntaxNode, TextRange, TextUnit, Direction, - algo::find_leaf_at_offset, - SyntaxKind::{self, *}, - ast::{self, AstNode}, -}; +use ra_syntax::TextRange; pub use crate::{ structure::{file_structure, StructureNode}, }; - -#[derive(Debug)] -pub struct HighlightedRange { - pub range: TextRange, - pub tag: &'static str, -} - -#[derive(Debug, Copy, Clone)] -pub enum Severity { - Error, - WeakWarning, -} - -pub fn matching_brace(file: &SourceFile, offset: TextUnit) -> Option { - const BRACES: &[SyntaxKind] = - &[L_CURLY, R_CURLY, L_BRACK, R_BRACK, L_PAREN, R_PAREN, L_ANGLE, R_ANGLE]; - let (brace_node, brace_idx) = find_leaf_at_offset(file.syntax(), offset) - .filter_map(|node| { - let idx = BRACES.iter().position(|&brace| brace == node.kind())?; - Some((node, idx)) - }) - .next()?; - let parent = brace_node.parent()?; - let matching_kind = BRACES[brace_idx ^ 1]; - let matching_node = parent.children().find(|node| node.kind() == matching_kind)?; - Some(matching_node.range().start()) -} - -pub fn highlight(root: &SyntaxNode) -> Vec { - // Visited nodes to handle highlighting priorities - let mut highlighted = FxHashSet::default(); - let mut res = Vec::new(); - for node in root.descendants() { - if highlighted.contains(&node) { - continue; - } - let tag = match node.kind() { - COMMENT => "comment", - STRING | RAW_STRING | RAW_BYTE_STRING | BYTE_STRING => "string", - ATTR => "attribute", - NAME_REF => "text", - NAME => "function", - INT_NUMBER | FLOAT_NUMBER | CHAR | BYTE => "literal", - LIFETIME => "parameter", - k if k.is_keyword() => "keyword", - _ => { - if let Some(macro_call) = ast::MacroCall::cast(node) { - if let Some(path) = macro_call.path() { - if let Some(segment) = path.segment() { - if let Some(name_ref) = segment.name_ref() { - highlighted.insert(name_ref.syntax()); - let range_start = name_ref.syntax().range().start(); - let mut range_end = name_ref.syntax().range().end(); - for sibling in path.syntax().siblings(Direction::Next) { - match sibling.kind() { - EXCL | IDENT => range_end = sibling.range().end(), - _ => (), - } - } - res.push(HighlightedRange { - range: TextRange::from_to(range_start, range_end), - tag: "macro", - }) - } - } - } - } - continue; - } - }; - res.push(HighlightedRange { range: node.range(), tag }) - } - res -} - -#[cfg(test)] -mod tests { - use ra_syntax::AstNode; - use insta::assert_debug_snapshot_matches; - - use test_utils::{add_cursor, assert_eq_text, extract_offset}; - - use super::*; - - #[test] - fn test_highlighting() { - let file = SourceFile::parse( - r#" -// comment -fn main() {} - println!("Hello, {}!", 92); -"#, - ); - let hls = highlight(file.syntax()); - assert_debug_snapshot_matches!("highlighting", hls); - } - - #[test] - fn test_matching_brace() { - fn do_check(before: &str, after: &str) { - let (pos, before) = extract_offset(before); - let file = SourceFile::parse(&before); - let new_pos = match matching_brace(&file, pos) { - None => pos, - Some(pos) => pos, - }; - let actual = add_cursor(&before, new_pos); - assert_eq_text!(after, &actual); - } - - do_check("struct Foo { a: i32, }<|>", "struct Foo <|>{ a: i32, }"); - } - -} diff --git a/crates/ra_ide_api_light/src/snapshots/tests__highlighting.snap b/crates/ra_ide_api_light/src/snapshots/tests__highlighting.snap deleted file mode 100644 index ef306a7a0..000000000 --- a/crates/ra_ide_api_light/src/snapshots/tests__highlighting.snap +++ /dev/null @@ -1,32 +0,0 @@ ---- -created: "2019-01-22T14:45:01.959724300+00:00" -creator: insta@0.4.0 -expression: hls -source: "crates\\ra_ide_api_light\\src\\lib.rs" ---- -[ - HighlightedRange { - range: [1; 11), - tag: "comment" - }, - HighlightedRange { - range: [12; 14), - tag: "keyword" - }, - HighlightedRange { - range: [15; 19), - tag: "function" - }, - HighlightedRange { - range: [29; 37), - tag: "macro" - }, - HighlightedRange { - range: [38; 50), - tag: "string" - }, - HighlightedRange { - range: [52; 54), - tag: "literal" - } -] -- cgit v1.2.3