@@ -197,42 +197,19 @@ pub unsafe extern "C" fn rdx_declaration_find_member(
197197
198198 with_graph ( pointer, |graph| {
199199 let id = DeclarationId :: new ( declaration_id) ;
200+ let member_id = StringId :: from ( member_str. as_str ( ) ) ;
200201
201- let Some ( Declaration :: Namespace ( decl) ) = graph. declarations ( ) . get ( & id) else {
202- return ptr:: null ( ) ;
202+ let member_decl_id = match rubydex:: query:: find_member_in_ancestors ( graph, id, member_id, only_inherited) {
203+ Ok ( decl_id) => decl_id,
204+ Err ( rubydex:: query:: FindMemberError :: MemberNotFound ) => return ptr:: null ( ) ,
205+ Err ( err) => unreachable ! (
206+ "Namespace#find_member is only exposed on namespace declarations, so the declaration must exist and be \
207+ a namespace, got {err:?}"
208+ ) ,
203209 } ;
204210
205- let member_id = StringId :: from ( member_str. as_str ( ) ) ;
206- let mut found_main_namespace = false ;
207-
208- decl. ancestors ( )
209- . iter ( )
210- . find_map ( |ancestor| match ancestor {
211- Ancestor :: Complete ( ancestor_id) => {
212- // When only_inherited, skip self and prepended modules
213- if only_inherited {
214- let is_self = * ancestor_id == id;
215- if is_self {
216- found_main_namespace = true ;
217- }
218- if is_self || !found_main_namespace {
219- return None ;
220- }
221- }
222-
223- let ancestor_decl = graph. declarations ( ) . get ( ancestor_id) . unwrap ( ) . as_namespace ( ) . unwrap ( ) ;
224-
225- if let Some ( member_decl_id) = ancestor_decl. member ( & member_id) {
226- return Some ( ( member_decl_id, graph. declarations ( ) . get ( member_decl_id) . unwrap ( ) ) ) ;
227- }
228-
229- None
230- }
231- Ancestor :: Partial ( _) => None ,
232- } )
233- . map_or ( ptr:: null ( ) , |( member_decl_id, member_decl) | {
234- Box :: into_raw ( Box :: new ( CDeclaration :: from_declaration ( * member_decl_id, member_decl) ) ) . cast_const ( )
235- } )
211+ let member_decl = graph. declarations ( ) . get ( & member_decl_id) . unwrap ( ) ;
212+ Box :: into_raw ( Box :: new ( CDeclaration :: from_declaration ( member_decl_id, member_decl) ) ) . cast_const ( )
236213 } )
237214}
238215
0 commit comments