@@ -434,44 +434,6 @@ function vm.getClassFields(suri, object, key, pushResult)
434
434
pushResult (field , true )
435
435
goto CONTINUE
436
436
end
437
- if hasFounded [key ] then
438
- goto CONTINUE
439
- end
440
- local keyType = type (key )
441
- if keyType == ' table' then
442
- -- ---@field [integer] boolean -> class[integer]
443
- local fieldNode = vm .compileNode (field .field )
444
- if vm .isSubType (suri , key .name , fieldNode ) then
445
- local nkey = ' |' .. key .name
446
- if not searchedFields [nkey ] then
447
- pushResult (field , true )
448
- hasFounded [nkey ] = true
449
- end
450
- end
451
- else
452
- local keyObject
453
- if keyType == ' number' then
454
- if math.tointeger (key ) then
455
- keyObject = { type = ' integer' , [1 ] = key }
456
- else
457
- keyObject = { type = ' number' , [1 ] = key }
458
- end
459
- elseif keyType == ' boolean'
460
- or keyType == ' string' then
461
- keyObject = { type = keyType , [1 ] = key }
462
- end
463
- if keyObject and field .field .type ~= ' doc.field.name' then
464
- -- ---@field [integer] boolean -> class[1]
465
- local fieldNode = vm .compileNode (field .field )
466
- if vm .isSubType (suri , keyObject , fieldNode ) then
467
- local nkey = ' |' .. keyType
468
- if not searchedFields [nkey ] then
469
- pushResult (field , true )
470
- hasFounded [nkey ] = true
471
- end
472
- end
473
- end
474
- end
475
437
:: CONTINUE::
476
438
end
477
439
end
@@ -547,6 +509,59 @@ function vm.getClassFields(suri, object, key, pushResult)
547
509
end
548
510
copyToSearched ()
549
511
512
+ -- search for typed @field, eg: ---@field [string] boolean
513
+ -- only if type for this field key is not found
514
+ if not searchedFields [key ] and key ~= vm .ANY and key ~= vm .ANYDOC then
515
+ for _ , set in ipairs (sets ) do
516
+ if set .type == ' doc.class' then
517
+ for _ , field in ipairs (set .fields ) do
518
+ local fieldKey = guide .getKeyName (field )
519
+ if fieldKey then
520
+ -- already processed above
521
+ goto CONTINUE
522
+ end
523
+ local keyType = type (key )
524
+ if keyType == ' table' then
525
+ -- ---@field [integer] boolean -> class[integer]
526
+ local fieldNode = vm .compileNode (field .field )
527
+ if vm .isSubType (suri , key .name , fieldNode ) then
528
+ local nkey = ' |' .. key .name
529
+ if not searchedFields [nkey ] then
530
+ pushResult (field , true )
531
+ hasFounded [nkey ] = true
532
+ end
533
+ end
534
+ else
535
+ local keyObject
536
+ if keyType == ' number' then
537
+ if math.tointeger (key ) then
538
+ keyObject = { type = ' integer' , [1 ] = key }
539
+ else
540
+ keyObject = { type = ' number' , [1 ] = key }
541
+ end
542
+ elseif keyType == ' boolean'
543
+ or keyType == ' string' then
544
+ keyObject = { type = keyType , [1 ] = key }
545
+ end
546
+ if keyObject and field .field .type ~= ' doc.field.name' then
547
+ -- ---@field [integer] boolean -> class[1]
548
+ local fieldNode = vm .compileNode (field .field )
549
+ if vm .isSubType (suri , keyObject , fieldNode ) then
550
+ local nkey = ' |' .. keyType
551
+ if not searchedFields [nkey ] then
552
+ pushResult (field , true )
553
+ hasFounded [nkey ] = true
554
+ end
555
+ end
556
+ end
557
+ end
558
+ :: CONTINUE::
559
+ end
560
+ end
561
+ end
562
+ copyToSearched ()
563
+ end
564
+
550
565
for _ , set in ipairs (sets ) do
551
566
if set .type == ' doc.class' then
552
567
-- look into extends(if field not found)
0 commit comments