From 65864d85f992300bad3913438a542af1bd736a24 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sat, 19 Jan 2019 19:47:56 +0100 Subject: [PATCH 1/2] Rename FnScopes -> ExprScopes The reason for this is that it describes scopes for any body expression, not just that of a function. It did not actually refer to functions at all anymore. --- crates/ra_hir/src/code_model_api.rs | 4 ++-- crates/ra_hir/src/code_model_impl/function.rs | 4 ---- crates/ra_hir/src/db.rs | 6 +++--- crates/ra_hir/src/expr.rs | 4 ++++ .../function => expr}/scope.rs | 18 +++++++++--------- crates/ra_hir/src/lib.rs | 2 +- crates/ra_hir/src/query_definitions.rs | 6 +++--- crates/ra_hir/src/ty.rs | 8 ++++---- 8 files changed, 26 insertions(+), 26 deletions(-) rename crates/ra_hir/src/{code_model_impl/function => expr}/scope.rs (97%) diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index c59b7fbc59d..9405aa8ad63 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -396,7 +396,7 @@ pub struct Function { pub(crate) id: FunctionId, } -pub use crate::code_model_impl::function::ScopeEntryWithSyntax; +pub use crate::expr::ScopeEntryWithSyntax; /// The declared signature of a function. #[derive(Debug, Clone, PartialEq, Eq)] @@ -447,7 +447,7 @@ impl Function { } pub fn scopes(&self, db: &impl HirDatabase) -> ScopesWithSyntaxMapping { - let scopes = db.fn_scopes(*self); + let scopes = db.expr_scopes(*self); let syntax_mapping = db.body_syntax_mapping(*self); ScopesWithSyntaxMapping { scopes, diff --git a/crates/ra_hir/src/code_model_impl/function.rs b/crates/ra_hir/src/code_model_impl/function.rs index e0dd4d6290b..42264399610 100644 --- a/crates/ra_hir/src/code_model_impl/function.rs +++ b/crates/ra_hir/src/code_model_impl/function.rs @@ -1,5 +1,3 @@ -mod scope; - use std::sync::Arc; use ra_syntax::ast::{self, NameOwner}; @@ -11,8 +9,6 @@ use crate::{ impl_block::ImplBlock, }; -pub use self::scope::{FnScopes, ScopesWithSyntaxMapping, ScopeEntryWithSyntax}; - impl Function { pub(crate) fn body(&self, db: &impl HirDatabase) -> Arc { db.body_hir(*self) diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index 16d5a7877be..ddd4b2687cd 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs @@ -7,7 +7,7 @@ use crate::{ MacroCallId, HirFileId, SourceFileItems, SourceItemId, Crate, Module, HirInterner, query_definitions, - Function, FnSignature, FnScopes, + Function, FnSignature, ExprScopes, Struct, Enum, StructField, macros::MacroExpansion, module_tree::ModuleTree, @@ -27,8 +27,8 @@ pub trait HirDatabase: SourceDatabase + AsRef { #[salsa::invoke(crate::macros::expand_macro_invocation)] fn expand_macro_invocation(&self, invoc: MacroCallId) -> Option>; - #[salsa::invoke(query_definitions::fn_scopes)] - fn fn_scopes(&self, func: Function) -> Arc; + #[salsa::invoke(query_definitions::expr_scopes)] + fn expr_scopes(&self, func: Function) -> Arc; #[salsa::invoke(crate::adt::StructData::struct_data_query)] fn struct_data(&self, s: Struct) -> Arc; diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index 60d997bbe50..83e913e4ac2 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs @@ -16,6 +16,10 @@ use crate::{ }; use crate::ty::primitive::{UintTy, UncertainIntTy, UncertainFloatTy}; +pub use self::scope::{ExprScopes, ScopesWithSyntaxMapping, ScopeEntryWithSyntax}; + +mod scope; + #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct ExprId(RawId); impl_arena_id!(ExprId); diff --git a/crates/ra_hir/src/code_model_impl/function/scope.rs b/crates/ra_hir/src/expr/scope.rs similarity index 97% rename from crates/ra_hir/src/code_model_impl/function/scope.rs rename to crates/ra_hir/src/expr/scope.rs index c5d1de5eb58..17a1efed2a7 100644 --- a/crates/ra_hir/src/code_model_impl/function/scope.rs +++ b/crates/ra_hir/src/expr/scope.rs @@ -16,7 +16,7 @@ pub struct ScopeId(RawId); impl_arena_id!(ScopeId); #[derive(Debug, PartialEq, Eq)] -pub struct FnScopes { +pub struct ExprScopes { body: Arc, scopes: Arena, scope_for: FxHashMap, @@ -34,9 +34,9 @@ pub struct ScopeData { entries: Vec, } -impl FnScopes { - pub(crate) fn new(body: Arc) -> FnScopes { - let mut scopes = FnScopes { +impl ExprScopes { + pub(crate) fn new(body: Arc) -> ExprScopes { + let mut scopes = ExprScopes { body: body.clone(), scopes: Arena::default(), scope_for: FxHashMap::default(), @@ -119,7 +119,7 @@ impl FnScopes { #[derive(Debug, Clone, PartialEq, Eq)] pub struct ScopesWithSyntaxMapping { pub syntax_mapping: Arc, - pub scopes: Arc, + pub scopes: Arc, } #[derive(Debug, Clone, PartialEq, Eq)] @@ -249,7 +249,7 @@ fn compute_block_scopes( statements: &[Statement], tail: Option, body: &Body, - scopes: &mut FnScopes, + scopes: &mut ExprScopes, mut scope: ScopeId, ) { for stmt in statements { @@ -275,7 +275,7 @@ fn compute_block_scopes( } } -fn compute_expr_scopes(expr: ExprId, body: &Body, scopes: &mut FnScopes, scope: ScopeId) { +fn compute_expr_scopes(expr: ExprId, body: &Body, scopes: &mut ExprScopes, scope: ScopeId) { scopes.set_scope(expr, scope); match &body[expr] { Expr::Block { statements, tail } => { @@ -344,7 +344,7 @@ mod tests { let marker: &ast::PathExpr = find_node_at_offset(file.syntax(), off).unwrap(); let fn_def: &ast::FnDef = find_node_at_offset(file.syntax(), off).unwrap(); let body_hir = expr::collect_fn_body_syntax(fn_def); - let scopes = FnScopes::new(Arc::clone(body_hir.body())); + let scopes = ExprScopes::new(Arc::clone(body_hir.body())); let scopes = ScopesWithSyntaxMapping { scopes: Arc::new(scopes), syntax_mapping: Arc::new(body_hir), @@ -444,7 +444,7 @@ mod tests { let name_ref: &ast::NameRef = find_node_at_offset(file.syntax(), off).unwrap(); let body_hir = expr::collect_fn_body_syntax(fn_def); - let scopes = FnScopes::new(Arc::clone(body_hir.body())); + let scopes = ExprScopes::new(Arc::clone(body_hir.body())); let scopes = ScopesWithSyntaxMapping { scopes: Arc::new(scopes), syntax_mapping: Arc::new(body_hir), diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index eaf8565eec2..0b9ee63bf16 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -57,9 +57,9 @@ pub use self::{ nameres::{ItemMap, PerNs, Namespace, Resolution}, ty::Ty, impl_block::{ImplBlock, ImplItem}, - code_model_impl::function::{FnScopes, ScopesWithSyntaxMapping}, docs::{Docs, Documentation}, adt::AdtDef, + expr::{ExprScopes, ScopesWithSyntaxMapping}, }; pub use self::code_model_api::{ diff --git a/crates/ra_hir/src/query_definitions.rs b/crates/ra_hir/src/query_definitions.rs index 6724649e1d3..1b61d449e80 100644 --- a/crates/ra_hir/src/query_definitions.rs +++ b/crates/ra_hir/src/query_definitions.rs @@ -4,13 +4,13 @@ use ra_syntax::{SyntaxNode, TreeArc}; use crate::{ SourceFileItems, SourceItemId, HirFileId, - Function, FnScopes, + Function, ExprScopes, db::HirDatabase, }; -pub(super) fn fn_scopes(db: &impl HirDatabase, func: Function) -> Arc { +pub(super) fn expr_scopes(db: &impl HirDatabase, func: Function) -> Arc { let body = db.body_hir(func); - let res = FnScopes::new(body); + let res = ExprScopes::new(body); Arc::new(res) } diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index 7a548569814..0472414a672 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs @@ -34,7 +34,7 @@ use test_utils::tested_by; use crate::{ Module, Function, Struct, StructField, Enum, EnumVariant, Path, Name, ImplBlock, - FnSignature, FnScopes, ModuleDef, AdtDef, + FnSignature, ExprScopes, ModuleDef, AdtDef, db::HirDatabase, type_ref::{TypeRef, Mutability}, name::KnownName, @@ -814,7 +814,7 @@ impl Index for InferenceResult { struct InferenceContext<'a, D: HirDatabase> { db: &'a D, body: Arc, - scopes: Arc, + scopes: Arc, module: Module, impl_block: Option, var_unification_table: InPlaceUnificationTable, @@ -908,7 +908,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { fn new( db: &'a D, body: Arc, - scopes: Arc, + scopes: Arc, module: Module, impl_block: Option, ) -> Self { @@ -1720,7 +1720,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { pub fn infer(db: &impl HirDatabase, func: Function) -> Arc { db.check_canceled(); let body = func.body(db); - let scopes = db.fn_scopes(func); + let scopes = db.expr_scopes(func); let module = func.module(db); let impl_block = func.impl_block(db); let mut ctx = InferenceContext::new(db, body, scopes, module, impl_block); From 1acff307fe2e20f0c2291fd24b08fba6fa39e5ee Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sat, 19 Jan 2019 19:57:43 +0100 Subject: [PATCH 2/2] Move expr_scopes query to its module --- crates/ra_hir/src/db.rs | 2 +- crates/ra_hir/src/expr/scope.rs | 15 +++++++++++++-- crates/ra_hir/src/query_definitions.rs | 11 +++-------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index ddd4b2687cd..189649841a7 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs @@ -27,7 +27,7 @@ pub trait HirDatabase: SourceDatabase + AsRef { #[salsa::invoke(crate::macros::expand_macro_invocation)] fn expand_macro_invocation(&self, invoc: MacroCallId) -> Option>; - #[salsa::invoke(query_definitions::expr_scopes)] + #[salsa::invoke(ExprScopes::expr_scopes_query)] fn expr_scopes(&self, func: Function) -> Arc; #[salsa::invoke(crate::adt::StructData::struct_data_query)] diff --git a/crates/ra_hir/src/expr/scope.rs b/crates/ra_hir/src/expr/scope.rs index 17a1efed2a7..f8b5ba581c4 100644 --- a/crates/ra_hir/src/expr/scope.rs +++ b/crates/ra_hir/src/expr/scope.rs @@ -9,7 +9,11 @@ use ra_syntax::{ }; use ra_arena::{Arena, RawId, impl_arena_id}; -use crate::{Name, AsName, expr::{PatId, ExprId, Pat, Expr, Body, Statement, BodySyntaxMapping}}; +use crate::{ + Name, AsName, Function, + expr::{PatId, ExprId, Pat, Expr, Body, Statement, BodySyntaxMapping}, + db::HirDatabase, +}; #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct ScopeId(RawId); @@ -35,7 +39,14 @@ pub struct ScopeData { } impl ExprScopes { - pub(crate) fn new(body: Arc) -> ExprScopes { + // TODO: This should take something more general than Function + pub(crate) fn expr_scopes_query(db: &impl HirDatabase, function: Function) -> Arc { + let body = db.body_hir(function); + let res = ExprScopes::new(body); + Arc::new(res) + } + + fn new(body: Arc) -> ExprScopes { let mut scopes = ExprScopes { body: body.clone(), scopes: Arena::default(), diff --git a/crates/ra_hir/src/query_definitions.rs b/crates/ra_hir/src/query_definitions.rs index 1b61d449e80..734a982820a 100644 --- a/crates/ra_hir/src/query_definitions.rs +++ b/crates/ra_hir/src/query_definitions.rs @@ -1,19 +1,14 @@ use std::sync::Arc; -use ra_syntax::{SyntaxNode, TreeArc}; +use ra_syntax::{ + SyntaxNode, TreeArc, +}; use crate::{ SourceFileItems, SourceItemId, HirFileId, - Function, ExprScopes, db::HirDatabase, }; -pub(super) fn expr_scopes(db: &impl HirDatabase, func: Function) -> Arc { - let body = db.body_hir(func); - let res = ExprScopes::new(body); - Arc::new(res) -} - pub(super) fn file_items(db: &impl HirDatabase, file_id: HirFileId) -> Arc { let source_file = db.hir_parse(file_id); let res = SourceFileItems::new(file_id, &source_file);