1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-30 04:39:00 +01:00

Partial revert "Fix auto completion by partial property or method"

Filtering is not necessary. Clients using LSP should filter the results themselves.
That's what it says in the documentation.

This reverts commit d6faff2844.
This commit is contained in:
Ivan Sidorov 2024-01-23 07:25:51 +00:00
parent c0e8d32561
commit 10402c426b
3 changed files with 2 additions and 199 deletions

View File

@ -2039,6 +2039,8 @@ final class Codebase
/**
* @param list<CompletionItem> $items
* @return list<CompletionItem>
* @deprecated to be removed in Psalm 6
* @api fix deprecation problem "PossiblyUnusedMethod: Cannot find any calls to method"
*/
public function filterCompletionItemsByBeginLiteralPart(array $items, string $literal_part): array
{

View File

@ -297,7 +297,6 @@ final class TextDocument
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;
@ -306,8 +305,6 @@ final class TextDocument
->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 {

View File

@ -15,7 +15,6 @@ use Psalm\Tests\TestCase;
use Psalm\Tests\TestConfig;
use Psalm\Type;
use function array_map;
use function count;
class CompletionTest extends TestCase
@ -726,201 +725,6 @@ class CompletionTest extends TestCase
$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;