LuaHelper icon indicating copy to clipboard operation
LuaHelper copied to clipboard

多个文件对一个全局对象进行子属性函数声明操作后,使用处不能自动补全函数名

Open tinymins opened this issue 3 years ago • 3 comments

原始问题

存在一个全局对象,其子属性在不同文件中实现,属性自动补全不能按照预期弹出。

file Base.lua

local X = {}

function X.FunctionA()
end

_G.ExportNS = X

file Base.Part2.lua

local X = _G.ExportNS

function X.FunctionB()
end

file ui.lua

local X = _G.ExportNS

X. -- <- cannot infer X.FunctionB

最小复现

image

local A = {}

A.a = 1

local B = A

B.b = 2

A.

tinymins avatar May 02 '22 12:05 tinymins

---@class AAA
local AAA = {}
AAA.aa = 1

---@class BBB
local BBB = AAA
BBB.bb = 2

---@type AAA | BBB
local CCC = AAA
CCC.

我能想到一个燃眉之急的解决方案,不知道适用不适用,利用声明的方式进行内容合并,曲线救国吧 @tinymins

kaishiqi avatar May 04 '22 03:05 kaishiqi

```lua
---@class AAA
local AAA = {}
AAA.aa = 1

---@class BBB
local BBB = AAA
BBB.bb = 2

---@type AAA | BBB
local CCC = AAA
CCC.

我能想到一个燃眉之急的解决方案,不知道适用不适用,利用声明的方式进行内容合并,曲线救国吧 @tinymins

😂实际上基础库对象由三十多个文件组成,这个曲线好像有点复杂,但是确实是个可以用的思路 https://github.com/tinymins/MY/tree/master/MY_!Base/src/lib

tinymins avatar May 04 '22 04:05 tinymins

@kaishiqi 发现实际使用时候这么做并不好用,例如:

---@class AAA
local AAA = {}
AAA.aa = 1

function AAA.Output()
   print(AAA.bb) -- <- 不能自动完成
end

---@class BBB
local BBB = AAA
BBB.bb = 2

---@type AAA | BBB
local CCC = AAA
CCC.

只有后声明的文件可以自动补全先声明的文件的子属性,但是不同文件之间的调用可能是交织着的。

image

tinymins avatar May 04 '22 10:05 tinymins