diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 171131c99eb8..8b99662685c5 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -159,7 +159,7 @@ pub fn dependencies(self, db: &dyn HirDatabase) -> Vec { .map(|dep| { let krate = Crate { id: dep.crate_id }; let name = dep.as_name(); - CrateDependency { krate, name, } + CrateDependency { krate, name } }) .collect() } @@ -2224,7 +2224,7 @@ pub(crate) fn by_name(db: &dyn HirDatabase, krate: Crate, name: &str) -> Option< Some(BuiltinAttr { krate: Some(krate.id), idx }) } - pub(crate) fn builtin(name: &str) -> Option { + fn builtin(name: &str) -> Option { hir_def::builtin_attr::INERT_ATTRIBUTES .iter() .position(|tool| tool.name == name) @@ -2263,7 +2263,7 @@ pub(crate) fn by_name(db: &dyn HirDatabase, krate: Crate, name: &str) -> Option< Some(ToolModule { krate: Some(krate.id), idx }) } - pub(crate) fn builtin(name: &str) -> Option { + fn builtin(name: &str) -> Option { hir_def::builtin_attr::TOOL_MODULES .iter() .position(|&tool| tool == name) @@ -2613,13 +2613,9 @@ pub struct Type { } impl Type { - pub(crate) fn new_with_resolver( - db: &dyn HirDatabase, - resolver: &Resolver, - ty: Ty, - ) -> Option { - let krate = resolver.krate()?; - Some(Type::new_with_resolver_inner(db, krate, resolver, ty)) + pub(crate) fn new_with_resolver(db: &dyn HirDatabase, resolver: &Resolver, ty: Ty) -> Type { + let krate = resolver.krate(); + Type::new_with_resolver_inner(db, krate, resolver, ty) } pub(crate) fn new_with_resolver_inner( @@ -3038,10 +3034,7 @@ fn iterate_method_candidates_dyn( // There should be no inference vars in types passed here let canonical = hir_ty::replace_errors_with_variables(&self.ty); - let krate = match scope.krate() { - Some(k) => k, - None => return, - }; + let krate = scope.krate(); let environment = scope.resolver().generic_def().map_or_else( || Arc::new(TraitEnvironment::empty(krate.id)), |d| db.trait_environment(d), @@ -3098,10 +3091,7 @@ fn iterate_path_candidates_dyn( ) { let canonical = hir_ty::replace_errors_with_variables(&self.ty); - let krate = match scope.krate() { - Some(k) => k, - None => return, - }; + let krate = scope.krate(); let environment = scope.resolver().generic_def().map_or_else( || Arc::new(TraitEnvironment::empty(krate.id)), |d| db.trait_environment(d), diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs index 4afdde6494f3..8a700027a3ad 100644 --- a/crates/hir/src/semantics.rs +++ b/crates/hir/src/semantics.rs @@ -403,11 +403,15 @@ pub fn to_module_defs(&self, file: FileId) -> impl Iterator { self.imp.to_module_def(file) } - pub fn scope(&self, node: &SyntaxNode) -> SemanticsScope<'db> { + pub fn scope(&self, node: &SyntaxNode) -> Option> { self.imp.scope(node) } - pub fn scope_at_offset(&self, node: &SyntaxNode, offset: TextSize) -> SemanticsScope<'db> { + pub fn scope_at_offset( + &self, + node: &SyntaxNode, + offset: TextSize, + ) -> Option> { self.imp.scope_at_offset(node, offset) } @@ -456,7 +460,7 @@ fn parse_or_expand(&self, file_id: HirFileId) -> Option { } fn expand(&self, macro_call: &ast::MacroCall) -> Option { - let sa = self.analyze_no_infer(macro_call.syntax()); + let sa = self.analyze_no_infer(macro_call.syntax())?; let file_id = sa.expand(self.db, InFile::new(sa.file_id, macro_call))?; let node = self.parse_or_expand(file_id)?; Some(node) @@ -535,9 +539,9 @@ fn speculative_expand( token_to_map: SyntaxToken, ) -> Option<(SyntaxNode, SyntaxToken)> { let SourceAnalyzer { file_id, resolver, .. } = - self.analyze_no_infer(actual_macro_call.syntax()); + self.analyze_no_infer(actual_macro_call.syntax())?; let macro_call = InFile::new(file_id, actual_macro_call); - let krate = resolver.krate()?; + let krate = resolver.krate(); let macro_call_id = macro_call.as_call_id(self.db.upcast(), krate, |path| { resolver .resolve_path_as_macro(self.db.upcast(), &path) @@ -669,7 +673,10 @@ fn descend_into_macros_impl( Some(it) => it, None => return, }; - let sa = self.analyze_no_infer(&parent); + let sa = match self.analyze_no_infer(&parent) { + Some(it) => it, + None => return, + }; let mut stack: SmallVec<[_; 4]> = smallvec![InFile::new(sa.file_id, token)]; let mut cache = self.expansion_info_cache.borrow_mut(); let mut mcache = self.macro_call_cache.borrow_mut(); @@ -903,70 +910,74 @@ fn resolve_label(&self, lifetime: &ast::Lifetime) -> Option