@@ -39,17 +39,28 @@ module Vue {
39
39
*/
40
40
DataFlow:: SourceNode vue ( ) { result = vueLibrary ( ) .getAnImmediateUse ( ) }
41
41
42
+ /** An API node referring to a component or `Vue`. */
43
+ private API:: Node component ( ) {
44
+ result = vueLibrary ( )
45
+ or
46
+ result = component ( ) .getMember ( "extend" ) .getReturn ( )
47
+ or
48
+ result = vueLibrary ( ) .getMember ( "component" ) .getReturn ( )
49
+ or
50
+ result = API:: root ( ) .getASuccessor ( any ( VueFileImportEntryPoint e ) )
51
+ }
52
+
42
53
/**
43
- * A call to `vue .extend`.
54
+ * A call to `Vue .extend` or `extend` on a component .
44
55
*/
45
- private class VueExtend extends API:: CallNode {
46
- VueExtend ( ) { this = vueLibrary ( ) .getMember ( "extend" ) .getACall ( ) }
56
+ private class VueExtendCall extends API:: CallNode {
57
+ VueExtendCall ( ) { this = component ( ) .getMember ( "extend" ) .getACall ( ) }
47
58
}
48
59
49
60
private newtype TComponent =
50
61
MkVueInstance ( API:: NewNode def ) { def = vueLibrary ( ) .getAnInstantiation ( ) } or
51
- MkExtendedVue ( VueExtend extend ) or
52
- MkExtendedInstance ( VueExtend extend , API:: NewNode sub ) {
62
+ MkExtendedVue ( VueExtendCall extend ) or
63
+ MkExtendedInstance ( VueExtendCall extend , API:: NewNode sub ) {
53
64
sub = extend .getReturn ( ) .getAnInstantiation ( )
54
65
} or
55
66
MkComponentRegistration ( API:: CallNode def ) { def = vueLibrary ( ) .getMember ( "component" ) .getACall ( ) } or
@@ -406,7 +417,7 @@ module Vue {
406
417
* An extended Vue from `Vue.extend({...})`.
407
418
*/
408
419
class ExtendedVue extends Component , MkExtendedVue {
409
- VueExtend extend ;
420
+ VueExtendCall extend ;
410
421
411
422
ExtendedVue ( ) { this = MkExtendedVue ( extend ) }
412
423
@@ -425,13 +436,19 @@ module Vue {
425
436
override DataFlow:: Node getOwnOptionsObject ( ) { result = extend .getArgument ( 0 ) }
426
437
427
438
override Template:: Element getTemplateElement ( ) { none ( ) }
439
+
440
+ override Component getABaseComponent ( ) {
441
+ result = Component .super .getABaseComponent ( )
442
+ or
443
+ result .getComponentRef ( ) .getMember ( "extend" ) .getACall ( ) = extend
444
+ }
428
445
}
429
446
430
447
/**
431
448
* An instance of an extended Vue, for example `instance` of `var Ext = Vue.extend({...}); var instance = new Ext({...})`.
432
449
*/
433
450
class ExtendedInstance extends Component , MkExtendedInstance {
434
- VueExtend extend ;
451
+ VueExtendCall extend ;
435
452
API:: NewNode sub ;
436
453
437
454
ExtendedInstance ( ) { this = MkExtendedInstance ( extend , sub ) }
@@ -457,6 +474,12 @@ module Vue {
457
474
}
458
475
459
476
override Template:: Element getTemplateElement ( ) { none ( ) }
477
+
478
+ override Component getABaseComponent ( ) {
479
+ result = Component .super .getABaseComponent ( )
480
+ or
481
+ result .getComponentRef ( ) .getAnInstantiation ( ) = sub
482
+ }
460
483
}
461
484
462
485
/**
0 commit comments