diff options
Diffstat (limited to 'crates/ra_ide/src/syntax_highlighting.rs')
-rw-r--r-- | crates/ra_ide/src/syntax_highlighting.rs | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/crates/ra_ide/src/syntax_highlighting.rs b/crates/ra_ide/src/syntax_highlighting.rs index 6ac44c2c0..606637d11 100644 --- a/crates/ra_ide/src/syntax_highlighting.rs +++ b/crates/ra_ide/src/syntax_highlighting.rs | |||
@@ -539,21 +539,39 @@ fn highlight_element( | |||
539 | _ => h, | 539 | _ => h, |
540 | } | 540 | } |
541 | } | 541 | } |
542 | T![*] => { | 542 | p if p.is_punct() => match p { |
543 | let prefix_expr = element.parent().and_then(ast::PrefixExpr::cast)?; | 543 | T![::] | T![->] | T![=>] | T![&] => HighlightTag::Operator.into(), |
544 | 544 | T![@] => HighlightTag::Operator | HighlightModifier::ControlFlow, | |
545 | let expr = prefix_expr.expr()?; | 545 | T![!] if element.parent().and_then(ast::MacroCall::cast).is_some() => { |
546 | let ty = sema.type_of_expr(&expr)?; | 546 | Highlight::new(HighlightTag::Macro) |
547 | if !ty.is_raw_ptr() { | ||
548 | return None; | ||
549 | } else { | ||
550 | HighlightTag::Operator | HighlightModifier::Unsafe | ||
551 | } | 547 | } |
552 | } | 548 | T![*] if element.parent().and_then(ast::PrefixExpr::cast).is_some() => { |
553 | T![!] if element.parent().and_then(ast::MacroCall::cast).is_some() => { | 549 | let prefix_expr = element.parent().and_then(ast::PrefixExpr::cast)?; |
554 | Highlight::new(HighlightTag::Macro) | 550 | |
555 | } | 551 | let expr = prefix_expr.expr()?; |
556 | p if p.is_punct() => HighlightTag::Punctuation.into(), | 552 | let ty = sema.type_of_expr(&expr)?; |
553 | if ty.is_raw_ptr() { | ||
554 | HighlightTag::Operator | HighlightModifier::Unsafe | ||
555 | } else if let Some(ast::PrefixOp::Deref) = prefix_expr.op_kind() { | ||
556 | HighlightTag::Operator.into() | ||
557 | } else { | ||
558 | HighlightTag::Punctuation.into() | ||
559 | } | ||
560 | } | ||
561 | T![-] if element.parent().and_then(ast::PrefixExpr::cast).is_some() => { | ||
562 | HighlightTag::NumericLiteral.into() | ||
563 | } | ||
564 | _ if element.parent().and_then(ast::PrefixExpr::cast).is_some() => { | ||
565 | HighlightTag::Operator.into() | ||
566 | } | ||
567 | _ if element.parent().and_then(ast::BinExpr::cast).is_some() => { | ||
568 | HighlightTag::Operator.into() | ||
569 | } | ||
570 | _ if element.parent().and_then(ast::RangeExpr::cast).is_some() => { | ||
571 | HighlightTag::Operator.into() | ||
572 | } | ||
573 | _ => HighlightTag::Punctuation.into(), | ||
574 | }, | ||
557 | 575 | ||
558 | k if k.is_keyword() => { | 576 | k if k.is_keyword() => { |
559 | let h = Highlight::new(HighlightTag::Keyword); | 577 | let h = Highlight::new(HighlightTag::Keyword); |