diff options
Diffstat (limited to 'crates/libanalysis/src/module_map.rs')
-rw-r--r-- | crates/libanalysis/src/module_map.rs | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/crates/libanalysis/src/module_map.rs b/crates/libanalysis/src/module_map.rs index 47c0018e1..38935807d 100644 --- a/crates/libanalysis/src/module_map.rs +++ b/crates/libanalysis/src/module_map.rs | |||
@@ -91,16 +91,38 @@ impl ModuleMap { | |||
91 | file_resolver: &FileResolver, | 91 | file_resolver: &FileResolver, |
92 | syntax_provider: &SyntaxProvider, | 92 | syntax_provider: &SyntaxProvider, |
93 | ) -> Vec<(ModuleId, SmolStr, SyntaxNode)> { | 93 | ) -> Vec<(ModuleId, SmolStr, SyntaxNode)> { |
94 | let links = self.links(file_resolver, syntax_provider); | 94 | let mut res = Vec::new(); |
95 | let res = links | 95 | self.for_each_parent_link(m, file_resolver, syntax_provider, |link| { |
96 | res.push( | ||
97 | (link.owner, link.name().clone(), link.syntax.clone()) | ||
98 | ) | ||
99 | }); | ||
100 | res | ||
101 | } | ||
102 | |||
103 | pub fn parent_module_ids( | ||
104 | &self, | ||
105 | m: ModuleId, | ||
106 | file_resolver: &FileResolver, | ||
107 | syntax_provider: &SyntaxProvider, | ||
108 | ) -> Vec<ModuleId> { | ||
109 | let mut res = Vec::new(); | ||
110 | self.for_each_parent_link(m, file_resolver, syntax_provider, |link| res.push(link.owner)); | ||
111 | res | ||
112 | } | ||
113 | |||
114 | fn for_each_parent_link( | ||
115 | &self, | ||
116 | m: ModuleId, | ||
117 | file_resolver: &FileResolver, | ||
118 | syntax_provider: &SyntaxProvider, | ||
119 | f: impl FnMut(&Link) | ||
120 | ) { | ||
121 | self.links(file_resolver, syntax_provider) | ||
96 | .links | 122 | .links |
97 | .iter() | 123 | .iter() |
98 | .filter(move |link| link.points_to.iter().any(|&it| it == m)) | 124 | .filter(move |link| link.points_to.iter().any(|&it| it == m)) |
99 | .map(|link| { | 125 | .for_each(f) |
100 | (link.owner, link.name().clone(), link.syntax.clone()) | ||
101 | }) | ||
102 | .collect(); | ||
103 | res | ||
104 | } | 126 | } |
105 | 127 | ||
106 | pub fn problems( | 128 | pub fn problems( |