@@ -1007,7 +1007,11 @@ private function parseStringLiteralExpression2($parentNode) {
10071007 case TokenKind::DollarOpenBraceToken:
10081008 case TokenKind::OpenBraceDollarToken:
10091009 $ expression ->children [] = $ this ->eat (TokenKind::DollarOpenBraceToken, TokenKind::OpenBraceDollarToken);
1010- $ expression ->children [] = $ this ->parseExpression ($ expression );
1010+ if ($ this ->getCurrentToken ()->kind === TokenKind::StringVarname) {
1011+ $ expression ->children [] = $ this ->parseSimpleVariable ($ parentNode );
1012+ } else {
1013+ $ expression ->children [] = $ this ->parseExpression ($ expression );
1014+ }
10111015 $ expression ->children [] = $ this ->eat (TokenKind::CloseBraceToken);
10121016 continue ;
10131017 case $ startQuoteKind = $ expression ->startQuote ->kind :
@@ -2027,9 +2031,10 @@ private function parseSimpleVariableFn() {
20272031 $ token ->kind === TokenKind::OpenBraceToken ?
20282032 $ this ->parseBracedExpression ($ variable ) :
20292033 $ this ->parseSimpleVariable ($ variable );
2030- } elseif ($ token ->kind === TokenKind::VariableName) {
2031- // TODO consider splitting into dollar and name
2032- $ variable ->name = $ this ->eat (TokenKind::VariableName);
2034+ } elseif ($ token ->kind === TokenKind::VariableName || $ token ->kind === TokenKind::StringVarname) {
2035+ // TODO consider splitting into dollar and name.
2036+ // StringVarname is the variable name without $, used in a template string e.g. `"${foo}"`
2037+ $ variable ->name = $ this ->eat (TokenKind::VariableName, TokenKind::StringVarname);
20332038 } else {
20342039 $ variable ->name = new MissingToken (TokenKind::VariableName, $ token ->fullStart );
20352040 }
0 commit comments