Skip to content

Commit

Permalink
Partial revert "Fix auto comletion by partial property or method"
Browse files Browse the repository at this point in the history
Filtering is not necessary. Clients using LSP should filter the results themselves.
That's what it says in the documentation.

This reverts commit d6faff2.
  • Loading branch information
issidorov committed Jan 26, 2024
1 parent c0e8d32 commit 45f4cc0
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 219 deletions.
20 changes: 0 additions & 20 deletions src/Psalm/Codebase.php
Original file line number Diff line number Diff line change
Expand Up @@ -2036,26 +2036,6 @@ public function getCompletionItemsForClassishThing(
return $completion_items;
}

/**
* @param list<CompletionItem> $items
* @return list<CompletionItem>
*/
public function filterCompletionItemsByBeginLiteralPart(array $items, string $literal_part): array
{
if (!$literal_part) {
return $items;
}

$res = [];
foreach ($items as $item) {
if ($item->insertText && strpos($item->insertText, $literal_part) === 0) {
$res[] = $item;
}
}

return $res;
}

/**
* @return list<CompletionItem>
*/
Expand Down
3 changes: 0 additions & 3 deletions src/Psalm/Internal/LanguageServer/Server/TextDocument.php
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,6 @@ public function completion(TextDocumentIdentifier $textDocument, Position $posit

try {
$completion_data = $this->codebase->getCompletionDataAtPosition($file_path, $position);
$literal_part = $this->codebase->getBeginedLiteralPart($file_path, $position);
if ($completion_data) {
[$recent_type, $gap, $offset] = $completion_data;

Expand All @@ -306,8 +305,6 @@ public function completion(TextDocumentIdentifier $textDocument, Position $posit
->textDocument->completion->completionItem->snippetSupport ?? false;
$completion_items =
$this->codebase->getCompletionItemsForClassishThing($recent_type, $gap, $snippetSupport);
$completion_items =
$this->codebase->filterCompletionItemsByBeginLiteralPart($completion_items, $literal_part);
} elseif ($gap === '[') {
$completion_items = $this->codebase->getCompletionItemsForArrayKeys($recent_type);
} else {
Expand Down
196 changes: 0 additions & 196 deletions tests/LanguageServer/CompletionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
use Psalm\Tests\TestConfig;
use Psalm\Type;

use function array_map;
use function count;

class CompletionTest extends TestCase
Expand Down Expand Up @@ -726,201 +725,6 @@ public function baz() {}
$this->assertSame('baz()', $completion_items[1]->insertText);
}

public function testObjectPropertyOnAppendToEnd(): void
{
$codebase = $this->codebase;
$config = $codebase->config;
$config->throw_exception = false;

$this->addFile(
'somefile.php',
'<?php
namespace B;
class A {
public $aProp = 123;
public $bProp = 234;
public function bar() {
$this->aPr
}
}',
);

$codebase->file_provider->openFile('somefile.php');
$codebase->scanFiles();

$this->analyzeFile('somefile.php', new Context());

$position = new Position(8, 34);
$completion_data = $codebase->getCompletionDataAtPosition('somefile.php', $position);
$literal_part = $codebase->getBeginedLiteralPart('somefile.php', $position);

$this->assertSame(['B\A&static', '->', 223], $completion_data);

$completion_items = $codebase->getCompletionItemsForClassishThing($completion_data[0], $completion_data[1], true);
$completion_items = $codebase->filterCompletionItemsByBeginLiteralPart($completion_items, $literal_part);
$completion_item_texts = array_map(fn($item) => $item->insertText, $completion_items);

$this->assertSame(['aProp'], $completion_item_texts);
}

public function testObjectPropertyOnReplaceEndPart(): void
{
$codebase = $this->codebase;
$config = $codebase->config;
$config->throw_exception = false;

$this->addFile(
'somefile.php',
'<?php
namespace B;
class A {
public $aProp1 = 123;
public $aProp2 = 234;
public function bar() {
$this->aProp2;
}
}',
);

$codebase->file_provider->openFile('somefile.php');
$codebase->scanFiles();

$this->analyzeFile('somefile.php', new Context());

$position = new Position(8, 34);
$completion_data = $codebase->getCompletionDataAtPosition('somefile.php', $position);
$literal_part = $codebase->getBeginedLiteralPart('somefile.php', $position);

$this->assertSame(['B\A&static', '->', 225], $completion_data);

$completion_items = $codebase->getCompletionItemsForClassishThing($completion_data[0], $completion_data[1], true);
$completion_items = $codebase->filterCompletionItemsByBeginLiteralPart($completion_items, $literal_part);
$completion_item_texts = array_map(fn($item) => $item->insertText, $completion_items);

$this->assertSame(['aProp1', 'aProp2'], $completion_item_texts);
}

public function testSelfPropertyOnAppendToEnd(): void
{
$codebase = $this->codebase;
$config = $codebase->config;
$config->throw_exception = false;

$this->addFile(
'somefile.php',
'<?php
namespace B;
class A {
public static $aProp = 123;
public static $bProp = 234;
public function bar() {
self::$aPr
}
}',
);

$codebase->file_provider->openFile('somefile.php');
$codebase->scanFiles();

$this->analyzeFile('somefile.php', new Context());

$position = new Position(8, 34);
$completion_data = $codebase->getCompletionDataAtPosition('somefile.php', $position);
$literal_part = $codebase->getBeginedLiteralPart('somefile.php', $position);

$this->assertSame(['B\A', '::', 237], $completion_data);

$completion_items = $codebase->getCompletionItemsForClassishThing($completion_data[0], $completion_data[1], true);
$completion_items = $codebase->filterCompletionItemsByBeginLiteralPart($completion_items, $literal_part);
$completion_item_texts = array_map(fn($item) => $item->insertText, $completion_items);

$this->assertSame(['$aProp'], $completion_item_texts);
}

public function testStaticPropertyOnAppendToEnd(): void
{
$codebase = $this->codebase;
$config = $codebase->config;
$config->throw_exception = false;

$this->addFile(
'somefile.php',
'<?php
namespace B;
class A {
public static $aProp = 123;
public static $bProp = 234;
public function bar() {
static::$aPr
}
}',
);

$codebase->file_provider->openFile('somefile.php');
$codebase->scanFiles();

$this->analyzeFile('somefile.php', new Context());

$position = new Position(8, 36);
$completion_data = $codebase->getCompletionDataAtPosition('somefile.php', $position);
$literal_part = $codebase->getBeginedLiteralPart('somefile.php', $position);

$this->assertSame(['B\A', '::', 239], $completion_data);

$completion_items = $codebase->getCompletionItemsForClassishThing($completion_data[0], $completion_data[1], true);
$completion_items = $codebase->filterCompletionItemsByBeginLiteralPart($completion_items, $literal_part);
$completion_item_texts = array_map(fn($item) => $item->insertText, $completion_items);

$this->assertSame(['$aProp'], $completion_item_texts);
}

public function testStaticPropertyOnReplaceEndPart(): void
{
$codebase = $this->codebase;
$config = $codebase->config;
$config->throw_exception = false;

$this->addFile(
'somefile.php',
'<?php
namespace B;
class A {
public static $aProp1 = 123;
public static $aProp2 = 234;
public function bar() {
self::$aProp2;
}
}',
);

$codebase->file_provider->openFile('somefile.php');
$codebase->scanFiles();

$this->analyzeFile('somefile.php', new Context());

$position = new Position(8, 34);
$completion_data = $codebase->getCompletionDataAtPosition('somefile.php', $position);
$literal_part = $codebase->getBeginedLiteralPart('somefile.php', $position);

$this->assertSame(['B\A', '::', 239], $completion_data);

$completion_items = $codebase->getCompletionItemsForClassishThing($completion_data[0], $completion_data[1], true);
$completion_items = $codebase->filterCompletionItemsByBeginLiteralPart($completion_items, $literal_part);
$completion_item_texts = array_map(fn($item) => $item->insertText, $completion_items);

$this->assertSame(['$aProp1', '$aProp2'], $completion_item_texts);
}

public function testCompletionOnNewExceptionWithoutNamespace(): void
{
$codebase = $this->codebase;
Expand Down

0 comments on commit 45f4cc0

Please sign in to comment.