@@ -199,22 +199,50 @@ function vm.getClassFields(suri, object, key, ref, pushResult)
199199 -- check ---@field
200200 local hasFounded = {}
201201 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
206208 pushResult (field )
207- hasFounded [key ] = true
209+ hasFounded [fieldKey ] = true
208210 end
209211 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
216221 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
218246 end
219247 end
220248 end
0 commit comments