From 2e5f56674e3830b8c0be31057f2f22f27fa4e1f5 Mon Sep 17 00:00:00 2001 From: Tyson Andre Date: Wed, 1 Jul 2020 20:04:10 -0400 Subject: [PATCH] Warn about missing use variable Closures require 1 or more variables if there is a `use` clause. ``` php > function() use(){}; Parse error: syntax error, unexpected ')', expecting '&' or variable (T_VARIABLE) in php shell code on line 1 ``` --- src/Node/AnonymousFunctionUseClause.php | 3 +- src/Parser.php | 2 +- .../anonymousFunctionCreationExpression11.php | 2 + ...ymousFunctionCreationExpression11.php.diag | 8 ++ ...ymousFunctionCreationExpression11.php.tree | 86 +++++++++++++++++++ 5 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 tests/cases/parser/anonymousFunctionCreationExpression11.php create mode 100644 tests/cases/parser/anonymousFunctionCreationExpression11.php.diag create mode 100644 tests/cases/parser/anonymousFunctionCreationExpression11.php.tree diff --git a/src/Node/AnonymousFunctionUseClause.php b/src/Node/AnonymousFunctionUseClause.php index b38fee2e..26460ea6 100644 --- a/src/Node/AnonymousFunctionUseClause.php +++ b/src/Node/AnonymousFunctionUseClause.php @@ -6,6 +6,7 @@ namespace Microsoft\PhpParser\Node; +use Microsoft\PhpParser\MissingToken; use Microsoft\PhpParser\Node; use Microsoft\PhpParser\Node\DelimitedList\UseVariableNameList; use Microsoft\PhpParser\Token; @@ -17,7 +18,7 @@ class AnonymousFunctionUseClause extends Node { /** @var Token */ public $openParen; - /** @var UseVariableNameList */ + /** @var UseVariableNameList|MissingToken */ public $useVariableNameList; /** @var Token */ diff --git a/src/Parser.php b/src/Parser.php index e3b3f929..9f4e7fdb 100644 --- a/src/Parser.php +++ b/src/Parser.php @@ -3566,7 +3566,7 @@ function ($parentNode) { return $useVariableName; }, $anonymousFunctionUseClause - ); + ) ?: (new MissingToken(TokenKind::VariableName, $this->token->fullStart)); $anonymousFunctionUseClause->closeParen = $this->eat1(TokenKind::CloseParenToken); return $anonymousFunctionUseClause; diff --git a/tests/cases/parser/anonymousFunctionCreationExpression11.php b/tests/cases/parser/anonymousFunctionCreationExpression11.php new file mode 100644 index 00000000..1df08ead --- /dev/null +++ b/tests/cases/parser/anonymousFunctionCreationExpression11.php @@ -0,0 +1,2 @@ +