Skip to content

Commit 11255f0

Browse files
committed
refactored custom completer event
1 parent b5f865e commit 11255f0

7 files changed

Lines changed: 31 additions & 18 deletions

File tree

src/Application/CLI/Router.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public function getCommand($commandName, Container $container)
2424
} elseif ($commandName == 'plugin') {
2525
$command = new \Command\PluginCommand($container);
2626
} else {
27-
$command = new \Command\ErrorCommand($container);
27+
$command = new \Command\ErrorCommand();
2828
}
2929
return $command;
3030
}

src/Application/HTTP/Router.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public function getCommand($commandName, Container $container)
2424
} elseif ($commandName == 'save') {
2525
$command = new \Command\SaveCommand($container);
2626
} else {
27-
$command = new \Command\ErrorCommand($container);
27+
$command = new \Command\ErrorCommand();
2828
}
2929
return $command;
3030
}

src/Complete/CompleteEngine.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
use Entity\Completion\Entry;
1111
use Entity\Completion\Context;
1212
use Complete\Completer\CompleterFactory;
13+
use Complete\Completer\CompleterInterface;
1314
use Complete\Resolver\ContextResolver;
1415
use Complete\Resolver\ScopeResolver;
1516
use Parser\Processor\IndexProcessor;
1617
use Parser\Processor\ScopeProcessor;
1718
use Parser\Processor\ProcessorInterface;
19+
use Symfony\Component\EventDispatcher\EventDispatcher;
1820
use Psr\Log\LoggerInterface;
1921

2022
class 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
}

src/Complete/Completer/ClassNameCompleter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
class ClassNameCompleter implements CompleterInterface {
1010
public function getEntries(Project $project, Context $context){
1111
$entries = [];
12-
$postfix = trim($context->getData());
12+
$postfix = trim("");
1313
foreach($project->getIndex()->getClasses() as $fqcn => $class){
1414
if(!empty($postfix) && strpos($fqcn, $postfix) === false){
1515
continue;

src/Complete/Completer/CompleterFactory.php

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace Complete\Completer;
44

5-
use Symfony\Component\EventDispatcher\EventDispatcher;
65
use Entity\Completion\Context;
76
use Entity\Completion\Scope;
87
use Entity\Project;
@@ -14,20 +13,17 @@ public function __construct(
1413
NamespaceCompleter $namespaceCompleter,
1514
ObjectCompleter $objectCompleter,
1615
StaticCompleter $staticCompleter,
17-
UseCompleter $useCompleter,
18-
EventDispatcher $dispatcher
16+
UseCompleter $useCompleter
1917
) {
2018
$this->classNameCompleter = $classNameCompleter;
2119
$this->interfaceNameCompleter = $interfaceNameCompleter;
2220
$this->namespaceCompleter = $namespaceCompleter;
2321
$this->objectCompleter = $objectCompleter;
2422
$this->staticCompleter = $staticCompleter;
2523
$this->useCompleter = $useCompleter;
26-
$this->dispatcher = $dispatcher;
2724
}
2825
public function getCompleter(Context $context)
2926
{
30-
$event = new CustomCompleterEvent($context);
3127
if ($context->isNamespace()) {
3228
return $this->namespaceCompleter;
3329
} elseif ($context->isUse()) {
@@ -40,10 +36,8 @@ public function getCompleter(Context $context)
4036
return $this->objectCompleter;
4137
} elseif ($context->isClassStatic()) {
4238
return $this->staticCompleter;
43-
} else {
44-
$this->dispatcher->dispatch(self::CUSTOM_COMPLETER, $event);
4539
}
46-
return $event->completer;
40+
return null;
4741
}
4842

4943
private $classNameCompleter;
@@ -52,7 +46,4 @@ public function getCompleter(Context $context)
5246
private $objectCompleter;
5347
private $staticCompleter;
5448
private $useCompleter;
55-
private $dispatcher;
56-
57-
const CUSTOM_COMPLETER = 'completer.custom';
5849
}
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<?php
22

3-
namespace Complete\Completer;
3+
namespace Complete;
44

55
use Entity\Completion\Context;
6+
use Entity\Project;
67
use Symfony\Component\EventDispatcher\Event;
78

89
class CustomCompleterEvent extends Event
@@ -11,8 +12,11 @@ class CustomCompleterEvent extends Event
1112
public $completer = null;
1213
/** @var Context */
1314
public $context;
14-
public function __construct(Context $context)
15+
/** @var Project */
16+
public $project;
17+
public function __construct(Project $project, Context $context)
1518
{
1619
$this->context = $context;
20+
$this->project = $project;
1721
}
1822
}

src/Entity/Completion/Context.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,17 @@ public function getData() {
5656
public function addType($type) {
5757
$this->type = $this->type | $type;
5858
}
59+
5960
/**
6061
* @return Scope
6162
*/
6263
public function getScope() {
6364
return $this->scope;
6465
}
66+
67+
/**
68+
* @return Token
69+
*/
6570
public function getToken() {
6671
return $this->token;
6772
}

0 commit comments

Comments
 (0)