prettier / plugin-php

Prettier PHP Plugin
https://loilo.github.io/prettier-php-playground/
MIT License
1.74k stars 128 forks source link

InvalidDocError on Laravel-generated `config/app.php` #2198

Closed gkze closed 1 year ago

gkze commented 1 year ago

Generated a Laravel project with Composer, added this plugin to Prettier, and getting the following:

config/app.php: InvalidDocError: Unexpected doc.type 'concat'.
Expected it to be 'cursor', 'indent', 'align', 'trim', 'group', 'fill', 'if-break', 'indent-if-break', 'line-suffix', 'line-suffix-boundary', 'line', 'label', or 'break-parent'.
    at traverseDoc ([REDACTED]/node_modules/prettier/doc.js:145:15)
    at findInDoc ([REDACTED]/node_modules/prettier/doc.js:507:5)
    at willBreak ([REDACTED]/node_modules/prettier/doc.js:522:12)
    at Array.some (<anonymous>)
    at printArgumentsList ([REDACTED]/node_modules/@prettier/plugin-php/src/printer.js:679:60)
    at [REDACTED]/node_modules/@prettier/plugin-php/src/printer.js:230:19
    at Object.printAllComments ([REDACTED]/node_modules/@prettier/plugin-php/src/comments.js:1007:19)
    at traverse ([REDACTED]/node_modules/@prettier/plugin-php/src/printer.js:228:20)
    at [REDACTED]/node_modules/@prettier/plugin-php/src/printer.js:260:27
    at AstPath.call ([REDACTED]/lib/node_modules/prettier/index.js:8359:24)
Contents of config/app.php ```php env("APP_NAME", "Laravel"), /* |-------------------------------------------------------------------------- | Application Environment |-------------------------------------------------------------------------- | | This value determines the "environment" your application is currently | running in. This may determine how you prefer to configure various | services the application utilizes. Set this in your ".env" file. | */ "env" => env("APP_ENV", "production"), /* |-------------------------------------------------------------------------- | Application Debug Mode |-------------------------------------------------------------------------- | | When your application is in debug mode, detailed error messages with | stack traces will be shown on every error that occurs within your | application. If disabled, a simple generic error page is shown. | */ "debug" => (bool) env("APP_DEBUG", false), /* |-------------------------------------------------------------------------- | Application URL |-------------------------------------------------------------------------- | | This URL is used by the console to properly generate URLs when using | the Artisan command line tool. You should set this to the root of | your application so that it is used when running Artisan tasks. | */ "url" => env("APP_URL", "http://localhost"), "asset_url" => env("ASSET_URL"), /* |-------------------------------------------------------------------------- | Application Timezone |-------------------------------------------------------------------------- | | Here you may specify the default timezone for your application, which | will be used by the PHP date and date-time functions. We have gone | ahead and set this to a sensible default for you out of the box. | */ "timezone" => "UTC", /* |-------------------------------------------------------------------------- | Application Locale Configuration |-------------------------------------------------------------------------- | | The application locale determines the default locale that will be used | by the translation service provider. You are free to set this value | to any of the locales which will be supported by the application. | */ "locale" => "en", /* |-------------------------------------------------------------------------- | Application Fallback Locale |-------------------------------------------------------------------------- | | The fallback locale determines the locale to use when the current one | is not available. You may change the value to correspond to any of | the language folders that are provided through your application. | */ "fallback_locale" => "en", /* |-------------------------------------------------------------------------- | Faker Locale |-------------------------------------------------------------------------- | | This locale will be used by the Faker PHP library when generating fake | data for your database seeds. For example, this will be used to get | localized telephone numbers, street address information and more. | */ "faker_locale" => "en_US", /* |-------------------------------------------------------------------------- | Encryption Key |-------------------------------------------------------------------------- | | This key is used by the Illuminate encrypter service and should be set | to a random, 32 character string, otherwise these encrypted strings | will not be safe. Please do this before deploying an application! | */ "key" => env("APP_KEY"), "cipher" => "AES-256-CBC", /* |-------------------------------------------------------------------------- | Maintenance Mode Driver |-------------------------------------------------------------------------- | | These configuration options determine the driver used to determine and | manage Laravel's "maintenance mode" status. The "cache" driver will | allow maintenance mode to be controlled across multiple machines. | | Supported drivers: "file", "cache" | */ "maintenance" => [ "driver" => "file", // 'store' => 'redis', ], /* |-------------------------------------------------------------------------- | Autoloaded Service Providers |-------------------------------------------------------------------------- | | The service providers listed here will be automatically loaded on the | request to your application. Feel free to add your own services to | this array to grant expanded functionality to your applications. | */ "providers" => ServiceProvider::defaultProviders() ->merge([ /* * Package Service Providers... */ /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, ]) ->toArray(), /* |-------------------------------------------------------------------------- | Class Aliases |-------------------------------------------------------------------------- | | This array of class aliases will be registered when this application | is started. However, feel free to register as many as you wish as | the aliases are "lazy" loaded so they don't hinder performance. | */ "aliases" => Facade::defaultAliases() ->merge([ // 'Example' => App\Facades\Example::class, ]) ->toArray(), ]; ```

Oddly enough when I comment out the file, the other files in config/ seem to get formatted fine. So I can't tell what's so special about this one that's making the parser fail.

Would appreciate any input on this. Thanks

czosel commented 1 year ago

Hi @gkze, thanks for the bug report. Can you try to remove code from the file until you have a minimal reproduction? It seems to be caused by something comment-related.

gkze commented 1 year ago

Thanks @czosel - I've narrowed it down to this particular block:

    "providers" => ServiceProvider::defaultProviders()
        ->merge([
            /*
             * Package Service Providers...
             */

            /*
             * Application Service Providers...
             */
            App\Providers\AppServiceProvider::class,
            App\Providers\AuthServiceProvider::class,
            // App\Providers\BroadcastServiceProvider::class,
            App\Providers\EventServiceProvider::class,
            App\Providers\RouteServiceProvider::class,
        ])
        ->toArray(),

The parser doesn't like the comments inside the array - if I remove all three of them there are no errors. php -l config/app.php doesn't return any errors so it's probably a bug in the parser, but not sure where as I don't see the php-parser package anywhere in the stack trace.

fisker commented 1 year ago

This should fixed by #2200