pyro/ide-helper

为ide提供各种PyroCMS代码自动补全改进

1.0.7 2022-04-25 20:41 UTC

This package is auto-updated.

Last update: 2024-09-19 12:55:19 UTC


README

此包的目的是为PyroCMS/Streams平台应用提供改进的代码自动补全,以减少阅读文档/其他代码所花费的时间。它还允许您参与docblock生成过程以添加自己的docblock!

尽管此包具有各种PHPStorm特定功能,但它仍能为其他ide编辑器提供很多额外功能。

版本1.1将提供创建各种自动补全的更简单方法。

安装

  1. 使用composer安装

    composer require pyro/ide-helper:~1.0
  2. 注册服务提供者,最好只在APP_ENV=local时进行

    \Pyro\IdeHelper\IdeHelperServiceProvider::class;
  3. 运行生成

    ide-helper:generate
    ide-helper:streams
    ide-helper:meta
    idea:completion
    idea:meta
    idea:toolbox

    您可以将此包裹在composer运行脚本中

    {
        "scripts": {
             "ide": [
                 "@php artisan ide-helper:generate",
                 "@php artisan ide-helper:streams",
                 "@php artisan ide-helper:meta",
                 "@php artisan idea:completion",
                 "@php artisan idea:meta",
                 "@php artisan idea:toolbox"
             ]
        }
    }   

    并使用composer ide运行

  4. 安装PHPStorm/IntelliJ Idea插件

    • deep-assoc-completion
    • PHP工具箱

自定义生成器

Docblock生成器
  1. 创建以下示例的处理类
  2. 将类名添加到pyro.ide-helper.docblock.generators配置数组中。
  3. 当运行php artisan ide-helper:streams时,将包含并生成此类

查看src/DocBlocks类以获取示例。

// this will make auth()->user()->hasPermission() etc resolve properly, check screenshot below
class MyDocBlocks {
    public function handle(\Laradic\Generators\Doc\DocRegistry $registry){
        $registry->getClass(\Illuminate\Contracts\Auth\Guard::class)
            ->getMethod('user')
            ->ensureReturn([\Illuminate\Contracts\Auth\Authenticatable::class, \Anomaly\UsersModule\User\Contract\UserInterface::class]);
    }
}

ide-helper-auth-user

工具箱生成器
  1. 创建以下示例的处理类
  2. 将类名添加到pyro.ide-helper.toolbox.generators配置数组中。
  3. 当运行php artisan ide-helper:streams时,将包含并生成此类

查看GenerateViewsMeta类以获取易于理解的示例。

查看src/DocBlocks类以获取更多示例。

```php
class GenerateMyMeta extends \Laradic\Idea\Toolbox\AbstractMetaGenerator
{
    protected $directory = 'custom/my'; // used in: $this->path = path_join(config('laradic.idea.toolbox.path'), $this->directory, '.ide-toolbox.metadata.json');

    public function handle()
    {
        $this->metadata()
            ->push('providers', [
                'name'  => 'my_stuff',
                'items' => [
                    ['lookup_string' => 'A',],
                    ['lookup_string' => 'B',]
                ],
            ])
            ->push('registrar', [
                'provider'  => 'my_stuff',
                'language'  => 'php',
                'signature' => [ 'my_method', 'my_method:1' ],
            ])
            ->save();
    }
}

示例

这些只是几个示例,截图一切将是一项巨大的工作。

基于docblock

现在,基于stream的相关类中的大多数方法和属性都将正确解析。这是通过使用与ide-helper:models相同的方式实现的,即在源文件中生成DocBlock标签

一些示例

/**
 * Class LinkCollection
 *
 * @link http://pyrocms.com/
 * @author PyroCMS, Inc. <support@pyrocms.com>
 * @author Ryan Thompson <ryan@pyrocms.com>
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface[] all()
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface find($key, $default=null)
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface findBy($key, $value)
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface first()
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface[] get($key, $default=null)
 * etc...
 */
class LinkCollection extends EntryCollection{}
/**
 * Class LinkRepository
 *
 * @link http://pyrocms.com/
 * @author PyroCMS, Inc. <support@pyrocms.com>
 * @author Ryan Thompson <ryan@pyrocms.com>
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface first($direction = 'asc')
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface find($id)
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface findBy($key, $value)
 * @method \Pyro\MenusModule\Link\LinkCollection|\Pyro\MenusModule\Link\Contract\LinkInterface[] findAllBy($key, $value)
 * @method \Pyro\MenusModule\Link\LinkCollection|\Pyro\MenusModule\Link\Contract\LinkInterface[] findAll(array $ids)
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface create(array $attributes)
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface getModel()
 * @method \Pyro\MenusModule\Link\Contract\LinkInterface newInstance(array $attributes = [])
 * etc...         
 */
class LinkRepository extends EntryRepository implements LinkRepositoryInterface{}
/** @mixin \Pyro\MenusModule\Link\LinkRepository */
interface LinkRepositoryInterface {}
/** @mixin \Pyro\MenusModule\Link\LinkModel */
class LinkPresenter extends EntryPresenter{}
/** @mixin \Pyro\MenusModule\Link\LinkModel */
interface LinkInterface {}
/** @mixin \Pyro\MenusModule\Link\LinkModel */
class LinkPresenter extends EntryPresenter{}
插件集合

对于AddonCollection、ModuleCollection、ThemeCollection等。
CTRL+click / CTRL+b打开插件类文件。

视图

CTRL+click / CTRL+b打开视图文件。

配置

CTRL+click / CTRL+b打开配置文件。
PyroCMS插件配置文件可以有最多3个位置。打开将解析为正确的文件!

Streams

对于所有Streams中的Repository

模型补全

截图待定...

AddonServiceProvider属性

模块属性

表单构建器属性

表格构建器属性
  • 提供与表单构建器相同的按钮补全。截图待定...
Twig补全(提示)

这是一个关于如何在Twig文件中获得更好的代码补全的提示。ide-helper-twig_2

使用方法:安装并启用symfony插件。symfony-settings

进度

  • 完成 发现各种补全提供者(IntelliJ插件、docblocks、元文件、php帮助文件)的可能性和限制
  • 几乎完成 为每个补全使用合适的补全提供者
  • 进行中 重新审视所有代码,改善/引入逻辑结构,清理混乱
  • 进行中 使其可扩展和可配置
待办事项
  • 流平台
    • 插件
      • 模块
        • 属性
          • 部分
          • 快捷键
        • 方法
          • setSections
          • getSections
          • addSection
          • setShortcuts
          • getShortcuts
          • addShortcut
      • AddonCollection
      • ModuleCollection
      • ExtensionCollection
      • ThemeCollection
      • PluginCollection
      • FieldTypeCollection
      • AddonServiceProvider
        • 路由
    • UI
      • 按钮
      • 控制面板
        • 方法
          • setButtons
          • getButtons
          • addButton
          • setSections
          • getSections
          • addSection
          • setNavigation
          • getNavigation
          • addNavigation
      • 表单
        • 属性
          • 操作
          • 按钮
          • 字段
          • 部分
          • 选项
        • 方法
          • setActions
          • getActions
          • addAction
          • setButtons
          • getButtons
          • addButton
          • setSections
          • getSections
          • addSection
          • setOption
          • hasOption
          • getOption
          • setOptions
          • getOptions
      • 表格
          • getButtons
          • getColumns
          • getEntry
        • 属性
          • 操作
          • 按钮
          • 过滤器
          • 标题
          • 视图
        • 方法
          • setActions
          • getActions
          • addAction
          • setButtons
          • getButtons
          • addButton
          • setColumns
          • getColumns
          • addColumn
          • setFilters
          • getFilters
          • addFilter
          • setHeaders
          • getHeaders
          • addHeader
          • setRows
          • getRows
          • addRow
          • setViews
          • getViews
          • addView
          • setOption
          • hasOption
          • getOption
          • setOptions
          • getOptions
  • Streams
    • 集合
    • 标准
    • 工厂
    • 模型
      • 翻译字段
      • 字段、方法
      • 展示者、集合、路由器、构建器
    • 查询构建器
    • 存储库
    • 路由器
    • 合同
      • 接口
      • 存储库接口
  • 其他
    • Twig
    • 视图
    • 配置
    • ...