]> git.lizzy.rs Git - rust.git/commitdiff
Merge #5692
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>
Sun, 9 Aug 2020 23:16:58 +0000 (23:16 +0000)
committerGitHub <noreply@github.com>
Sun, 9 Aug 2020 23:16:58 +0000 (23:16 +0000)
5692: Add support for extern crate r=jonas-schievink a=Nashenas88

This adds syntax highlighting, hover and goto def functionality for extern crate.

Fixes #5690

Co-authored-by: Paul Daniel Faria <Nashenas88@users.noreply.github.com>
1  2 
crates/ra_ide/src/hover.rs
crates/ra_ide/src/syntax_highlighting.rs
crates/ra_ide/src/syntax_highlighting/tests.rs

Simple merge
index f71b804fe9ebee594f5d4d972fa86e6862ebc5df,ec442bcd837188b8295e6f4953b80f3c538499d8..6b7874460a23c1e62e975a6a768217690eb1d6ca
@@@ -495,20 -483,12 +495,21 @@@ fn highlight_element
              };
  
              match name_kind {
+                 Some(NameClass::ExternCrate(_)) => HighlightTag::Module.into(),
                  Some(NameClass::Definition(def)) => {
 -                    highlight_name(db, def) | HighlightModifier::Definition
 +                    highlight_name(db, def, false) | HighlightModifier::Definition
 +                }
 +                Some(NameClass::ConstReference(def)) => highlight_name(db, def, false),
 +                Some(NameClass::FieldShorthand { field, .. }) => {
 +                    let mut h = HighlightTag::Field.into();
 +                    if let Definition::Field(field) = field {
 +                        if let VariantDef::Union(_) = field.parent_def(db) {
 +                            h |= HighlightModifier::Unsafe;
 +                        }
 +                    }
 +
 +                    h
                  }
 -                Some(NameClass::ConstReference(def)) => highlight_name(db, def),
 -                Some(NameClass::FieldShorthand { .. }) => HighlightTag::Field.into(),
                  None => highlight_name_by_syntax(name) | HighlightModifier::Definition,
              }
          }
          }
          NAME_REF => {
              let name_ref = element.into_node().and_then(ast::NameRef::cast).unwrap();
 +            let possibly_unsafe = is_possibly_unsafe(&name_ref);
              match classify_name_ref(sema, &name_ref) {
                  Some(name_kind) => match name_kind {
+                     NameRefClass::ExternCrate(_) => HighlightTag::Module.into(),
                      NameRefClass::Definition(def) => {
                          if let Definition::Local(local) = &def {
                              if let Some(name) = local.name(db) {