mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-29 05:15:04 +00:00
hide resolver
This commit is contained in:
parent
f4a94e74bc
commit
62d01dd4df
4 changed files with 17 additions and 9 deletions
|
@ -7,7 +7,7 @@
|
||||||
/// purely for "IDE needs".
|
/// purely for "IDE needs".
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use rustc_hash::FxHashSet;
|
use rustc_hash::{FxHashSet, FxHashMap};
|
||||||
use ra_db::{FileId, FilePosition};
|
use ra_db::{FileId, FilePosition};
|
||||||
use ra_syntax::{
|
use ra_syntax::{
|
||||||
SyntaxNode, AstPtr, TextUnit, SyntaxNodePtr,
|
SyntaxNode, AstPtr, TextUnit, SyntaxNodePtr,
|
||||||
|
@ -17,7 +17,7 @@ use ra_syntax::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
HirDatabase, Function, Struct, Enum, Const, Static, Either, DefWithBody,
|
HirDatabase, Function, Struct, Enum, Const, Static, Either, DefWithBody, PerNs, Name,
|
||||||
AsName, Module, HirFileId, Crate, Trait, Resolver,
|
AsName, Module, HirFileId, Crate, Trait, Resolver,
|
||||||
expr::{BodySourceMap, scope::{ReferenceDescriptor, ScopeEntryWithSyntax, ScopeId, ExprScopes}},
|
expr::{BodySourceMap, scope::{ReferenceDescriptor, ScopeEntryWithSyntax, ScopeId, ExprScopes}},
|
||||||
ids::LocationCtx,
|
ids::LocationCtx,
|
||||||
|
@ -222,10 +222,6 @@ impl SourceAnalyzer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn resolver(&self) -> &Resolver {
|
|
||||||
&self.resolver
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn type_of(&self, _db: &impl HirDatabase, expr: &ast::Expr) -> Option<crate::Ty> {
|
pub fn type_of(&self, _db: &impl HirDatabase, expr: &ast::Expr) -> Option<crate::Ty> {
|
||||||
let expr_id = self.body_source_map.as_ref()?.node_expr(expr)?;
|
let expr_id = self.body_source_map.as_ref()?.node_expr(expr)?;
|
||||||
Some(self.infer.as_ref()?[expr_id].clone())
|
Some(self.infer.as_ref()?[expr_id].clone())
|
||||||
|
@ -246,6 +242,18 @@ impl SourceAnalyzer {
|
||||||
self.infer.as_ref()?.field_resolution(expr_id)
|
self.infer.as_ref()?.field_resolution(expr_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn resolve_hir_path(
|
||||||
|
&self,
|
||||||
|
db: &impl HirDatabase,
|
||||||
|
path: &crate::Path,
|
||||||
|
) -> PerNs<crate::Resolution> {
|
||||||
|
self.resolver.resolve_path(db, path)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn all_names(&self, db: &impl HirDatabase) -> FxHashMap<Name, PerNs<crate::Resolution>> {
|
||||||
|
self.resolver.all_names(db)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn resolve_path(&self, db: &impl HirDatabase, path: &ast::Path) -> Option<PathResolution> {
|
pub fn resolve_path(&self, db: &impl HirDatabase, path: &ast::Path) -> Option<PathResolution> {
|
||||||
if let Some(path_expr) = path.syntax().parent().and_then(ast::PathExpr::cast) {
|
if let Some(path_expr) = path.syntax().parent().and_then(ast::PathExpr::cast) {
|
||||||
let expr_id = self.body_source_map.as_ref()?.node_expr(path_expr.into())?;
|
let expr_id = self.body_source_map.as_ref()?.node_expr(path_expr.into())?;
|
||||||
|
|
|
@ -9,7 +9,7 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) {
|
||||||
Some(path) => path.clone(),
|
Some(path) => path.clone(),
|
||||||
_ => return,
|
_ => return,
|
||||||
};
|
};
|
||||||
let def = match ctx.analyzer.resolver().resolve_path(ctx.db, &path).take_types() {
|
let def = match ctx.analyzer.resolve_hir_path(ctx.db, &path).take_types() {
|
||||||
Some(Resolution::Def(def)) => def,
|
Some(Resolution::Def(def)) => def,
|
||||||
_ => return,
|
_ => return,
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,7 +7,7 @@ pub(super) fn complete_pattern(acc: &mut Completions, ctx: &CompletionContext) {
|
||||||
}
|
}
|
||||||
// FIXME: ideally, we should look at the type we are matching against and
|
// FIXME: ideally, we should look at the type we are matching against and
|
||||||
// suggest variants + auto-imports
|
// suggest variants + auto-imports
|
||||||
let names = ctx.analyzer.resolver().all_names(ctx.db);
|
let names = ctx.analyzer.all_names(ctx.db);
|
||||||
for (name, res) in names.into_iter() {
|
for (name, res) in names.into_iter() {
|
||||||
let r = res.as_ref();
|
let r = res.as_ref();
|
||||||
let def = match r.take_types().or(r.take_values()) {
|
let def = match r.take_types().or(r.take_values()) {
|
||||||
|
|
|
@ -4,7 +4,7 @@ pub(super) fn complete_scope(acc: &mut Completions, ctx: &CompletionContext) {
|
||||||
if !ctx.is_trivial_path {
|
if !ctx.is_trivial_path {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let names = ctx.analyzer.resolver().all_names(ctx.db);
|
let names = ctx.analyzer.all_names(ctx.db);
|
||||||
|
|
||||||
names.into_iter().for_each(|(name, res)| acc.add_resolution(ctx, name.to_string(), &res));
|
names.into_iter().for_each(|(name, res)| acc.add_resolution(ctx, name.to_string(), &res));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue