From d95874d4328c7e4714eaecfabe77a5b50303650e Mon Sep 17 00:00:00 2001 From: Trevor Bortins Date: Tue, 7 Feb 2017 08:21:34 -0800 Subject: [PATCH] refactor uriInVendorDir to getPackageName --- src/Index/ProjectIndex.php | 6 ++++-- src/Indexer.php | 4 ++-- src/Server/Workspace.php | 4 ++-- src/utils.php | 7 ++++--- tests/PhpDocumentTest.php | 11 ++++++----- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Index/ProjectIndex.php b/src/Index/ProjectIndex.php index 8bc2467..538c5c4 100644 --- a/src/Index/ProjectIndex.php +++ b/src/Index/ProjectIndex.php @@ -3,6 +3,8 @@ declare(strict_types = 1); namespace LanguageServer\Index; +use function LanguageServer\getPackageName; + /** * A project index manages the source and dependency indexes */ @@ -44,8 +46,8 @@ class ProjectIndex extends AbstractAggregateIndex */ public function getIndexForUri(string $uri): Index { - if (\LanguageServer\uriInVendorDir($this->composerJson, $uri, $matches)) { - $packageName = $matches[1]; + $packageName = getPackageName($this->composerJson, $uri); + if ($packageName) { return $this->dependenciesIndex->getDependencyIndex($packageName); } return $this->sourceIndex; diff --git a/src/Indexer.php b/src/Indexer.php index bf5ed90..ddf5a57 100644 --- a/src/Indexer.php +++ b/src/Indexer.php @@ -118,9 +118,9 @@ class Indexer $deps = []; foreach ($uris as $uri) { - if ($this->composerLock !== null && uriInVendorDir($this->composerJson, $uri, $matches)) { + $packageName = getPackageName($this->composerJson, $uri); + if ($this->composerLock !== null && $packageName) { // Dependency file - $packageName = $matches[1]; if (!isset($deps[$packageName])) { $deps[$packageName] = []; } diff --git a/src/Server/Workspace.php b/src/Server/Workspace.php index 46cab28..55821ac 100644 --- a/src/Server/Workspace.php +++ b/src/Server/Workspace.php @@ -9,6 +9,7 @@ use LanguageServer\Protocol\{SymbolInformation, SymbolDescriptor, ReferenceInfor use Sabre\Event\Promise; use function Sabre\Event\coroutine; use function LanguageServer\waitForEvent; +use function LanguageServer\getPackageName; /** * Provides method handlers for all workspace/* methods @@ -123,8 +124,7 @@ class Workspace $symbol->$prop = $val; } // Find out package name - uriInVendorDir($this->composerJson, $def->symbolInformation->location->uri, $matches); - $packageName = $matches[1]; + $packageName = getPackageName($this->composerJson, $def->symbolInformation->location->uri); foreach ($this->composerLock->packages as $package) { if ($package->name === $packageName) { $symbol->package = $package; diff --git a/src/utils.php b/src/utils.php index 3d844e4..65db863 100644 --- a/src/utils.php +++ b/src/utils.php @@ -169,12 +169,13 @@ function isVendored(PhpDocument $document, \stdClass $composerJson = null): bool * @param \stdClass|null $composerJson * @param string $uri * @param array $matches - * @return int + * @return string */ -function uriInVendorDir(\stdClass $composerJson = null, string $uri, &$matches): int +function getPackageName(\stdClass $composerJson = null, string $uri): ?string { $vendorDir = str_replace('/', '\/', getVendorDir($composerJson)); - return preg_match("/\/$vendorDir\/([^\/]+\/[^\/]+)\//", $uri, $matches); + preg_match("/\/$vendorDir\/([^\/]+\/[^\/]+)\//", $uri, $matches); + return isset($matches[1]) ? $matches[1] : null; } /** diff --git a/tests/PhpDocumentTest.php b/tests/PhpDocumentTest.php index 829a176..011a231 100644 --- a/tests/PhpDocumentTest.php +++ b/tests/PhpDocumentTest.php @@ -12,6 +12,7 @@ use LanguageServer\ContentRetriever\FileSystemContentRetriever; use LanguageServer\Protocol\{SymbolKind, Position, ClientCapabilities}; use LanguageServer\Index\{Index, ProjectIndex, DependenciesIndex}; use PhpParser\Node; +use function LanguageServer\isVendored; class PhpDocumentTest extends TestCase { @@ -42,18 +43,18 @@ class PhpDocumentTest extends TestCase public function testIsVendored() { $document = $this->createDocument('file:///dir/vendor/x.php', "assertEquals(true, \LanguageServer\isVendored($document)); + $this->assertEquals(true, isVendored($document)); $document = $this->createDocument('file:///c:/dir/vendor/x.php', "assertEquals(true, \LanguageServer\isVendored($document)); + $this->assertEquals(true, isVendored($document)); $document = $this->createDocument('file:///vendor/x.php', "assertEquals(true, \LanguageServer\isVendored($document)); + $this->assertEquals(true, isVendored($document)); $document = $this->createDocument('file:///dir/vendor.php', "assertEquals(false, \LanguageServer\isVendored($document)); + $this->assertEquals(false, isVendored($document)); $document = $this->createDocument('file:///dir/x.php', "assertEquals(false, \LanguageServer\isVendored($document)); + $this->assertEquals(false, isVendored($document)); } }