Skip to content

Prettier crashes on empty declare() or in global scope #392

Description

@sseypt

Hello.

Prettier crashes on declare() without { ... }.
php.net declare

<?php
// these are the same:

// you can use this:
declare(ticks=1) {
    // entire script here
}

// or you can use this:
declare(ticks=1);
// entire script here
?>

Input:

<?php
if ($var) {
    declare(ticks=1);
}

Error:

[error]     SyntaxError: Parse Error : syntax error, unexpected '}' on line 4
[error]     at parser.raiseError (/export/node_modules/php-parser/src/parser.js:290:17)
[error]     at parser.error (/export/node_modules/php-parser/src/parser.js:335:15)
[error]     at parser.read_expr_item (/export/node_modules/php-parser/src/parser/expr.js:420:12)
[error]     at parser.read_expr (/export/node_modules/php-parser/src/parser/expr.js:11:23)
[error]     at parser.read_statement (/export/node_modules/php-parser/src/parser/statement.js:386:21)
[error]     at parser.read_top_statement (/export/node_modules/php-parser/src/parser/statement.js:74:21)
[error]     at parser.read_statement (/export/node_modules/php-parser/src/parser/statement.js:339:28)
[error]     at parser.read_inner_statement (/export/node_modules/php-parser/src/parser/statement.js:186:21)
[error]     at parser.read_inner_statements (/export/node_modules/php-parser/src/parser/statement.js:86:30)
[error]     at parser.read_code_block (/export/node_modules/php-parser/src/parser/statement.js:401:14)

or empty

Input:

<?php
declare();

Error:

[error]     Error: Value undefined is not a valid document
[error]     at assertDoc (/export/node_modules/prettier/src/doc/doc-builders.js:8:11)
[error]     at Array.forEach (<anonymous>)
[error]     at concat (/export/node_modules/prettier/src/doc/doc-builders.js:16:11)
[error]     at printDeclareArguments (/export/node_modules/@prettier/plugin-php/src/printer.js:1298:16)
[error]     at printStatement (/export/node_modules/@prettier/plugin-php/src/printer.js:1322:9)
[error]     at printNode (/export/node_modules/@prettier/plugin-php/src/printer.js:1459:12)
[error]     at Object.genericPrint [as print] (/export/node_modules/@prettier/plugin-php/src/printer.js:69:19)
[error]     at genericPrint$6 (/usr/local/lib/node_modules/prettier/bin-prettier.js:23983:18)
[error]     at comments.printComments.p (/usr/local/lib/node_modules/prettier/bin-prettier.js:23921:14)
[error]     at Object.printComments (/usr/local/lib/node_modules/prettier/bin-prettier.js:8273:19)

Best regards,
Steve

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions