laravel-ide-helper icon indicating copy to clipboard operation
laravel-ide-helper copied to clipboard

Issue with IDE Helper Not Generating Macro Methods for Filament Macros

Open pslxx opened this issue 9 months ago • 4 comments

Versions:

  • ide-helper Version: #.#.#
  • Laravel Version: #.#.#
  • PHP Version: #.#.#

Description:

Steps To Reproduce:

I used the Laravel macro feature to add a check method to the Filament MountableAction class within AppServiceProvider. While the functionality works correctly and has been tested, I want IDE (PhpStorm) to provide proper autocompletion for this method. I attempted to generate the hints using ide-helper:generate, but it did not include the macro method.

After analyzing the ide-helper codebase, I discovered that its macro method generation is incompatible with Filament’s macro structure.

**Root Cause:**​

Laravel’s default macro structure follows the format: 'method_name' => Closure. Filament’s macros use a nested structure: 'method_name' => [CLASS_NAME => Closure]. This mismatch causes ide-helper to encounter errors when retrieving macro methods, resulting in the method being skipped entirely during code generation.

pslxx avatar Feb 27 '25 11:02 pslxx

Laravel Macro image Filament Macro image

pslxx avatar Feb 27 '25 11:02 pslxx

Temporary fixed: Alias.php

Image

pslxx avatar Feb 27 '25 12:02 pslxx

@pslxx I tried your solution temporarily, in hope I could create a PR for this. However in my case my macro has NOT been generated in my _ide_helper.php file. So are you sure you have shown all your temporary changes?

P.s. i highly recommend to use code markup when presenting code. its easy, because you just have to copy paste your code between ```php\n \n``` and every reader is able to easily copy (and test out) your code. Screenshots are a really bad practice for presenting code ... Example:

        if (is_array($macro_func) && is_callable(array_values($macro_func)[0])) {
            return new ReflectionFunction(array_values($macro_func)[0]);
        }

emanueljacob avatar Mar 04 '25 14:03 emanueljacob

@emanueljacob

This code seems to work fine for me. Notice the missing \ before ReflectionFunction.

      if (is_array($macro_func) && is_callable(array_values($macro_func)[0])) {
          return new \ReflectionFunction(array_values($macro_func)[0]);
      }

Thanks

mk-helenoftroy avatar Mar 25 '25 10:03 mk-helenoftroy