mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-15 09:27:27 +00:00
Simplify
This commit is contained in:
parent
d1677f3286
commit
db559e5049
3 changed files with 11 additions and 5 deletions
|
@ -252,7 +252,9 @@ impl SourceAnalyzer {
|
|||
db: &dyn HirDatabase,
|
||||
path: &ast::Path,
|
||||
) -> Option<PathResolution> {
|
||||
let parent = || path.syntax().parent();
|
||||
let parent = path.syntax().parent();
|
||||
let parent = || parent.clone();
|
||||
|
||||
let mut prefer_value_ns = false;
|
||||
if let Some(path_expr) = parent().and_then(ast::PathExpr::cast) {
|
||||
let expr_id = self.expr_id(db, &path_expr.into())?;
|
||||
|
@ -337,10 +339,10 @@ impl SourceAnalyzer {
|
|||
return match res {
|
||||
Some(_) => res.map(PathResolution::Macro),
|
||||
None => path.as_single_name_ref().and_then(|name_ref| {
|
||||
if let Some(builtin) = BuiltinAttr::by_name(&name_ref.text()) {
|
||||
Some(PathResolution::BuiltinAttr(builtin))
|
||||
} else if let Some(tool) = Tool::by_name(&name_ref.text()) {
|
||||
Some(PathResolution::Tool(tool))
|
||||
if let builtin @ Some(_) = BuiltinAttr::by_name(&name_ref.text()) {
|
||||
builtin.map(PathResolution::BuiltinAttr)
|
||||
} else if let tool @ Some(_) = Tool::by_name(&name_ref.text()) {
|
||||
tool.map(PathResolution::Tool)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
@ -355,6 +357,8 @@ impl SourceAnalyzer {
|
|||
};
|
||||
match res {
|
||||
Some(_) => res,
|
||||
// this labels any path that starts with a tool module as the tool itself, this is technically wrong
|
||||
// but there is no benefit in differentiating these two cases for the time being
|
||||
None if is_path_of_attr => path
|
||||
.first_segment()
|
||||
.and_then(|seg| seg.name_ref())
|
||||
|
|
|
@ -43,6 +43,7 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
|||
<pre><code><span class="keyword">use</span> <span class="module">inner</span><span class="operator">::</span><span class="brace">{</span><span class="self_keyword">self</span> <span class="keyword">as</span> <span class="module declaration">inner_mod</span><span class="brace">}</span><span class="semicolon">;</span>
|
||||
<span class="keyword">mod</span> <span class="module declaration">inner</span> <span class="brace">{</span><span class="brace">}</span>
|
||||
|
||||
<span class="attribute attribute">#</span><span class="attribute attribute">[</span><span class="builtin_attr attribute library">allow</span><span class="parenthesis attribute">(</span><span class="parenthesis attribute">)</span><span class="attribute attribute">]</span>
|
||||
<span class="attribute attribute">#</span><span class="attribute attribute">[</span><span class="module attribute crate_root library">proc_macros</span><span class="operator attribute">::</span><span class="macro attribute library">identity</span><span class="attribute attribute">]</span>
|
||||
<span class="keyword">pub</span> <span class="keyword">mod</span> <span class="module declaration public">ops</span> <span class="brace">{</span>
|
||||
<span class="attribute attribute">#</span><span class="attribute attribute">[</span><span class="builtin_attr attribute library">lang</span> <span class="operator attribute">=</span> <span class="string_literal attribute">"fn_once"</span><span class="attribute attribute">]</span>
|
||||
|
|
|
@ -16,6 +16,7 @@ fn test_highlighting() {
|
|||
use inner::{self as inner_mod};
|
||||
mod inner {}
|
||||
|
||||
#[allow()]
|
||||
#[proc_macros::identity]
|
||||
pub mod ops {
|
||||
#[lang = "fn_once"]
|
||||
|
|
Loading…
Reference in a new issue