1010use Entity \Completion \Entry ;
1111use Entity \Completion \Context ;
1212use Complete \Completer \CompleterFactory ;
13+ use Complete \Completer \CompleterInterface ;
1314use Complete \Resolver \ContextResolver ;
1415use Complete \Resolver \ScopeResolver ;
1516use Parser \Processor \IndexProcessor ;
1617use Parser \Processor \ScopeProcessor ;
1718use Parser \Processor \ProcessorInterface ;
19+ use Symfony \Component \EventDispatcher \EventDispatcher ;
1820use Psr \Log \LoggerInterface ;
1921
2022class CompleteEngine {
@@ -25,7 +27,8 @@ public function __construct(
2527 CompleterFactory $ completer ,
2628 IndexProcessor $ indexProcessor ,
2729 ScopeProcessor $ scopeProcessor ,
28- LoggerInterface $ logger
30+ LoggerInterface $ logger ,
31+ EventDispatcher $ dispatcher
2932 ){
3033 $ this ->parser = $ parser ;
3134 $ this ->generator = $ generator ;
@@ -35,6 +38,7 @@ public function __construct(
3538 $ this ->scopeProcessor = $ scopeProcessor ;
3639 $ this ->logger = $ logger ;
3740 $ this ->cachePool = [];
41+ $ this ->dispatcher = $ dispatcher ;
3842 }
3943 public function createCompletion (
4044 Project $ project ,
@@ -80,7 +84,12 @@ public function createCompletion(
8084 protected function findEntries (Project $ project , Scope $ scope , $ badLine , $ column , $ lines ){
8185 $ context = $ this ->contextResolver ->getContext ($ badLine , $ project ->getIndex (), $ scope );
8286 $ completer = $ this ->completerFactory ->getCompleter ($ context );
83- if ($ completer ){
87+ if (!$ completer ) {
88+ $ event = new CustomCompleterEvent ($ project , $ context );
89+ $ this ->dispatcher ->dispatch (self ::CUSTOM_COMPLETER , $ event );
90+ $ completer = $ event ->completer ;
91+ }
92+ if ($ completer ) {
8493 return $ completer ->getEntries ($ project , $ context );
8594 }
8695 return [];
@@ -168,4 +177,8 @@ private function isValidCache($file, $content){
168177 private $ scopeProcessor ;
169178 private $ cachePool ;
170179 private $ logger ;
180+ /** @var EventDispatcher */
181+ private $ dispatcher ;
182+
183+ const CUSTOM_COMPLETER = 'completer.custom ' ;
171184}
0 commit comments