@@ -199,22 +199,50 @@ function vm.getClassFields(suri, object, key, ref, pushResult)
199
199
-- check ---@field
200
200
local hasFounded = {}
201
201
for _ , field in ipairs (set .fields ) do
202
- if type (key ) == ' table' then
203
- local fieldNode = vm .compileNode (field .field )
204
- if vm .isSubType (suri , key .name , fieldNode ) then
205
- if not searchedFields [key ] then
202
+ local fieldKey = guide .getKeyName (field )
203
+ if fieldKey then
204
+ -- ---@field x boolean -> class.x
205
+ if key == nil
206
+ or fieldKey == key then
207
+ if not searchedFields [fieldKey ] then
206
208
pushResult (field )
207
- hasFounded [key ] = true
209
+ hasFounded [fieldKey ] = true
208
210
end
209
211
end
210
- else
211
- local fieldKey = guide .getKeyName (field )
212
- if fieldKey then
213
- if key == nil
214
- or fieldKey == key then
215
- if not searchedFields [fieldKey ] then
212
+ end
213
+ if not hasFounded [fieldKey ] then
214
+ local keyType = type (key )
215
+ if keyType == ' table' then
216
+ -- ---@field [integer] boolean -> class[integer]
217
+ local fieldNode = vm .compileNode (field .field )
218
+ if vm .isSubType (suri , key .name , fieldNode ) then
219
+ local nkey = ' |' .. key .name
220
+ if not searchedFields [nkey ] then
216
221
pushResult (field )
217
- hasFounded [fieldKey ] = true
222
+ hasFounded [nkey ] = true
223
+ end
224
+ end
225
+ else
226
+ local typeName
227
+ if keyType == ' number' then
228
+ if math.tointeger (key ) then
229
+ typeName = ' integer'
230
+ else
231
+ typeName = ' number'
232
+ end
233
+ elseif keyType == ' boolean'
234
+ or keyType == ' string' then
235
+ typeName = keyType
236
+ end
237
+ if typeName then
238
+ -- ---@field [integer] boolean -> class[1]
239
+ local fieldNode = vm .compileNode (field .field )
240
+ if vm .isSubType (suri , typeName , fieldNode ) then
241
+ local nkey = ' |' .. typeName
242
+ if not searchedFields [nkey ] then
243
+ pushResult (field )
244
+ hasFounded [nkey ] = true
245
+ end
218
246
end
219
247
end
220
248
end
0 commit comments