phpactor/completion

此包已被废弃且不再维护。未建议替代包。

Worse Reflection 的自动完成库

0.4.7 2022-02-19 11:01 UTC

README

CI

PHP 代码自动完成库,用于 Phpactor

此包包含

  • 自动完成 API 和实现。
  • Phpactor RPC 扩展和处理器。
  • 语言服务器扩展和处理器。

使用方法

每个自动完成器实现了 Completor 接口,接受字符串形式的源代码和一个字节偏移量作为自动完成的起点。自动完成器必须 yield Suggestion 类的实例

$completor = new MyCompletor();
$suggestions = $completor->complete($sourceCode, $byteOffset);

/** @var Suggestion $suggestion */
foreach ($suggestions as $suggestion) {
    echo $suggestion->name();
    echo $suggestion->shortDescription();
}

可以使用 ChainCompletor 将多个自动完成器链接在一起

$completor = new ChainCompletor([
    new MyCompletor1(),
    new MyCompletor2(),
]);

$suggestions = $completor->complete($sourceCode, $byteOffset);

容错自动完成器

该库目前包括一套使用容错 PHP 解析器和 WorseReflection 的自动完成器。所有容错自动完成器都是 TolerantCompletorInterface 的实例,并接受解析器节点而不是字节偏移量。它们可以收集在 TolerantChainCompletor 类中,该类又实现了主要的 Completor 接口

use Phpactor\WorseReflection\ReflectorBuilder;
use Phpactor\Completion\Bridge\TolerantParser\ChainTolerantCompletor;
use Phpactor\Completion\Bridge\TolerantParser\WorseReflection\WorseLocalVariableCompletor;
use Phpactor\Completion\Bridge\TolerantParser\WorseReflection\WorseClassMemberCompletor;

$reflector = ReflectorBuilder::create()->addSource($sourceCode)->build();
$formatter = new ObjectFormatter([
    // ... instances of ObjectFormatter
]);
$completor = new ChainTolerantCompletor([
    new WorseLocalVariableCompletor($reflector, $formatter),
    new WorseClassMemberCompletor($reflector, $formatter),
]);

$completor->complete($sourceCode, $byteOffset);

格式化器

此库可以将任意对象格式化为字符串,例如从 ReflectionMethod 到摘要:pub function($foobar)

$formatter = new ObjectFormatter([
    new TypeFormatter(),
    new TypesFormatter(),
    new FunctionFormatter(),
    new MethodFormatter(),
    new ParameterFormatter(),
    new ParametersFormatter(),
    new PropertyFormatter(),
    new VariableFormatter(),
]);

$reflectionMethod = $reflector->reflectClass(Foobar::class)->methods()->get('barfoo');
$formatter->format($reflectionMethod);

每个格式化器都能指示它是否可以格式化给定的对象,如果可以,则选择它。

贡献

此包是开源的,欢迎贡献!请随意在此存储库上提交拉取请求。

支持

  • 在主要的 Phpactor 存储库上创建一个问题。
  • 加入 #phpactor 频道到 Symfony Devs 频道。