Extensions methods and properties now are correctly isolated, respect visibility rules and allow adding class properties and class vals.

This commit is contained in:
sergeych committed 2025-12-24 00:29:10 +01:00
1 parent 3b6504d3b1
commit cd2b1a9cb7
26 files changed
+606 -163

No files matched your search

@@ -157,8 +157,12 @@ class LyngExternalAnnotator : ExternalAnnotator<LyngExternalAnnotator.Input, Lyn
is MiniFunDecl -> {
addTypeSegments(d.returnType)
d.params.forEach { addTypeSegments(it.type) }
addTypeSegments(d.receiver)
}
is MiniValDecl -> {
addTypeSegments(d.type)
addTypeSegments(d.receiver)
}
is MiniValDecl -> addTypeSegments(d.type)
is MiniClassDecl -> {
d.ctorFields.forEach { addTypeSegments(it.type) }
d.classFields.forEach { addTypeSegments(it.type) }
@@ -184,7 +184,7 @@ class LyngCompletionContributor : CompletionContributor() {
?: guessReturnClassAcrossKnownCallees(text, memberDotPos, imported)
?: guessReceiverClass(text, memberDotPos, imported)
if (!inferredClass.isNullOrBlank()) {
val ext = BuiltinDocRegistry.extensionMethodNamesFor(inferredClass)
val ext = BuiltinDocRegistry.extensionMemberNamesFor(inferredClass)
if (DEBUG_COMPLETION) log.info("[LYNG_DEBUG] Post-engine extension check for $inferredClass: ${'$'}{ext}")
for (name in ext) {
if (existing.contains(name)) continue
@@ -494,10 +494,10 @@ class LyngCompletionContributor : CompletionContributor() {
}
}
// Supplement with stdlib extension-like methods defined in root.lyng (e.g., fun String.trim(...))
// Supplement with stdlib extension members defined in root.lyng (e.g., fun String.trim(...))
run {
val already = (directMap.keys + inheritedMap.keys).toMutableSet()
val ext = BuiltinDocRegistry.extensionMethodNamesFor(className)
val ext = BuiltinDocRegistry.extensionMemberNamesFor(className)
if (DEBUG_COMPLETION) log.info("[LYNG_DEBUG] Extensions for $className: count=${ext.size} -> ${ext}")
for (name in ext) {
if (already.contains(name)) continue