pyro / ide-helper
为ide提供各种PyroCMS代码自动补全改进
1.0.7
2022-04-25 20:41 UTC
Requires
- barryvdh/laravel-ide-helper: ~2.6
- laradic/generators: ~2.4
- laradic/idea: ~2.2
- laradic/support: ~2.0
- nikic/php-parser: ~3.0|~4.3
- symfony/process: ~3.0|~4.0|~5.0
README
此包的目的是为PyroCMS/Streams平台应用提供改进的代码自动补全,以减少阅读文档/其他代码所花费的时间。它还允许您参与docblock生成过程以添加自己的docblock!
尽管此包具有各种PHPStorm特定功能,但它仍能为其他ide编辑器提供很多额外功能。
版本1.1将提供创建各种自动补全的更简单方法。
安装
-
使用composer安装
composer require pyro/ide-helper:~1.0
-
注册服务提供者,最好只在
APP_ENV=local
时进行\Pyro\IdeHelper\IdeHelperServiceProvider::class;
-
运行生成
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
运行 -
安装PHPStorm/IntelliJ Idea插件
deep-assoc-completion
PHP工具箱
自定义生成器
Docblock生成器
- 创建以下示例的处理类
- 将类名添加到
pyro.ide-helper.docblock.generators
配置数组中。 - 当运行
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]); } }
工具箱生成器
- 创建以下示例的处理类
- 将类名添加到
pyro.ide-helper.toolbox.generators
配置数组中。 - 当运行
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补全(提示)
进度
完成
发现各种补全提供者(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
- 视图
- 配置
- ...