mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 05:45:12 +00:00
rustfmt
This commit is contained in:
parent
c417b98f02
commit
30bc3b93be
3 changed files with 28 additions and 19 deletions
|
@ -23,8 +23,8 @@ use crate::{
|
||||||
scope::{ExprScopes, ScopeId},
|
scope::{ExprScopes, ScopeId},
|
||||||
BodySourceMap,
|
BodySourceMap,
|
||||||
},
|
},
|
||||||
ty::method_resolution::implements_trait,
|
|
||||||
ids::LocationCtx,
|
ids::LocationCtx,
|
||||||
|
ty::method_resolution::implements_trait,
|
||||||
AsName, AstId, Const, Crate, DefWithBody, Either, Enum, Function, HirDatabase, HirFileId,
|
AsName, AstId, Const, Crate, DefWithBody, Either, Enum, Function, HirDatabase, HirFileId,
|
||||||
MacroDef, Module, Name, Path, PerNs, Resolver, Static, Struct, Trait, Ty,
|
MacroDef, Module, Name, Path, PerNs, Resolver, Static, Struct, Trait, Ty,
|
||||||
};
|
};
|
||||||
|
@ -414,22 +414,25 @@ impl SourceAnalyzer {
|
||||||
/// This function is used in `.await` syntax completion.
|
/// This function is used in `.await` syntax completion.
|
||||||
pub fn impls_future(&self, db: &impl HirDatabase, ty: Ty) -> bool {
|
pub fn impls_future(&self, db: &impl HirDatabase, ty: Ty) -> bool {
|
||||||
// Search for std::future::Future trait in scope
|
// Search for std::future::Future trait in scope
|
||||||
let future_trait = self.resolver.traits_in_scope(db)
|
let future_trait = self
|
||||||
|
.resolver
|
||||||
|
.traits_in_scope(db)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter(|t| {
|
.filter(|t| {
|
||||||
let std = t.module(db).parent(db)
|
let std = t
|
||||||
.and_then(|m| m
|
.module(db)
|
||||||
.name(db)
|
.parent(db)
|
||||||
.and_then(|n| Some(n.to_string() == "std")))
|
.and_then(|m| m.name(db).and_then(|n| Some(n.to_string() == "std")))
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
|
|
||||||
let future = t.module(db).name(db)
|
let future = t
|
||||||
|
.module(db)
|
||||||
|
.name(db)
|
||||||
.and_then(|n| Some(n.to_string() == "future"))
|
.and_then(|n| Some(n.to_string() == "future"))
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
|
|
||||||
let future_trait = t.name(db)
|
let future_trait =
|
||||||
.and_then(|n| Some(n.to_string() == "Future"))
|
t.name(db).and_then(|n| Some(n.to_string() == "Future")).unwrap_or(false);
|
||||||
.unwrap_or(false);
|
|
||||||
|
|
||||||
std && future && future_trait
|
std && future && future_trait
|
||||||
})
|
})
|
||||||
|
|
|
@ -15,7 +15,7 @@ use crate::{
|
||||||
resolve::Resolver,
|
resolve::Resolver,
|
||||||
traits::TraitItem,
|
traits::TraitItem,
|
||||||
ty::primitive::{FloatBitness, UncertainFloatTy, UncertainIntTy},
|
ty::primitive::{FloatBitness, UncertainFloatTy, UncertainIntTy},
|
||||||
ty::{Ty, TypeCtor, traits::Solution},
|
ty::{traits::Solution, Ty, TypeCtor},
|
||||||
Crate, Function, HirDatabase, Module, Name, Trait,
|
Crate, Function, HirDatabase, Module, Name, Trait,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -255,14 +255,20 @@ fn iterate_inherent_methods<T>(
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn implements_trait(ty: &Canonical<Ty>, db: &impl HirDatabase, resolver: &Resolver, krate: Crate, trait_: Trait) -> bool {
|
pub(crate) fn implements_trait(
|
||||||
|
ty: &Canonical<Ty>,
|
||||||
|
db: &impl HirDatabase,
|
||||||
|
resolver: &Resolver,
|
||||||
|
krate: Crate,
|
||||||
|
trait_: Trait,
|
||||||
|
) -> bool {
|
||||||
let env = lower::trait_env(db, resolver);
|
let env = lower::trait_env(db, resolver);
|
||||||
let goal = generic_implements_goal(db, env.clone(), trait_, ty.clone());
|
let goal = generic_implements_goal(db, env.clone(), trait_, ty.clone());
|
||||||
let solution = db.trait_solve(krate, goal);
|
let solution = db.trait_solve(krate, goal);
|
||||||
|
|
||||||
if let Some(solution) = solution {
|
if let Some(solution) = solution {
|
||||||
if let Solution::Unique(_) = solution {
|
if let Solution::Unique(_) = solution {
|
||||||
return true
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
use hir::{AdtDef, Ty, TypeCtor};
|
use hir::{AdtDef, Ty, TypeCtor};
|
||||||
|
|
||||||
use crate::{completion::{
|
use crate::completion::completion_item::{Builder, CompletionKind};
|
||||||
completion_context::CompletionContext,
|
use crate::{
|
||||||
completion_item::Completions,
|
completion::{completion_context::CompletionContext, completion_item::Completions},
|
||||||
}, CompletionItem};
|
CompletionItem,
|
||||||
|
};
|
||||||
use ra_syntax::ast::AstNode;
|
use ra_syntax::ast::AstNode;
|
||||||
|
use ra_syntax::TextRange;
|
||||||
use ra_text_edit::TextEditBuilder;
|
use ra_text_edit::TextEditBuilder;
|
||||||
use rustc_hash::FxHashSet;
|
use rustc_hash::FxHashSet;
|
||||||
use crate::completion::completion_item::{Builder, CompletionKind};
|
|
||||||
use ra_syntax::TextRange;
|
|
||||||
|
|
||||||
/// Applies postfix edition but with CompletionKind::Reference
|
/// Applies postfix edition but with CompletionKind::Reference
|
||||||
fn postfix_reference(ctx: &CompletionContext, label: &str, detail: &str, snippet: &str) -> Builder {
|
fn postfix_reference(ctx: &CompletionContext, label: &str, detail: &str, snippet: &str) -> Builder {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue