Files finder (#209)
parent
ebd1cc6133
commit
b9f9871156
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace LanguageServer\FilesFinder;
|
||||
|
||||
use LanguageServer\LanguageClient;
|
||||
use Sabre\Event\Promise;
|
||||
use Sabre\Uri;
|
||||
use Webmozart\Glob\Glob;
|
||||
|
||||
/**
|
||||
* Retrieves file content from the client through a textDocument/xcontent request
|
||||
*/
|
||||
class ClientFilesFinder implements FilesFinder
|
||||
{
|
||||
/**
|
||||
* @var LanguageClient
|
||||
*/
|
||||
private $client;
|
||||
|
||||
/**
|
||||
* @param LanguageClient $client
|
||||
*/
|
||||
public function __construct(LanguageClient $client)
|
||||
{
|
||||
$this->client = $client;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all files in the workspace that match a glob.
|
||||
* If the client does not support workspace/files, it falls back to searching the file system directly.
|
||||
*
|
||||
* @param string $glob
|
||||
* @return Promise <string[]> The URIs
|
||||
*/
|
||||
public function find(string $glob): Promise
|
||||
{
|
||||
return $this->client->workspace->xfiles()->then(function (array $textDocuments) use ($glob) {
|
||||
$uris = [];
|
||||
foreach ($textDocuments as $textDocument) {
|
||||
$path = Uri\parse($textDocument->uri)['path'];
|
||||
if (Glob::match($path, $glob)) {
|
||||
$uris[] = $textDocument->uri;
|
||||
}
|
||||
}
|
||||
return $uris;
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace LanguageServer\FilesFinder;
|
||||
|
||||
use Webmozart\Glob\Iterator\GlobIterator;
|
||||
use Sabre\Event\Promise;
|
||||
use function Sabre\Event\coroutine;
|
||||
use function LanguageServer\{pathToUri, timeout};
|
||||
|
||||
class FileSystemFilesFinder implements FilesFinder
|
||||
{
|
||||
/**
|
||||
* Returns all files in the workspace that match a glob.
|
||||
* If the client does not support workspace/xfiles, it falls back to searching the file system directly.
|
||||
*
|
||||
* @param string $glob
|
||||
* @return Promise <string[]>
|
||||
*/
|
||||
public function find(string $glob): Promise
|
||||
{
|
||||
return coroutine(function () use ($glob) {
|
||||
$uris = [];
|
||||
foreach (new GlobIterator($glob) as $path) {
|
||||
$uris[] = pathToUri($path);
|
||||
yield timeout();
|
||||
}
|
||||
return $uris;
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace LanguageServer\FilesFinder;
|
||||
|
||||
use Sabre\Event\Promise;
|
||||
|
||||
/**
|
||||
* Interface for finding files in the workspace
|
||||
*/
|
||||
interface FilesFinder
|
||||
{
|
||||
/**
|
||||
* Returns all files in the workspace that match a glob.
|
||||
* If the client does not support workspace/xfiles, it falls back to searching the file system directly.
|
||||
*
|
||||
* @param string $glob
|
||||
* @return Promise <string[]>
|
||||
*/
|
||||
public function find(string $glob): Promise;
|
||||
}
|
|
@ -14,13 +14,13 @@ use LanguageServer\Protocol\{
|
|||
TextDocumentIdentifier,
|
||||
CompletionOptions
|
||||
};
|
||||
use LanguageServer\FilesFinder\{FilesFinder, ClientFilesFinder, FileSystemFilesFinder};
|
||||
use LanguageServer\ContentRetriever\{ContentRetriever, ClientContentRetriever, FileSystemContentRetriever};
|
||||
use AdvancedJsonRpc;
|
||||
use Sabre\Event\{Loop, Promise};
|
||||
use function Sabre\Event\coroutine;
|
||||
use Exception;
|
||||
use Throwable;
|
||||
use Webmozart\Glob\Iterator\GlobIterator;
|
||||
use Webmozart\Glob\Glob;
|
||||
use Webmozart\PathUtil\Path;
|
||||
use Sabre\Uri;
|
||||
|
||||
|
@ -45,11 +45,6 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher
|
|||
public $completionItem;
|
||||
public $codeLens;
|
||||
|
||||
/**
|
||||
* ClientCapabilities
|
||||
*/
|
||||
private $clientCapabilities;
|
||||
|
||||
private $protocolReader;
|
||||
private $protocolWriter;
|
||||
private $client;
|
||||
|
@ -62,6 +57,16 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher
|
|||
private $rootPath;
|
||||
private $project;
|
||||
|
||||
/**
|
||||
* @var FilesFinder
|
||||
*/
|
||||
private $filesFinder;
|
||||
|
||||
/**
|
||||
* @var ContentRetriever
|
||||
*/
|
||||
private $contentRetrieverFinder;
|
||||
|
||||
public function __construct(ProtocolReader $reader, ProtocolWriter $writer)
|
||||
{
|
||||
parent::__construct($this, '/');
|
||||
|
@ -120,8 +125,20 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher
|
|||
public function initialize(ClientCapabilities $capabilities, string $rootPath = null, int $processId = null): InitializeResult
|
||||
{
|
||||
$this->rootPath = $rootPath;
|
||||
$this->clientCapabilities = $capabilities;
|
||||
$this->project = new Project($this->client, $capabilities);
|
||||
|
||||
if ($capabilities->xfilesProvider) {
|
||||
$this->filesFinder = new ClientFilesFinder($this->client);
|
||||
} else {
|
||||
$this->filesFinder = new FileSystemFilesFinder;
|
||||
}
|
||||
|
||||
if ($capabilities->xcontentProvider) {
|
||||
$this->contentRetriever = new ClientContentRetriever($this->client);
|
||||
} else {
|
||||
$this->contentRetriever = new FileSystemContentRetriever;
|
||||
}
|
||||
|
||||
$this->project = new Project($this->client, $this->contentRetriever);
|
||||
$this->textDocument = new Server\TextDocument($this->project, $this->client);
|
||||
$this->workspace = new Server\Workspace($this->project, $this->client);
|
||||
|
||||
|
@ -183,29 +200,30 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher
|
|||
private function indexProject(): Promise
|
||||
{
|
||||
return coroutine(function () {
|
||||
$textDocuments = yield $this->findPhpFiles();
|
||||
$count = count($textDocuments);
|
||||
$pattern = Path::makeAbsolute('**/*.php', $this->rootPath);
|
||||
$uris = yield $this->filesFinder->find($pattern);
|
||||
$count = count($uris);
|
||||
|
||||
$startTime = microtime(true);
|
||||
|
||||
foreach ($textDocuments as $i => $textDocument) {
|
||||
foreach ($uris as $i => $uri) {
|
||||
// Give LS to the chance to handle requests while indexing
|
||||
yield timeout();
|
||||
$this->client->window->logMessage(
|
||||
MessageType::LOG,
|
||||
"Parsing file $i/$count: {$textDocument->uri}"
|
||||
"Parsing file $i/$count: {$uri}"
|
||||
);
|
||||
try {
|
||||
yield $this->project->loadDocument($textDocument->uri);
|
||||
yield $this->project->loadDocument($uri);
|
||||
} catch (ContentTooLargeException $e) {
|
||||
$this->client->window->logMessage(
|
||||
MessageType::INFO,
|
||||
"Ignoring file {$textDocument->uri} because it exceeds size limit of {$e->limit} bytes ({$e->size})"
|
||||
"Ignoring file {$uri} because it exceeds size limit of {$e->limit} bytes ({$e->size})"
|
||||
);
|
||||
} catch (Exception $e) {
|
||||
$this->client->window->logMessage(
|
||||
MessageType::ERROR,
|
||||
"Error parsing file {$textDocument->uri}: " . (string)$e
|
||||
"Error parsing file {$uri}: " . (string)$e
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -218,34 +236,4 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher
|
|||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all PHP files in the workspace.
|
||||
* If the client does not support workspace/files, it falls back to searching the file system directly.
|
||||
*
|
||||
* @return Promise <TextDocumentIdentifier[]>
|
||||
*/
|
||||
private function findPhpFiles(): Promise
|
||||
{
|
||||
return coroutine(function () {
|
||||
$textDocuments = [];
|
||||
$pattern = Path::makeAbsolute('**/*.php', $this->rootPath);
|
||||
if ($this->clientCapabilities->xfilesProvider) {
|
||||
// Use xfiles request
|
||||
foreach (yield $this->client->workspace->xfiles() as $textDocument) {
|
||||
$path = Uri\parse($textDocument->uri)['path'];
|
||||
if (Glob::match($path, $pattern)) {
|
||||
$textDocuments[] = $textDocument;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Use the file system
|
||||
foreach (new GlobIterator($pattern) as $path) {
|
||||
$textDocuments[] = new TextDocumentIdentifier(pathToUri($path));
|
||||
yield timeout();
|
||||
}
|
||||
}
|
||||
return $textDocuments;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace LanguageServer;
|
|||
|
||||
use LanguageServer\Protocol\{SymbolInformation, TextDocumentIdentifier, ClientCapabilities};
|
||||
use phpDocumentor\Reflection\DocBlockFactory;
|
||||
use LanguageServer\ContentRetriever\{ContentRetriever, ClientContentRetriever, FileSystemContentRetriever};
|
||||
use LanguageServer\ContentRetriever\ContentRetriever;
|
||||
use Sabre\Event\Promise;
|
||||
use function Sabre\Event\coroutine;
|
||||
|
||||
|
@ -61,13 +61,6 @@ class Project
|
|||
*/
|
||||
private $client;
|
||||
|
||||
/**
|
||||
* The client's capabilities
|
||||
*
|
||||
* @var ClientCapabilities
|
||||
*/
|
||||
private $clientCapabilities;
|
||||
|
||||
/**
|
||||
* The content retriever
|
||||
*
|
||||
|
@ -75,18 +68,13 @@ class Project
|
|||
*/
|
||||
private $contentRetriever;
|
||||
|
||||
public function __construct(LanguageClient $client, ClientCapabilities $clientCapabilities)
|
||||
public function __construct(LanguageClient $client, ContentRetriever $contentRetriever)
|
||||
{
|
||||
$this->client = $client;
|
||||
$this->clientCapabilities = $clientCapabilities;
|
||||
$this->parser = new Parser;
|
||||
$this->docBlockFactory = DocBlockFactory::createInstance();
|
||||
$this->definitionResolver = new DefinitionResolver($this);
|
||||
if ($clientCapabilities->xcontentProvider) {
|
||||
$this->contentRetriever = new ClientContentRetriever($client);
|
||||
} else {
|
||||
$this->contentRetriever = new FileSystemContentRetriever;
|
||||
}
|
||||
$this->contentRetriever = $contentRetriever;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -7,6 +7,7 @@ use PHPUnit\Framework\TestCase;
|
|||
use PhpParser\{NodeTraverser, Node};
|
||||
use PhpParser\NodeVisitor\NameResolver;
|
||||
use LanguageServer\{LanguageClient, Project, PhpDocument, Parser, DefinitionResolver};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\ClientCapabilities;
|
||||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\NodeVisitor\{ReferencesAdder, DefinitionCollector};
|
||||
|
@ -17,7 +18,7 @@ class DefinitionCollectorTest extends TestCase
|
|||
public function testCollectsSymbols()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$project = new Project($client, new ClientCapabilities);
|
||||
$project = new Project($client, new FileSystemContentRetriever);
|
||||
$parser = new Parser;
|
||||
$uri = pathToUri(realpath(__DIR__ . '/../../fixtures/symbols.php'));
|
||||
$document = $project->loadDocument($uri)->wait();
|
||||
|
@ -57,7 +58,7 @@ class DefinitionCollectorTest extends TestCase
|
|||
public function testDoesNotCollectReferences()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$project = new Project($client, new ClientCapabilities);
|
||||
$project = new Project($client, new FileSystemContentRetriever);
|
||||
$parser = new Parser;
|
||||
$uri = pathToUri(realpath(__DIR__ . '/../../fixtures/references.php'));
|
||||
$document = $project->loadDocument($uri)->wait();
|
||||
|
|
|
@ -7,6 +7,7 @@ use PHPUnit\Framework\TestCase;
|
|||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\{LanguageClient, Project};
|
||||
use LanguageServer\NodeVisitor\NodeAtPositionFinder;
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{SymbolKind, Position, ClientCapabilities};
|
||||
use PhpParser\Node;
|
||||
|
||||
|
@ -20,7 +21,7 @@ class PhpDocumentTest extends TestCase
|
|||
public function setUp()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$this->project = new Project($client, new ClientCapabilities);
|
||||
$this->project = new Project($client, new FileSystemContentRetriever);
|
||||
}
|
||||
|
||||
public function testParsesVariableVariables()
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace LanguageServer\Tests\Server;
|
|||
use PHPUnit\Framework\TestCase;
|
||||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\{Server, Client, LanguageClient, Project, PhpDocument};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{
|
||||
TextDocumentItem,
|
||||
TextDocumentIdentifier,
|
||||
|
@ -27,7 +28,7 @@ class ProjectTest extends TestCase
|
|||
public function setUp()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$this->project = new Project($client, new ClientCapabilities);
|
||||
$this->project = new Project($client, new FileSystemContentRetriever);
|
||||
}
|
||||
|
||||
public function testGetOrLoadDocumentLoadsDocument()
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace LanguageServer\Tests\Server;
|
|||
use PHPUnit\Framework\TestCase;
|
||||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\{Server, LanguageClient, Project};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{Position, Location, Range, ClientCapabilities};
|
||||
use function LanguageServer\pathToUri;
|
||||
use Sabre\Event\Promise;
|
||||
|
@ -44,7 +45,7 @@ abstract class ServerTestCase extends TestCase
|
|||
public function setUp()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$this->project = new Project($client, new ClientCapabilities);
|
||||
$this->project = new Project($client, new FileSystemContentRetriever);
|
||||
$this->textDocument = new Server\TextDocument($this->project, $client);
|
||||
$this->workspace = new Server\Workspace($this->project, $client);
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace LanguageServer\Tests\Server\TextDocument;
|
|||
use PHPUnit\Framework\TestCase;
|
||||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\{Server, LanguageClient, Project, CompletionProvider};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{
|
||||
TextDocumentIdentifier,
|
||||
TextEdit,
|
||||
|
@ -33,7 +34,7 @@ class CompletionTest extends TestCase
|
|||
public function setUp()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$this->project = new Project($client, new ClientCapabilities);
|
||||
$this->project = new Project($client, new FileSystemContentRetriever);
|
||||
$this->project->loadDocument(pathToUri(__DIR__ . '/../../../fixtures/global_symbols.php'))->wait();
|
||||
$this->project->loadDocument(pathToUri(__DIR__ . '/../../../fixtures/symbols.php'))->wait();
|
||||
$this->textDocument = new Server\TextDocument($this->project, $client);
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace LanguageServer\Tests\Server\TextDocument\Definition;
|
|||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\Tests\Server\ServerTestCase;
|
||||
use LanguageServer\{Server, LanguageClient, Project};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{TextDocumentIdentifier, Position, Range, Location, ClientCapabilities};
|
||||
use Sabre\Event\Promise;
|
||||
|
||||
|
@ -14,7 +15,7 @@ class GlobalFallbackTest extends ServerTestCase
|
|||
public function setUp()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$project = new Project($client, new ClientCapabilities);
|
||||
$project = new Project($client, new FileSystemContentRetriever);
|
||||
$this->textDocument = new Server\TextDocument($project, $client);
|
||||
$project->openDocument('global_fallback', file_get_contents(__DIR__ . '/../../../../fixtures/global_fallback.php'));
|
||||
$project->openDocument('global_symbols', file_get_contents(__DIR__ . '/../../../../fixtures/global_symbols.php'));
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace LanguageServer\Tests\Server\TextDocument;
|
|||
use PHPUnit\Framework\TestCase;
|
||||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\{Server, Client, LanguageClient, Project};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{
|
||||
TextDocumentIdentifier,
|
||||
TextDocumentItem,
|
||||
|
@ -21,7 +22,7 @@ class DidChangeTest extends TestCase
|
|||
public function test()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$project = new Project($client, new ClientCapabilities);
|
||||
$project = new Project($client, new FileSystemContentRetriever);
|
||||
$textDocument = new Server\TextDocument($project, $client);
|
||||
$phpDocument = $project->openDocument('whatever', "<?php\necho 'Hello, World'\n");
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace LanguageServer\Tests\Server\TextDocument;
|
|||
use PHPUnit\Framework\TestCase;
|
||||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\{Server, Client, LanguageClient, Project};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{TextDocumentItem, TextDocumentIdentifier, ClientCapabilities};
|
||||
use Exception;
|
||||
|
||||
|
@ -14,7 +15,7 @@ class DidCloseTest extends TestCase
|
|||
public function test()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$project = new Project($client, new ClientCapabilities);
|
||||
$project = new Project($client, new FileSystemContentRetriever);
|
||||
$textDocument = new Server\TextDocument($project, $client);
|
||||
$phpDocument = $project->openDocument('whatever', 'hello world');
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace LanguageServer\Tests\Server\TextDocument;
|
|||
use PHPUnit\Framework\TestCase;
|
||||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\{Server, Client, LanguageClient, Project};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{
|
||||
TextDocumentIdentifier,
|
||||
TextDocumentItem,
|
||||
|
@ -27,14 +28,14 @@ class FormattingTest extends TestCase
|
|||
public function setUp()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$project = new Project($client, new ClientCapabilities);
|
||||
$project = new Project($client, new FileSystemContentRetriever);
|
||||
$this->textDocument = new Server\TextDocument($project, $client);
|
||||
}
|
||||
|
||||
public function testFormatting()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$project = new Project($client, new ClientCapabilities);
|
||||
$project = new Project($client, new FileSystemContentRetriever);
|
||||
$textDocument = new Server\TextDocument($project, $client);
|
||||
$path = realpath(__DIR__ . '/../../../fixtures/format.php');
|
||||
$uri = pathToUri($path);
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace LanguageServer\Tests\Server\TextDocument;
|
|||
use PHPUnit\Framework\TestCase;
|
||||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\{Server, Client, LanguageClient, Project, ClientHandler};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{TextDocumentIdentifier, TextDocumentItem, DiagnosticSeverity, ClientCapabilities};
|
||||
use Sabre\Event\Promise;
|
||||
use JsonMapper;
|
||||
|
@ -35,7 +36,7 @@ class ParseErrorsTest extends TestCase
|
|||
return Promise\resolve(null);
|
||||
}
|
||||
};
|
||||
$project = new Project($client, new ClientCapabilities);
|
||||
$project = new Project($client, new FileSystemContentRetriever);
|
||||
$this->textDocument = new Server\TextDocument($project, $client);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace LanguageServer\Tests\Server\TextDocument\References;
|
|||
use PHPUnit\Framework\TestCase;
|
||||
use LanguageServer\Tests\MockProtocolStream;
|
||||
use LanguageServer\{Server, LanguageClient, Project};
|
||||
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
||||
use LanguageServer\Protocol\{TextDocumentIdentifier, Position, ReferenceContext, Location, Range, ClientCapabilities};
|
||||
use LanguageServer\Tests\Server\ServerTestCase;
|
||||
|
||||
|
@ -14,7 +15,7 @@ class GlobalFallbackTest extends ServerTestCase
|
|||
public function setUp()
|
||||
{
|
||||
$client = new LanguageClient(new MockProtocolStream, new MockProtocolStream);
|
||||
$project = new Project($client, new ClientCapabilities);
|
||||
$project = new Project($client, new FileSystemContentRetriever);
|
||||
$this->textDocument = new Server\TextDocument($project, $client);
|
||||
$project->openDocument('global_fallback', file_get_contents(__DIR__ . '/../../../../fixtures/global_fallback.php'));
|
||||
$project->openDocument('global_symbols', file_get_contents(__DIR__ . '/../../../../fixtures/global_symbols.php'));
|
||||
|
|
Loading…
Reference in New Issue