Commit 5d44a98
committed
fix: support generic class inheritance with type arguments
Fixes #1929 - Classes can now extend generic classes with specific type
parameters and fields are properly resolved.
Changes:
- Parser: Support doc.type.sign for class extends (e.g., Bar: Foo<integer>)
- Parser: Include doc.field in bindGeneric() to convert generic type names
- VM: Add resolveGenericField() to resolve generic parameters in field types
- VM: Handle doc.type.sign extends in class field inheritance search
- VM: Export vm.cloneObject() for generic type resolution
Example that now works:
---@Class Foo<T>
---@field a T
---@Class Bar: Foo<integer>
local x ---@type Bar
local what = x.a -- Now infers as 'integer' instead of 'unknown'1 parent eacc3d8 commit 5d44a98
4 files changed
Lines changed: 129 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1030 | 1030 | | |
1031 | 1031 | | |
1032 | 1032 | | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
1033 | 1039 | | |
1034 | 1040 | | |
1035 | 1041 | | |
| |||
1850 | 1856 | | |
1851 | 1857 | | |
1852 | 1858 | | |
1853 | | - | |
| 1859 | + | |
| 1860 | + | |
1854 | 1861 | | |
1855 | 1862 | | |
1856 | 1863 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
234 | 234 | | |
235 | 235 | | |
236 | 236 | | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
237 | 287 | | |
238 | 288 | | |
239 | 289 | | |
| |||
357 | 407 | | |
358 | 408 | | |
359 | 409 | | |
360 | | - | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
361 | 420 | | |
362 | 421 | | |
363 | 422 | | |
| |||
565 | 624 | | |
566 | 625 | | |
567 | 626 | | |
568 | | - | |
569 | 627 | | |
570 | 628 | | |
571 | 629 | | |
572 | 630 | | |
573 | 631 | | |
574 | 632 | | |
575 | 633 | | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
576 | 642 | | |
577 | 643 | | |
578 | 644 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
173 | 173 | | |
174 | 174 | | |
175 | 175 | | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4909 | 4909 | | |
4910 | 4910 | | |
4911 | 4911 | | |
| 4912 | + | |
| 4913 | + | |
| 4914 | + | |
| 4915 | + | |
| 4916 | + | |
| 4917 | + | |
| 4918 | + | |
| 4919 | + | |
| 4920 | + | |
| 4921 | + | |
| 4922 | + | |
| 4923 | + | |
| 4924 | + | |
| 4925 | + | |
| 4926 | + | |
| 4927 | + | |
| 4928 | + | |
| 4929 | + | |
| 4930 | + | |
| 4931 | + | |
| 4932 | + | |
| 4933 | + | |
| 4934 | + | |
| 4935 | + | |
| 4936 | + | |
| 4937 | + | |
| 4938 | + | |
| 4939 | + | |
| 4940 | + | |
| 4941 | + | |
| 4942 | + | |
| 4943 | + | |
| 4944 | + | |
| 4945 | + | |
| 4946 | + | |
| 4947 | + | |
| 4948 | + | |
| 4949 | + | |
| 4950 | + | |
| 4951 | + | |
| 4952 | + | |
| 4953 | + | |
| 4954 | + | |
| 4955 | + | |
| 4956 | + | |
| 4957 | + | |
0 commit comments