From a2af52075bb63d6e8f847be832575430471bb1b3 Mon Sep 17 00:00:00 2001 From: Michal Niewrzal Date: Mon, 5 Sep 2016 20:25:35 +0200 Subject: [PATCH] Support document formatting #8 --- fixtures/Format.php | 20 +++++++++++++++++++ fixtures/Format_expected.php | 15 +++++++++++++++ src/Server/TextDocument.php | 7 ++++--- tests/LanguageServerTest.php | 2 +- tests/Server/TextDocumentTest.php | 32 ++++++++++++++++++++++++++++++- 5 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 fixtures/Format.php create mode 100644 fixtures/Format_expected.php diff --git a/fixtures/Format.php b/fixtures/Format.php new file mode 100644 index 0000000..b45ebab --- /dev/null +++ b/fixtures/Format.php @@ -0,0 +1,20 @@ +asts[$textDocument->uri]; - if (empty($nodes)){ + if (empty($nodes)) { return []; } - $prettyPrinter = new PrettyPrinterStandard(); + $prettyPrinter = new PrettyPrinter(); $edit = new TextEdit(); $edit->range = new Range(new Position(0, 0), new Position(PHP_INT_MAX, PHP_INT_MAX)); $edit->newText = $prettyPrinter->prettyPrintFile($nodes); diff --git a/tests/LanguageServerTest.php b/tests/LanguageServerTest.php index 4c1ca82..fbba7b5 100644 --- a/tests/LanguageServerTest.php +++ b/tests/LanguageServerTest.php @@ -40,7 +40,7 @@ class LanguageServerTest extends TestCase 'workspaceSymbolProvider' => null, 'codeActionProvider' => null, 'codeLensProvider' => null, - 'documentFormattingProvider' => null, + 'documentFormattingProvider' => true, 'documentRangeFormattingProvider' => null, 'documentOnTypeFormattingProvider' => null, 'renameProvider' => null diff --git a/tests/Server/TextDocumentTest.php b/tests/Server/TextDocumentTest.php index 4f795d4..687b4b6 100644 --- a/tests/Server/TextDocumentTest.php +++ b/tests/Server/TextDocumentTest.php @@ -6,7 +6,7 @@ namespace LanguageServer\Tests\Server; use PHPUnit\Framework\TestCase; use LanguageServer\Tests\MockProtocolStream; use LanguageServer\{Server, Client, LanguageClient}; -use LanguageServer\Protocol\{TextDocumentItem, TextDocumentIdentifier, SymbolKind, DiagnosticSeverity}; +use LanguageServer\Protocol\{TextDocumentItem, TextDocumentIdentifier, SymbolKind, DiagnosticSeverity, FormattingOptions}; use AdvancedJsonRpc\{Request as RequestBody, Response as ResponseBody}; class TextDocumentTest extends TestCase @@ -197,4 +197,34 @@ class TextDocumentTest extends TestCase ]] ], json_decode(json_encode($args), true)); } + + public function testFormatting() + { + $textDocument = new Server\TextDocument(new LanguageClient(new MockProtocolStream())); + // Trigger parsing of source + $textDocumentItem = new TextDocumentItem(); + $textDocumentItem->uri = 'whatever'; + $textDocumentItem->languageId = 'php'; + $textDocumentItem->version = 1; + $textDocumentItem->text = file_get_contents(__DIR__ . '/../../fixtures/Format.php'); + $textDocument->didOpen($textDocumentItem); + + // how code should look after formatting + $expected = file_get_contents(__DIR__ . '/../../fixtures/Format_expected.php'); + // Request formatting + $result = $textDocument->formatting(new TextDocumentIdentifier('whatever'), new FormattingOptions()); + $this->assertEquals([0 => [ + 'range' => [ + 'start' => [ + 'line' => 0, + 'character' => 0 + ], + 'end' => [ + 'line' => PHP_INT_MAX, + 'character' => PHP_INT_MAX + ] + ], + 'newText' => $expected + ]], json_decode(json_encode($result), true)); + } }