55use Entity \Completion \Context ;
66use Entity \Completion \Scope ;
77use Entity \Project ;
8+ use Symfony \Component \EventDispatcher \EventDispatcher ;
9+ use Complete \CustomCompleterEvent ;
10+
11+ class CompleterFactory
12+ {
13+ const CUSTOM_COMPLETER = 'completer.custom ' ;
814
9- class CompleterFactory {
1015 public function __construct (
1116 ClassNameCompleter $ classNameCompleter ,
1217 InterfaceNameCompleter $ interfaceNameCompleter ,
1318 NamespaceCompleter $ namespaceCompleter ,
1419 ObjectCompleter $ objectCompleter ,
1520 StaticCompleter $ staticCompleter ,
16- UseCompleter $ useCompleter
21+ UseCompleter $ useCompleter ,
22+ VarCompleter $ varCompleter ,
23+ EventDispatcher $ dispatcher
1724 ) {
1825 $ this ->classNameCompleter = $ classNameCompleter ;
1926 $ this ->interfaceNameCompleter = $ interfaceNameCompleter ;
2027 $ this ->namespaceCompleter = $ namespaceCompleter ;
2128 $ this ->objectCompleter = $ objectCompleter ;
2229 $ this ->staticCompleter = $ staticCompleter ;
2330 $ this ->useCompleter = $ useCompleter ;
31+ $ this ->varCompleter = $ varCompleter ;
32+ $ this ->dispatcher = $ dispatcher ;
2433 }
25- public function getCompleter (Context $ context )
34+ public function getCompleter (Context $ context, Project $ project )
2635 {
2736 if ($ context ->isNamespace ()) {
2837 return $ this ->namespaceCompleter ;
@@ -36,6 +45,14 @@ public function getCompleter(Context $context)
3645 return $ this ->objectCompleter ;
3746 } elseif ($ context ->isClassStatic ()) {
3847 return $ this ->staticCompleter ;
48+ } elseif ($ context ->isVar ()) {
49+ return $ this ->varCompleter ;
50+ }
51+ $ event = new CustomCompleterEvent ($ project , $ context );
52+ $ this ->dispatcher ->dispatch (self ::CUSTOM_COMPLETER , $ event );
53+ $ completer = $ event ->completer ;
54+ if ($ completer ) {
55+ return $ completer ;
3956 }
4057 return null ;
4158 }
@@ -46,4 +63,6 @@ public function getCompleter(Context $context)
4663 private $ objectCompleter ;
4764 private $ staticCompleter ;
4865 private $ useCompleter ;
66+ private $ varCompleter ;
67+ private $ dispatcher ;
4968}
0 commit comments