MCPcopy Create free account
hub / github.com/PHPantom-dev/phpantom_lsp / resolve_member

Method resolve_member

src/completion/resolve.rs:149–255  ·  view source on GitHub ↗

Resolve a class member (method, property, or constant).

(
        &self,
        item: &mut CompletionItem,
        data: &CompletionItemData,
        ctx: &FileContext,
        content: &str,
    )

Source from the content-addressed store, hash-verified

147
148 /// Resolve a class member (method, property, or constant).
149 fn resolve_member(
150 &self,
151 item: &mut CompletionItem,
152 data: &CompletionItemData,
153 ctx: &FileContext,
154 content: &str,
155 ) {
156 let class_loader = self.class_loader(ctx);
157
158 // Collect all class names (primary + extras for union members).
159 let mut all_class_names = vec![data.class_name.clone()];
160 all_class_names.extend(data.extra_class_names.iter().cloned());
161
162 let member_kind = match data.kind.as_str() {
163 "method" => MemberKindForOrigin::Method,
164 "property" => MemberKindForOrigin::Property,
165 "constant" => MemberKindForOrigin::Constant,
166 _ => return,
167 };
168
169 // Build hover markdown for each class, deduplicating by
170 // declaring class so that a member inherited from a common
171 // ancestor is shown only once.
172 let mut hover_markdowns: Vec<String> = Vec::new();
173 let mut seen_declaring: Vec<String> = Vec::new();
174
175 for class_name in &all_class_names {
176 let class_info: Option<Arc<ClassInfo>> = class_loader(class_name)
177 .or_else(|| ctx.classes.iter().find(|c| c.name == *class_name).cloned());
178
179 let Some(class_info) = class_info else {
180 continue;
181 };
182
183 let merged = crate::virtual_members::resolve_class_fully_cached(
184 &class_info,
185 &class_loader,
186 &self.resolved_class_cache,
187 );
188
189 let hover = match data.kind.as_str() {
190 "method" => {
191 let method = merged.get_method(&data.member_name);
192 method.map(|m| {
193 let declaring = find_declaring_class(
194 &merged,
195 &data.member_name,
196 &member_kind,
197 &class_loader,
198 );
199 (
200 declaring.name.to_string(),
201 self.hover_for_method(m, &declaring, &class_loader, &data.uri, content),
202 )
203 })
204 }
205 "property" => {
206 let property = merged

Callers 1

Calls 15

find_declaring_classFunction · 0.85
extract_hover_markdownFunction · 0.85
set_documentationFunction · 0.85
class_loaderMethod · 0.80
extendMethod · 0.80
iterMethod · 0.80
as_strMethod · 0.80
get_methodMethod · 0.80
hover_for_methodMethod · 0.80
hover_for_propertyMethod · 0.80
hover_for_constantMethod · 0.80

Tested by

no test coverage detected