Skip to content

fix: method-level generic return type overwritten by receiver class generic resolution#3439

Open
tomlau10 wants to merge 1 commit into
LuaLS:masterfrom
tomlau10:fix/generic-return-overwrite
Open

fix: method-level generic return type overwritten by receiver class generic resolution#3439
tomlau10 wants to merge 1 commit into
LuaLS:masterfrom
tomlau10:fix/generic-return-overwrite

Conversation

@tomlau10

Copy link
Copy Markdown
Contributor

Closes a regression where @return R on a generic class method resolves to unknown when R is method-level (not in the class genericMap).

The receiver block was overwriting Round 1's correct resolution with a clone using only the class generic map, leaving method-level generics unresolved.

Fix: scout-before-clone — skip the receiver block if the return doc references generics not present in the class genericMap.

See discussion for full report and TL;DR: #3438 (comment)


中文版

generic class method 的 @return 如果用了 method-level 的 generic(例如 @return R,而 R 不在 class 的 generic 參數裡),回傳值會錯誤地變成 unknown

原因是 receiver block 只拿了 class genericMap(如 {T=string})去 clone return doc,沒在 map 裡的 generic(如 R)會留 unresolved,直接蓋掉 Round 1 已經正確解好的結果。

修法:scout-before-clone — clone 前先掃 return doc 有沒有 generic name 不在 genericMap 中,有就 skip receiver block,保留 Round 1 的答案。

詳細的 TL;DR 與 report 請見上面的 discussion link。


PS:

  • 使用 claude code + deepseek-v4-flash debug 的
  • 頭幾個 session 效果不佳 🤷‍♂️ 能找到相關代碼位置但 fix 方向極複雜且無效
  • 最後還是要給他一些 insight 才搞得定 😅
    當時我只有 insight 但不知怎樣改,在我說完 insight 後 deepseek 就說 你的分析是對的 然後他就搞定了 🤣
  • 然後我再讓他打磨了下,和加上 test case & changelog

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@tomlau10
tomlau10 force-pushed the fix/generic-return-overwrite branch from 7843eec to 8284020 Compare July 26, 2026 09:15
When a generic class method returns a method-level generic, the
receiver block clone would overwrite Round 1's correct resolution
with an unresolved node. Skip the clone if the return doc references
generics not in the class genericMap.

Discussion: LuaLS#3438
@tomlau10
tomlau10 force-pushed the fix/generic-return-overwrite branch from 8284020 to bafa71b Compare July 26, 2026 09:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant