From 61754678fb4923738c91f2702bba6628230dff6e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 19 Aug 2020 17:02:50 +0200 Subject: Better API factoring around self access modes --- crates/hir/src/semantics.rs | 46 ++------------------------------------------- 1 file changed, 2 insertions(+), 44 deletions(-) (limited to 'crates/hir/src/semantics.rs') diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs index cabeaaf98..8c5f2ff98 100644 --- a/crates/hir/src/semantics.rs +++ b/crates/hir/src/semantics.rs @@ -6,10 +6,8 @@ use std::{cell::RefCell, fmt, iter::successors}; use base_db::{FileId, FileRange}; use hir_def::{ - lang_item::LangItemTarget, resolver::{self, HasResolver, Resolver, TypeNs}, - src::HasSource, - AsMacroCall, FunctionId, Lookup, TraitId, VariantId, + AsMacroCall, FunctionId, TraitId, VariantId, }; use hir_expand::{hygiene::Hygiene, name::AsName, ExpansionInfo}; use hir_ty::associated_type_shorthand_candidates; @@ -17,7 +15,7 @@ use itertools::Itertools; use rustc_hash::{FxHashMap, FxHashSet}; use syntax::{ algo::{find_node_at_offset, skip_trivia_token}, - ast, AstNode, Direction, SmolStr, SyntaxNode, SyntaxToken, TextRange, TextSize, + ast, AstNode, Direction, SyntaxNode, SyntaxToken, TextRange, TextSize, }; use crate::{ @@ -81,13 +79,6 @@ impl PathResolution { } } -pub enum SelfKind { - Shared, - Mutable, - Consuming, - Copied, -} - /// Primary API to get semantic information, like types, from syntax trees. pub struct Semantics<'db, DB> { pub db: &'db DB, @@ -197,10 +188,6 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> { self.imp.type_of_self(param) } - pub fn method_reciever_kind(&self, call: &ast::MethodCallExpr) -> Option { - self.imp.method_receiver_kind(call) - } - pub fn resolve_method_call(&self, call: &ast::MethodCallExpr) -> Option { self.imp.resolve_method_call(call).map(Function::from) } @@ -423,35 +410,6 @@ impl<'db> SemanticsImpl<'db> { self.analyze(param.syntax()).type_of_self(self.db, ¶m) } - fn method_receiver_kind(&self, call: &ast::MethodCallExpr) -> Option { - self.resolve_method_call(call).and_then(|func| { - let lookup = func.lookup(self.db.upcast()); - let src = lookup.source(self.db.upcast()); - let param_list = src.value.param_list()?; - let self_param = param_list.self_param()?; - if self_param.amp_token().is_some() { - return Some(if self_param.mut_token().is_some() { - SelfKind::Mutable - } else { - SelfKind::Shared - }); - } - - let ty = self.type_of_expr(&call.expr()?)?; - let krate = Function::from(func).krate(self.db)?; - let lang_item = self.db.lang_item(krate.id, SmolStr::new("copy")); - let copy_trait = match lang_item? { - LangItemTarget::TraitId(copy_trait) => Trait::from(copy_trait), - _ => return None, - }; - Some(if ty.impls_trait(self.db, copy_trait, &[]) { - SelfKind::Copied - } else { - SelfKind::Consuming - }) - }) - } - fn resolve_method_call(&self, call: &ast::MethodCallExpr) -> Option { self.analyze(call.syntax()).resolve_method_call(self.db, call) } -- cgit v1.2.3