PHPackages                             pyro/ide-helper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. pyro/ide-helper

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

pyro/ide-helper
===============

Various PyroCMS code completion improvements for ide's

1.0.7(4y ago)4193[1 issues](https://github.com/pyradic/ide-helper/issues)MITPHPCI failing

Since Mar 2Pushed 3y ago2 watchersCompare

[ Source](https://github.com/pyradic/ide-helper)[ Packagist](https://packagist.org/packages/pyro/ide-helper)[ Docs](https://github.com/pyradic/ide-helper)[ RSS](/packages/pyro-ide-helper/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependencies (6)Versions (9)Used By (0)

Ide Helper for PyroCMS / Streams Platform
=========================================

[](#ide-helper-for-pyrocms--streams-platform)

The purpose of this package is to provide improved code-completion for PyroCMS/Streams Platform applications and to reduce time spend reading the documentation/other code. It also allows you to tap into the docblock generation process to add your own docblocks!

Although this package has various PHPStorm specific features, it's still able to provide quite a few extras for other ide's/editors.

**Version 1.1** Will feature much easier ways to create customize various auto-completions.

- [Installation](#installation)
- [Custom Generators](#custom-generators)
    - [Docblock Generators](#docblock-generators)
    - [Toolbox Generators](#toolbox-generators)
- [Examples](#examples)
    - [Addon Collections](#addon-collections)
    - [Views](#views)
    - [Config](#config)
    - [Streams](#streams)
    - [Model](#model-completion)
    - [AddonServiceProvider](#addonserviceprovider-properties)
    - [FormBuilder](#formbuilder-properties)
    - [TableBuilder](#tablebuilder-properties)
    - [Twig](#twig-completion-tip)
- [Progress](#progress)
    - [Todos](#todos)

### Installation

[](#installation)

1. Install using composer

    ```
    composer require pyro/ide-helper:~1.0
    ```
2. Register service provider, preferably only when `APP_ENV=local`

    ```
    \Pyro\IdeHelper\IdeHelperServiceProvider::class;
    ```
3. Run generation

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

    You could wrap this in a composer run script:

    ```
    {
        "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"
             ]
        }
    }
    ```

    and run it with `composer ide`
4. Install PHPStorm/IntelliJ Idea Plugins:

    - `deep-assoc-completion`
    - `PHP Toolbox`

### Custom Generators

[](#custom-generators)

##### Docblock Generators

[](#docblock-generators)

1. Create a handler class as shown below
2. Add the classname it to the [`pyro.ide-helper.docblock.generators`](config/pyro.ide-helper.php) config array.
3. The class will be included and generated when running `php artisan ide-helper:streams`

> Check the [src/DocBlocks](src/DocBlocks) classes for examples.

```
// 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](screens/ide-helper-auth-user.png)](screens/ide-helper-auth-user.png)

##### Toolbox Generators

[](#toolbox-generators)

1. Create a handler class as shown below
2. Add the classname it to the [`pyro.ide-helper.toolbox.generators`](config/pyro.ide-helper.php) config array.
3. The class will be included and generated when running `php artisan ide-helper:streams`

> Check the [GenerateViewsMeta](https://github.com/laradic/idea/blob/develop/src/PhpToolbox/GenerateViewsMeta.php) class for a easily digested example.

> Check the [src/DocBlocks](src/PhpToolbox) classes for more examples.

```
```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();
    }
}
```

### Examples

[](#examples)

> These are just a few examples, to screenshot everything would be a big undertaking.

##### Docblock based

[](#docblock-based)

Most methods and properties in stream based related classes will now resolve properly. This is done using the same way as ide-helper:models by generating DocBlock tags in the source files

Some examples:

```
/**
 * Class LinkCollection
 *
 * @link http://pyrocms.com/
 * @author PyroCMS, Inc.
 * @author Ryan Thompson
 * @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.
 * @author Ryan Thompson
 * @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{}
```

##### Addon collections

[](#addon-collections)

For AddonCollection, ModuleCollection, ThemeCollection etc.
`CTRL+click` / `CTRL+b` opens the addon class file.

[![](screens/ide-helper-addon-collections.png)](screens/ide-helper-addon-collections.png)

##### Views

[](#views)

`CTRL+click` / `CTRL+b` opens the view file.

[![](screens/ide-helper-views.png)](screens/ide-helper-views.png)

##### Config

[](#config)

`CTRL+click` / `CTRL+b` opens the config file.
PyroCMS addon config files can have up to 3 locations. Opening resolves to the correct file!

[![](screens/ide-helper-config.png)](screens/ide-helper-config.png)

##### Streams

[](#streams)

For `Repository` classes in all Streams

[![](screens/ide-helper-repository-create.png)](screens/ide-helper-repository-create.png)[![](screens/ide-helper-streams.png)](screens/ide-helper-streams.png)[![](screens/ide-helper-create-model.png)](screens/ide-helper-create-model.png)

##### Model completion

[](#model-completion)

screenshots todo...

##### AddonServiceProvider properties

[](#addonserviceprovider-properties)

[![](screens/ide-helper-routes.png)](screens/ide-helper-routes.png)

##### Module properties

[](#module-properties)

[![](screens/ide-helper-module-sections.png)](screens/ide-helper-module-sections.png)[![](screens/ide-helper-module-sections-buttons.png.png)](screens/ide-helper-module-sections-buttons.png.png)

##### FormBuilder properties

[](#formbuilder-properties)

[![](screens/ide-helper-formbuilder-buttons.png)](screens/ide-helper-formbuilder-buttons.png)[![](screens/ide-helper-formbuilder-sections.png)](screens/ide-helper-formbuilder-sections.png)[![](screens/ide-helper-formbuilder-sections-tabs.png)](screens/ide-helper-formbuilder-sections-tabs.png)[![](screens/ide-helper-formbuilder-sections-tabs-rows-columns.png)](screens/ide-helper-formbuilder-sections-tabs-rows-columns.png)

##### TableBuilder properties

[](#tablebuilder-properties)

- Provides the same button completion as FormBuilder screenshots todo...

##### Twig completion (tip)

[](#twig-completion-tip)

This is just a tip for when you want better code-completion in Twig files. [![ide-helper-twig_2](screens/ide-helper-twig_2.png)](screens/ide-helper-twig_2.png)

To use this: Install &amp; Enable the symfony plugin. [![symfony-settings](screens/symfony-settings.png)](screens/symfony-settings.png)

### Progress

[](#progress)

- **`DONE`** Discover possibilities / limitations of various completion providers (IntelliJ plugins, docblocks, metafiles, php helper files)
- **`ALMOST DONE`** Use the appropriate completion provider for each completion.
- **`IN PROGRESS`** Revisit all code, improve/introduce logical structure to it, cleanup mess
- **`IN PROGRESS`** Make it extendable and configurable

##### Todos

[](#todos)

- Streams Platform
    - Addons
        - Module
            - Properties
                - Sections
                - Shortcuts
            - Methods
                - setSections
                - getSections
                - addSection
                - setShortcuts
                - getShortcuts
                - addShortcut
        - AddonCollection
        - ModuleCollection
        - ExtensionCollection
        - ThemeCollection
        - PluginCollection
        - FieldTypeCollection
        - AddonServiceProvider
            - Routes
    - UI
        - Button
        - ControlPanel
            - Methods
                - setButtons
                - getButtons
                - addButton
                - setSections
                - getSections
                - addSection
                - setNavigation
                - getNavigation
                - addNavigation
        - Form
            - Properties
                - Action
                - Button
                - Field
                - Section
                - Options
            - Methods
                - setActions
                - getActions
                - addAction
                - setButtons
                - getButtons
                - addButton
                - setSections
                - getSections
                - addSection
                - setOption
                - hasOption
                - getOption
                - setOptions
                - getOptions
        - Table
            - Row
                - getButtons
                - getColumns
            - Column
                - getEntry
            - Properties
                - Action
                - Button
                - Column
                - Filter
                - Header
                - Row
                - View
            - Methods
                - 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
        - Tree
- Streams
    - Collections
    - Criterias
    - Factories
    - Models
        - Translation fields
        - Fields, methods
        - Presenter,Collection,Router,Builder
    - QueryBuilders
    - Repositories
    - Router
    - Contract
        - Interface
        - RepositoryInterface
- Other
    - Twig
    - Views
    - Config
    - ...

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance15

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~112 days

Recently: every ~195 days

Total

8

Last Release

1480d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/303828383a9c2bf382436a61f4471425428b28c095c6df9a9714444cbc163538?d=identicon)[radic](/maintainers/radic)

---

Top Contributors

[![RobinRadic](https://avatars.githubusercontent.com/u/754732?v=4)](https://github.com/RobinRadic "RobinRadic (144 commits)")

---

Tags

laravelpyrocms

### Embed Badge

![Health badge](/badges/pyro-ide-helper/health.svg)

```
[![Health](https://phpackages.com/badges/pyro-ide-helper/health.svg)](https://phpackages.com/packages/pyro-ide-helper)
```

###  Alternatives

[symfony/maker-bundle

Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.

3.4k111.1M568](/packages/symfony-maker-bundle)[wnx/laravel-stats

Get insights about your Laravel Project

1.8k1.8M7](/packages/wnx-laravel-stats)[psalm/plugin-laravel

Psalm plugin for Laravel

3274.9M308](/packages/psalm-plugin-laravel)[keepsuit/laravel-temporal

Laravel temporal.io

4875.0k](/packages/keepsuit-laravel-temporal)[zidbih/laravel-deadlock

Make temporary Laravel workarounds expire and fail CI when ignored.

961.8k](/packages/zidbih-laravel-deadlock)[tarfin-labs/event-machine

Event-driven state machines for Laravel with event sourcing, type-safe context, and full audit trail.

188.5k](/packages/tarfin-labs-event-machine)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
