mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-09-07 08:26:11 +00:00
Replace the sequential Tier 2b/2a propagation with a unified fixpoint loop that handles four binding kinds: callResult, copy, fieldAccess, and methodCallResult. The loop iterates until no new bindings are produced (max 10 iterations), enabling arbitrary-depth mixed chains: const user = getUser(); // callResult → User const addr = user.address; // fieldAccess → Address const city = addr.getCity(); // methodCallResult → City city.save(); // resolves to City#save Infrastructure: - PendingAssignment union extended with fieldAccess and methodCallResult - resolveFieldType helper: typeName → class nodeId → lookupFieldByOwner - resolveMethodReturnType helper: typeName → class nodeId → lookupFuzzyCallable filtered by ownerId - Fixpoint also resolves reverse-order copy chains that single-pass missed Languages: TS, JS, Java, Kotlin, C#, Go, Rust, Python, PHP, Ruby, C++. Each gets field access and/or method-call-with-receiver detection in extractPendingAssignment, plus method-chain-binding test fixtures.
31 lines
345 B
Ruby
31 lines
345 B
Ruby
class City
|
|
def save
|
|
true
|
|
end
|
|
end
|
|
|
|
class Address
|
|
# @return [City]
|
|
def get_city
|
|
City.new
|
|
end
|
|
end
|
|
|
|
class User
|
|
# @return [Address]
|
|
def get_address
|
|
Address.new
|
|
end
|
|
end
|
|
|
|
# @return [User]
|
|
def get_user
|
|
User.new
|
|
end
|
|
|
|
def process_chain
|
|
user = get_user()
|
|
addr = user.get_address()
|
|
city = addr.get_city()
|
|
city.save
|
|
end
|