67 AstDumper(
const std::function<
void(QStringView)> &dumper,
69 function_ref<QStringView(SourceLocation)> loc2str = &noStr)
75 void start(QStringView str) {
76 dumper(QString::fromLatin1(
" ").repeated(baseIndent));
83 void stop(QStringView str) {
85 dumper(QString::fromLatin1(
" ").repeated(baseIndent));
91 QString quotedString(
const QString &s) {
93 return QStringLiteral(u"\"") + res
94 .replace(QLatin1String(
"\\"), QLatin1String(
"\\\\"))
95 .replace(QLatin1String(
"\""), QLatin1String(
"\\\"")) + QLatin1String(
"\"");
98 QString quotedString(QStringView s) {
99 return quotedString(s.toString());
102 QString loc(
const SourceLocation &s,
bool trim =
false) {
105 tokenStr = loc2str(s).toString()
106 .replace(QLatin1String(
"\\"), QLatin1String(
"\\\\"))
107 .replace(QLatin1String(
"\""),QLatin1String(
"\\\""));
109 tokenStr = tokenStr.trimmed();
110 if (noLocations() || s == SourceLocation())
111 return QLatin1String(
"\"%1\"").arg(tokenStr);
113 return QLatin1String(
"\"off:%1 len:%2 l:%3 c:%4 %5\"").arg(QString::number(s.offset), QString::number(s.length), QString::number(s.startLine), QString::number(s.startColumn), tokenStr);
117 QString semicolonToken(
const SourceLocation &s)
119 if (options & AstDumperOption::SloppyCompare)
121 return QLatin1String(
" semicolonToken=") + loc(s);
124 QString boolStr(
bool v) {
return (v ? quotedString(u"true"): quotedString(u"false")); }
126 bool preVisit(Node *)
override {
if (dumpNode()) start(u"Node");
return true; }
127 void postVisit(Node *)
override {
if (dumpNode()) stop(u"Node"); }
130 bool visit(UiProgram *)
override { start(u"UiProgram");
return true; }
131 void endVisit(AST::UiProgram *)
override { stop(u"UiProgram"); }
133 bool visit(UiHeaderItemList *)
override { start(u"UiHeaderItemList");
return true; }
134 void endVisit(AST::UiHeaderItemList *)
override { stop(u"UiHeaderItemList"); }
136#if QT_VERSION >= QT_VERSION_CHECK(6
, 6
, 0
)
145 start(QLatin1String(
"UiPragma name=%1 pragmaToken=%2%3")
146 .arg(quotedString(el->name), loc(el->pragmaToken),
147 semicolonToken(el->semicolonToken)));
150 void endVisit(AST::UiPragma *)
override { stop(u"UiPragma"); }
153 start(QLatin1String(
"UiImport fileName=%1 importId=%2 importToken=%3 fileNameToken=%4 "
154 "asToken=%5 importIdToken=%6%7")
155 .arg(quotedString(el->fileName), quotedString(el->importId),
156 loc(el->importToken), loc(el->fileNameToken), loc(el->asToken),
157 loc(el->importIdToken), semicolonToken(el->semicolonToken)));
161 Node::accept(el->version,
this);
165 bool visit(UiPublicMember *el)
override {
166 QString typeStr = ((el->type == UiPublicMember::Signal) ? QLatin1String(
"Signal") :
167 (el->type == UiPublicMember::Property) ? QLatin1String(
"Property") : QLatin1String(
"Unexpected(%1)").arg(QString::number(el->type)));
168 start(QLatin1String(
"UiPublicMember type=%1 typeModifier=%2 name=%3 isDefaultMember=%4 "
169 "isReadonlyMember=%5 isRequired=%6 "
170 "defaultToken=%7 readonlyToken=%8 propertyToken=%9 requiredToken=%10 "
171 "finalToken=%11 typeModifierToken=%12 typeToken=%13 "
172 "identifierToken=%14 colonToken=%15%16")
173 .arg(quotedString(typeStr), quotedString(el->typeModifier),
174 quotedString(el->name), boolStr(el->isDefaultMember()),
175 boolStr(el->isReadonly()), boolStr(el->isRequired()),
176 loc(el->defaultToken()), loc(el->readonlyToken()),
177 loc(el->propertyToken()), loc(el->requiredToken()),
178 loc(el->finalToken()), loc(el->typeModifierToken), loc(el->typeToken),
179 loc(el->identifierToken), loc(el->colonToken),
180 semicolonToken(el->semicolonToken)));
181 if (!noAnnotations())
182 Node::accept(el->annotations,
this);
183 Node::accept(el->memberType,
this);
187 Node::accept(el->parameters,
this);
188 stop(u"UiPublicMember");
191 bool visit(AST::UiSourceElement *el)
override {
192 start(u"UiSourceElement");
193 if (!noAnnotations())
194 Node::accept(el->annotations,
this);
197 void endVisit(AST::UiSourceElement *)
override { stop(u"UiSourceElement"); }
199 bool visit(AST::UiObjectDefinition *el)
override {
200 start(u"UiObjectDefinition");
201 if (!noAnnotations())
202 Node::accept(el->annotations,
this);
205 void endVisit(AST::UiObjectDefinition *)
override { stop(u"UiObjectDefinition"); }
207 bool visit(AST::UiObjectInitializer *el)
override {
208 start(QLatin1String(
"UiObjectInitializer lbraceToken=%1 rbraceToken=%2")
209 .arg(loc(el->lbraceToken), loc(el->rbraceToken)));
212 void endVisit(AST::UiObjectInitializer *)
override { stop(u"UiObjectInitializer"); }
214 bool visit(AST::UiObjectBinding *el)
override {
215 start(QLatin1String(
"UiObjectBinding colonToken=%1 hasOnToken=%2")
216 .arg(loc(el->colonToken), boolStr(el->hasOnToken)));
217 if (!noAnnotations())
218 Node::accept(el->annotations,
this);
221 void endVisit(AST::UiObjectBinding *)
override { stop(u"UiObjectBinding"); }
223 bool visit(AST::UiScriptBinding *el)
override {
224 start(QLatin1String(
"UiScriptBinding colonToken=%1")
225 .arg(loc(el->colonToken)));
226 if (!noAnnotations())
227 Node::accept(el->annotations,
this);
230 void endVisit(AST::UiScriptBinding *)
override { stop(u"UiScriptBinding"); }
232 bool visit(AST::UiArrayBinding *el)
override {
233 start(QLatin1String(
"UiArrayBinding colonToken=%1 lbracketToken=%2 rbracketToken=%3")
234 .arg(loc(el->colonToken), loc(el->lbracketToken), loc(el->rbracketToken)));
235 if (!noAnnotations())
236 Node::accept(el->annotations,
this);
239 void endVisit(AST::UiArrayBinding *)
override { stop(u"UiArrayBinding"); }
241 bool visit(AST::UiParameterList *el)
override {
242 start(QLatin1String(
"UiParameterList name=%1 commaToken=%2 propertyTypeToken=%3 identifierToken=%4 colonToken=%5")
243 .arg(quotedString(el->name), loc(el->commaToken), loc(el->propertyTypeToken), loc(el->identifierToken), loc(el->colonToken)));
244 Node::accept(el->type,
this);
248 stop(u"UiParameterList");
249 Node::accept(el->next,
this);
252 bool visit(AST::UiObjectMemberList *)
override { start(u"UiObjectMemberList");
return true; }
253 void endVisit(AST::UiObjectMemberList *)
override { stop(u"UiObjectMemberList"); }
255 bool visit(AST::UiArrayMemberList *el)
override {
256 start(QLatin1String(
"UiArrayMemberList commaToken=%1")
257 .arg(loc(el->commaToken)));
260 void endVisit(AST::UiArrayMemberList *)
override { stop(u"UiArrayMemberList"); }
262 bool visit(AST::UiQualifiedId *el)
override {
263 start(QLatin1String(
"UiQualifiedId name=%1 identifierToken=%2")
264 .arg(quotedString(el->name), loc(el->identifierToken)));
265 Node::accept(el->next,
this);
268 void endVisit(AST::UiQualifiedId *)
override { stop(u"UiQualifiedId"); }
270 bool visit(AST::UiEnumDeclaration *el)
override {
271 start(QLatin1String(
"UiEnumDeclaration enumToken=%1 rbraceToken=%2 name=%3")
272 .arg(loc(el->enumToken), loc(el->rbraceToken), quotedString(el->name)));
273 if (!noAnnotations())
274 Node::accept(el->annotations,
this);
277 void endVisit(AST::UiEnumDeclaration *)
override { stop(u"UiEnumDeclaration"); }
279 bool visit(AST::UiEnumMemberList *el)
override {
280 start(QLatin1String(
"UiEnumMemberList member=%1 value=%2 memberToken=%3 valueToken=%4")
281 .arg(quotedString(el->member), quotedString(QString::number(el->value)), loc(el->memberToken), loc(el->valueToken)));
284 void endVisit(AST::UiEnumMemberList *el)
override {
285 stop(u"UiEnumMemberList");
286 Node::accept(el->next,
this);
289 bool visit(AST::UiVersionSpecifier *el)
override {
290 start(QLatin1String(
"UiVersionSpecifier majorVersion=%1 minorVersion=%2 majorToken=%3 minorToken=%4")
291 .arg(quotedString(QString::number(el->version.majorVersion())),
292 quotedString(QString::number(el->version.minorVersion())),
293 loc(el->majorToken), loc(el->minorToken)));
296 void endVisit(AST::UiVersionSpecifier *)
override { stop(u"UiVersionSpecifier"); }
298 bool visit(AST::UiInlineComponent *el)
override {
299 start(QLatin1String(
"UiInlineComponent name=%1 componentToken=%2")
300 .arg(quotedString(el->name), loc(el->componentToken)));
301 if (!noAnnotations())
302 Node::accept(el->annotations,
this);
305 void endVisit(AST::UiInlineComponent *)
override { stop(u"UiInlineComponent"); }
307 bool visit(UiRequired *el)
override {
308 start(QLatin1String(
"UiRequired name=%1 requiredToken=%2%3")
309 .arg(quotedString(el->name), loc(el->requiredToken),
310 semicolonToken(el->semicolonToken)));
313 void endVisit(UiRequired *)
override { stop(u"UiRequired"); }
315 bool visit(UiAnnotation *)
override {
316 start(u"UiAnnotation");
319 void endVisit(UiAnnotation *)
override { stop(u"UiAnnotation"); }
321 bool visit(UiAnnotationList *)
override {
322 start(u"UiAnnotationList");
325 void endVisit(UiAnnotationList *)
override { stop(u"UiAnnotationList"); }
328 bool visit(AST::TypeExpression *)
override {
329 start(u"TypeExpression");
332 void endVisit(AST::TypeExpression *)
override { stop(u"TypeExpression"); }
334 bool visit(AST::ThisExpression *el)
override {
335 start(QLatin1String(
"ThisExpression thisToken=%1")
336 .arg(loc(el->thisToken)));
339 void endVisit(AST::ThisExpression *)
override { stop(u"ThisExpression"); }
341 bool visit(AST::IdentifierExpression *el)
override {
342 start(QLatin1String(
"IdentifierExpression name=%1 identifierToken=%2")
343 .arg(quotedString(el->name), loc(el->identifierToken)));
346 void endVisit(AST::IdentifierExpression *)
override { stop(u"IdentifierExpression"); }
348 bool visit(AST::NullExpression *el)
override {
349 start(QLatin1String(
"NullExpression nullToken=%1")
350 .arg(loc(el->nullToken)));
353 void endVisit(AST::NullExpression *)
override { stop(u"NullExpression"); }
355 bool visit(AST::TrueLiteral *el)
override {
356 start(QLatin1String(
"TrueLiteral trueToken=%1")
357 .arg(loc(el->trueToken)));
360 void endVisit(AST::TrueLiteral *)
override { stop(u"TrueLiteral"); }
362 bool visit(AST::FalseLiteral *el)
override {
363 start(QLatin1String(
"FalseLiteral falseToken=%1")
364 .arg(loc(el->falseToken)));
367 void endVisit(AST::FalseLiteral *)
override { stop(u"FalseLiteral"); }
369 bool visit(AST::SuperLiteral *el)
override {
370 start(QLatin1String(
"SuperLiteral superToken=%1")
371 .arg(loc(el->superToken)));
374 void endVisit(AST::SuperLiteral *)
override { stop(u"SuperLiteral"); }
376 bool visit(AST::StringLiteral *el)
override {
377 start(QLatin1String(
"StringLiteral value=%1 literalToken=%2")
378 .arg(quotedString(el->value), loc(el->literalToken)));
381 void endVisit(AST::StringLiteral *)
override { stop(u"StringLiteral"); }
383 bool visit(AST::TemplateLiteral *el)
override {
384 start(QLatin1String(
"TemplateLiteral value=%1 rawValue=%2 literalToken=%3")
385 .arg(quotedString(el->value), quotedString(el->rawValue), loc(el->literalToken)));
386 Node::accept(el->expression,
this);
389 void endVisit(AST::TemplateLiteral *)
override { stop(u"TemplateLiteral"); }
391 bool visit(AST::NumericLiteral *el)
override {
392 start(QLatin1String(
"NumericLiteral value=%1 literalToken=%2")
393 .arg(quotedString(QString::number(el->value)), loc(el->literalToken)));
396 void endVisit(AST::NumericLiteral *)
override { stop(u"NumericLiteral"); }
398 bool visit(AST::RegExpLiteral *el)
override {
399 start(QLatin1String(
"RegExpLiteral pattern=%1 flags=%2 literalToken=%3")
400 .arg(quotedString(el->pattern), quotedString(QString::number(el->flags, 16)), loc(el->literalToken)));
403 void endVisit(AST::RegExpLiteral *)
override { stop(u"RegExpLiteral"); }
405 bool visit(AST::ArrayPattern *el)
override {
406 start(QLatin1String(
"ArrayPattern lbracketToken=%1 commaToken=%2 rbracketToken=%3 parseMode=%4")
407 .arg(loc(el->lbracketToken),loc(el->commaToken),loc(el->rbracketToken), quotedString(QString::number(el->parseMode, 16))));
410 void endVisit(AST::ArrayPattern *)
override { stop(u"ArrayPattern"); }
412 bool visit(AST::ObjectPattern *el)
override {
413 start(QLatin1String(
"ObjectPattern lbraceToken=%1 rbraceToken=%2 parseMode=%3")
414 .arg(loc(el->lbraceToken), loc(el->rbraceToken), quotedString(QString::number(el->parseMode, 16))));
417 void endVisit(AST::ObjectPattern *)
override { stop(u"ObjectPattern"); }
419 bool visit(AST::PatternElementList *)
override { start(u"PatternElementList");
return true; }
420 void endVisit(AST::PatternElementList *)
override { stop(u"PatternElementList"); }
422 bool visit(AST::PatternPropertyList *)
override { start(u"PatternPropertyList");
return true; }
423 void endVisit(AST::PatternPropertyList *)
override { stop(u"PatternPropertyList"); }
425 bool visit(AST::PatternElement *el)
override {
426 start(QLatin1String(
"PatternElement identifierToken=%1 bindingIdentifier=%2 type=%3 scope=%4 isForDeclaration=%5")
427 .arg(loc(el->identifierToken), quotedString(el->bindingIdentifier), quotedString(QString::number(el->type, 16)),
428 quotedString(QString::number(
static_cast<
int>(el->scope), 16)), boolStr(el->isForDeclaration)));
431 void endVisit(AST::PatternElement *)
override { stop(u"PatternElement"); }
433 bool visit(AST::PatternProperty *el)
override {
434 start(QLatin1String(
"PatternProperty identifierToken=%1 bindingIdentifier=%2 type=%3 scope=%4 isForDeclaration=%5 colonToken=%6")
435 .arg(loc(el->identifierToken), quotedString(el->bindingIdentifier), quotedString(QString::number(el->type, 16)),
436 quotedString(QString::number(
static_cast<
int>(el->scope), 16)), boolStr(el->isForDeclaration), loc(el->colonToken)));
439 void endVisit(AST::PatternProperty *)
override { stop(u"PatternProperty"); }
441 bool visit(AST::Elision *el)
override {
442 start(QLatin1String(
"Elision commaToken=%1")
443 .arg(loc(el->commaToken)));
448 Node::accept(el->next,
this);
451 bool visit(AST::NestedExpression *el)
override {
452 start(QLatin1String(
"NestedExpression lparenToken=%1 rparenToken=%2")
453 .arg(loc(el->lparenToken), loc(el->rparenToken)));
456 void endVisit(AST::NestedExpression *)
override { stop(u"NestedExpression"); }
458 bool visit(AST::IdentifierPropertyName *el)
override {
459 if (options & AstDumperOption::SloppyCompare)
460 start(QLatin1String(
"StringLiteralOrIdentifierPropertyName id=%1")
461 .arg(quotedString(el->id)));
463 start(QLatin1String(
"IdentifierPropertyName id=%1 propertyNameToken=%2")
464 .arg(quotedString(el->id), loc(el->propertyNameToken)));
467 void endVisit(AST::IdentifierPropertyName *)
override {
468 if (options & AstDumperOption::SloppyCompare)
469 stop(u"StringLiteralOrIdentifierPropertyName");
471 stop(u"IdentifierPropertyName");
474 bool visit(AST::StringLiteralPropertyName *el)
override {
475 if (options & AstDumperOption::SloppyCompare)
476 start(QLatin1String(
"StringLiteralOrIdentifierPropertyName id=%1")
477 .arg(quotedString(el->id)));
479 start(QLatin1String(
"StringLiteralPropertyName id=%1 propertyNameToken=%2")
480 .arg(quotedString(el->id), loc(el->propertyNameToken)));
483 void endVisit(AST::StringLiteralPropertyName *)
override {
484 if (options & AstDumperOption::SloppyCompare)
485 stop(u"StringLiteralOrIdentifierPropertyName");
487 stop(u"StringLiteralPropertyName");
490 bool visit(AST::NumericLiteralPropertyName *el)
override {
491 start(QLatin1String(
"NumericLiteralPropertyName id=%1 propertyNameToken=%2")
492 .arg(quotedString(QString::number(el->id)),loc(el->propertyNameToken)));
495 void endVisit(AST::NumericLiteralPropertyName *)
override { stop(u"NumericLiteralPropertyName"); }
497 bool visit(AST::ComputedPropertyName *)
override {
498 start(u"ComputedPropertyName");
501 void endVisit(AST::ComputedPropertyName *)
override { stop(u"ComputedPropertyName"); }
503 bool visit(AST::ArrayMemberExpression *el)
override {
504 start(QLatin1String(
"ArrayMemberExpression lbraketToken=%1 rbraketToken=%2")
505 .arg(loc(el->lbracketToken), loc(el->rbracketToken)));
508 void endVisit(AST::ArrayMemberExpression *)
override { stop(u"ArrayMemberExpression"); }
510 bool visit(AST::FieldMemberExpression *el)
override {
511 start(QLatin1String(
"FieldMemberExpression name=%1 dotToken=%2 identifierToken=%3")
512 .arg(quotedString(el->name), loc(el->dotToken), loc(el->identifierToken)));
515 void endVisit(AST::FieldMemberExpression *)
override { stop(u"FieldMemberExpression"); }
517 bool visit(AST::TaggedTemplate *)
override {
518 start(u"TaggedTemplate");
521 void endVisit(AST::TaggedTemplate *)
override { stop(u"TaggedTemplate"); }
523 bool visit(AST::NewMemberExpression *el)
override {
524 start(QLatin1String(
"NewMemberExpression newToken=%1 lparenToken=%2 rparenToken=%3")
525 .arg(loc(el->newToken), loc(el->lparenToken), loc(el->rparenToken)));
528 void endVisit(AST::NewMemberExpression *)
override { stop(u"NewMemberExpression"); }
530 bool visit(AST::NewExpression *el)
override {
531 start(QLatin1String(
"NewExpression newToken=%1")
532 .arg(loc(el->newToken)));
535 void endVisit(AST::NewExpression *)
override { stop(u"NewExpression"); }
537 bool visit(AST::CallExpression *el)
override {
538 start(QLatin1String(
"CallExpression lparenToken=%1 rparenToken=%2")
539 .arg(loc(el->lparenToken), loc(el->rparenToken)));
542 void endVisit(AST::CallExpression *)
override { stop(u"CallExpression"); }
544 bool visit(AST::ArgumentList *el)
override {
545 start(QLatin1String(
"ArgumentList commaToken=%1 isSpreadElement=%2")
546 .arg(loc(el->commaToken), boolStr(el->isSpreadElement)));
549 void endVisit(AST::ArgumentList *)
override { stop(u"ArgumentList"); }
551 bool visit(AST::PostIncrementExpression *el)
override {
552 start(QLatin1String(
"PostIncrementExpression incrementToken=%1")
553 .arg(loc(el->incrementToken)));
556 void endVisit(AST::PostIncrementExpression *)
override { stop(u"PostIncrementExpression"); }
558 bool visit(AST::PostDecrementExpression *el)
override {
559 start(QLatin1String(
"PostDecrementExpression decrementToken=%1")
560 .arg(loc(el->decrementToken)));
563 void endVisit(AST::PostDecrementExpression *)
override { stop(u"PostDecrementExpression"); }
565 bool visit(AST::DeleteExpression *el)
override {
566 start(QLatin1String(
"DeleteExpression deleteToken=%1")
567 .arg(loc(el->deleteToken)));
570 void endVisit(AST::DeleteExpression *)
override { stop(u"DeleteExpression"); }
572 bool visit(AST::VoidExpression *el)
override {
573 start(QLatin1String(
"VoidExpression voidToken=%1")
574 .arg(loc(el->voidToken)));
577 void endVisit(AST::VoidExpression *)
override { stop(u"VoidExpression"); }
579 bool visit(AST::TypeOfExpression *el)
override {
580 start(QLatin1String(
"TypeOfExpression typeofToken=%1")
581 .arg(loc(el->typeofToken)));
584 void endVisit(AST::TypeOfExpression *)
override { stop(u"TypeOfExpression"); }
586 bool visit(AST::PreIncrementExpression *el)
override {
587 start(QLatin1String(
"PreIncrementExpression incrementToken=%1")
588 .arg(loc(el->incrementToken)));
591 void endVisit(AST::PreIncrementExpression *)
override { stop(u"PreIncrementExpression"); }
593 bool visit(AST::PreDecrementExpression *el)
override {
594 start(QLatin1String(
"PreDecrementExpression decrementToken=%1")
595 .arg(loc(el->decrementToken)));
598 void endVisit(AST::PreDecrementExpression *)
override { stop(u"PreDecrementExpression"); }
600 bool visit(AST::UnaryPlusExpression *el)
override {
601 start(QLatin1String(
"UnaryPlusExpression plusToken=%1")
602 .arg(loc(el->plusToken)));
605 void endVisit(AST::UnaryPlusExpression *)
override { stop(u"UnaryPlusExpression"); }
607 bool visit(AST::UnaryMinusExpression *el)
override {
608 start(QLatin1String(
"UnaryMinusExpression minusToken=%1")
609 .arg(loc(el->minusToken)));
612 void endVisit(AST::UnaryMinusExpression *)
override { stop(u"UnaryMinusExpression"); }
614 bool visit(AST::TildeExpression *el)
override {
615 start(QLatin1String(
"TildeExpression tildeToken=%1")
616 .arg(loc(el->tildeToken)));
619 void endVisit(AST::TildeExpression *)
override { stop(u"TildeExpression"); }
621 bool visit(AST::NotExpression *el)
override {
622 start(QLatin1String(
"NotExpression notToken=%1")
623 .arg(loc(el->notToken)));
626 void endVisit(AST::NotExpression *)
override { stop(u"NotExpression"); }
628 bool visit(AST::BinaryExpression *el)
override {
629 start(QLatin1String(
"BinaryExpression op=%1 operatorToken=%2")
630 .arg(quotedString(QString::number(el->op,16)), loc(el->operatorToken)));
633 void endVisit(AST::BinaryExpression *)
override { stop(u"BinaryExpression"); }
635 bool visit(AST::ConditionalExpression *el)
override {
636 start(QLatin1String(
"ConditionalExpression questionToken=%1 colonToken=%2")
637 .arg(loc(el->questionToken), loc(el->colonToken)));
640 void endVisit(AST::ConditionalExpression *)
override { stop(u"ConditionalExpression"); }
642 bool visit(AST::CommaExpression *el)
override {
643 start(QLatin1String(
"Expression commaToken=%1")
644 .arg(loc(el->commaToken)));
647 void endVisit(AST::CommaExpression *)
override { stop(u"Expression"); }
649 bool visit(AST::Block *el)
override {
650 start(QLatin1String(
"Block lbraceToken=%1 rbraceToken=%2")
651 .arg(loc(el->lbraceToken), loc(el->rbraceToken)));
654 void endVisit(AST::Block *)
override { stop(u"Block"); }
656 bool visit(AST::StatementList *)
override {
657 start(u"StatementList");
660 void endVisit(AST::StatementList *)
override { stop(u"StatementList"); }
662 bool visit(AST::VariableStatement *el)
override {
663 start(QLatin1String(
"VariableStatement declarationKindToken=%1")
664 .arg(loc(el->declarationKindToken)));
667 void endVisit(AST::VariableStatement *)
override { stop(u"VariableStatement"); }
669 bool visit(AST::VariableDeclarationList *el)
override {
670 start(QLatin1String(
"VariableDeclarationList commaToken=%1")
671 .arg(loc(el->commaToken)));
674 void endVisit(AST::VariableDeclarationList *)
override { stop(u"VariableDeclarationList"); }
676 bool visit(AST::EmptyStatement *el)
override {
677 start(QLatin1String(
"EmptyStatement%1").arg(semicolonToken(el->semicolonToken)));
680 void endVisit(AST::EmptyStatement *)
override { stop(u"EmptyStatement"); }
682 bool visit(AST::ExpressionStatement *el)
override {
683 if (options & AstDumperOption::SloppyCompare)
684 start(u"ExpressionStatement");
686 start(QLatin1String(
"ExpressionStatement%1").arg(semicolonToken(el->semicolonToken)));
689 void endVisit(AST::ExpressionStatement *)
override { stop(u"ExpressionStatement"); }
691 bool visit(AST::IfStatement *el)
override {
692 start(QLatin1String(
"IfStatement ifToken=%1 lparenToken=%2 rparenToken=%3 elseToken=%4")
693 .arg(loc(el->ifToken), loc(el->lparenToken), loc(el->rparenToken), loc(el->elseToken)));
696 void endVisit(AST::IfStatement *)
override { stop(u"IfStatement"); }
698 bool visit(AST::DoWhileStatement *el)
override {
700 "DoWhileStatement doToken=%1 whileToken=%2 lparenToken=%3 rparenToken=%4%5")
701 .arg(loc(el->doToken), loc(el->whileToken), loc(el->lparenToken),
702 loc(el->rparenToken), semicolonToken(el->semicolonToken)));
705 void endVisit(AST::DoWhileStatement *)
override { stop(u"DoWhileStatement"); }
707 bool visit(AST::WhileStatement *el)
override {
708 start(QLatin1String(
"WhileStatement whileToken=%1 lparenToken=%2 rparenToken=%3")
709 .arg(loc(el->whileToken), loc(el->lparenToken), loc(el->rparenToken)));
712 void endVisit(AST::WhileStatement *)
override { stop(u"WhileStatement"); }
714 bool visit(AST::ForStatement *el)
override {
715 if (options & AstDumperOption::SloppyCompare)
716 start(QLatin1String(
"ForStatement forToken=%1 lparenToken=%2 rparenToken=%5")
717 .arg(loc(el->forToken), loc(el->lparenToken), loc(el->rparenToken)));
719 start(QLatin1String(
"ForStatement forToken=%1 lparenToken=%2 firstSemicolonToken=%3 "
720 "secondSemicolonToken=%4 rparenToken=%5")
721 .arg(loc(el->forToken), loc(el->lparenToken),
722 loc(el->firstSemicolonToken), loc(el->secondSemicolonToken),
723 loc(el->rparenToken)));
726 void endVisit(AST::ForStatement *)
override { stop(u"ForStatement"); }
728 bool visit(AST::ForEachStatement *el)
override {
729 start(QLatin1String(
"ForEachStatement forToken=%1 lparenToken=%2 inOfToken=%3 rparenToken=%4 type=%5")
730 .arg(loc(el->forToken), loc(el->lparenToken), loc(el->inOfToken), loc(el->rparenToken), quotedString(QString::number(
static_cast<
int>(el->type), 16))));
733 void endVisit(AST::ForEachStatement *)
override { stop(u"ForEachStatement"); }
735 bool visit(AST::ContinueStatement *el)
override {
736 start(QLatin1String(
"ContinueStatement label=%1 continueToken=%2 identifierToken=%3%4")
737 .arg(quotedString(el->label), loc(el->continueToken),
738 loc(el->identifierToken), semicolonToken(el->semicolonToken)));
741 void endVisit(AST::ContinueStatement *)
override { stop(u"ContinueStatement"); }
743 bool visit(AST::BreakStatement *el)
override {
744 start(QLatin1String(
"BreakStatement label=%1 breakToken=%2 identifierToken=%3%4")
745 .arg(quotedString(el->label), loc(el->breakToken), loc(el->identifierToken),
746 semicolonToken(el->semicolonToken)));
749 void endVisit(AST::BreakStatement *)
override { stop(u"BreakStatement"); }
751 bool visit(AST::ReturnStatement *el)
override {
752 start(QLatin1String(
"ReturnStatement returnToken=%1%2")
753 .arg(loc(el->returnToken), semicolonToken(el->semicolonToken)));
756 void endVisit(AST::ReturnStatement *)
override { stop(u"ReturnStatement"); }
758 bool visit(AST::YieldExpression *el)
override {
759 start(QLatin1String(
"YieldExpression isYieldStar=%1 yieldToken=%2")
760 .arg(boolStr(el->isYieldStar), loc(el->yieldToken)));
763 void endVisit(AST::YieldExpression *)
override { stop(u"YieldExpression"); }
765 bool visit(AST::WithStatement *el)
override {
766 start(QLatin1String(
"WithStatement withToken=%1 lparenToken=%2 rparenToken=%3")
767 .arg(loc(el->withToken), loc(el->lparenToken), loc(el->rparenToken)));
770 void endVisit(AST::WithStatement *)
override { stop(u"WithStatement"); }
772 bool visit(AST::SwitchStatement *el)
override {
773 start(QLatin1String(
"SwitchStatement switchToken=%1 lparenToken=%2 rparenToken=%3")
774 .arg(loc(el->switchToken), loc(el->lparenToken), loc(el->rparenToken)));
777 void endVisit(AST::SwitchStatement *)
override { stop(u"SwitchStatement"); }
779 bool visit(AST::CaseBlock *el)
override {
780 start(QLatin1String(
"CaseBlock lbraceToken=%1 rbraceToken=%2")
781 .arg(loc(el->lbraceToken), loc(el->rbraceToken)));
784 void endVisit(AST::CaseBlock *)
override { stop(u"CaseBlock"); }
786 bool visit(AST::CaseClauses *)
override {
787 start(u"CaseClauses");
790 void endVisit(AST::CaseClauses *)
override { stop(u"CaseClauses"); }
792 bool visit(AST::CaseClause *el)
override {
793 start(QLatin1String(
"CaseClause caseToken=%1 colonToken=%2")
794 .arg(loc(el->caseToken), loc(el->colonToken)));
797 void endVisit(AST::CaseClause *)
override { stop(u"CaseClause"); }
799 bool visit(AST::DefaultClause *el)
override {
800 start(QLatin1String(
"DefaultClause defaultToken=%1 colonToken=%2")
801 .arg(loc(el->defaultToken), loc(el->colonToken)));
804 void endVisit(AST::DefaultClause *)
override { stop(u"DefaultClause"); }
806 bool visit(AST::LabelledStatement *el)
override {
807 start(QLatin1String(
"LabelledStatement label=%1 identifierToken=%2 colonToken=%3")
808 .arg(quotedString(el->label), loc(el->identifierToken), loc(el->colonToken)));
811 void endVisit(AST::LabelledStatement *)
override { stop(u"LabelledStatement"); }
813 bool visit(AST::ThrowStatement *el)
override {
814 start(QLatin1String(
"ThrowStatement throwToken=%1%2")
815 .arg(loc(el->throwToken), semicolonToken(el->semicolonToken)));
818 void endVisit(AST::ThrowStatement *)
override { stop(u"ThrowStatement"); }
820 bool visit(AST::TryStatement *el)
override {
821 start(QLatin1String(
"TryStatement tryToken=%1")
822 .arg(loc(el->tryToken)));
825 void endVisit(AST::TryStatement *)
override { stop(u"TryStatement"); }
827 bool visit(AST::Catch *el)
override {
828 start(QLatin1String(
"Catch catchToken=%1 lparenToken=%2 identifierToken=%3 rparenToken=%4")
829 .arg(loc(el->catchToken), loc(el->lparenToken), loc(el->identifierToken), loc(el->rparenToken)));
832 void endVisit(AST::Catch *)
override { stop(u"Catch"); }
834 bool visit(AST::Finally *el)
override {
835 start(QLatin1String(
"Finally finallyToken=%1")
836 .arg(loc(el->finallyToken)));
839 void endVisit(AST::Finally *)
override { stop(u"Finally"); }
841 bool visit(AST::FunctionDeclaration *el)
override {
842 start(QLatin1String(
"FunctionDeclaration name=%1 isArrowFunction=%2 isGenerator=%3 functionToken=%4 "
843 "identifierToken=%5 lparenToken=%6 rparenToken=%7 lbraceToken=%8 rbraceToken=%9")
844 .arg(quotedString(el->name), boolStr(el->isArrowFunction), boolStr(el->isGenerator),
845 loc(el->functionToken, options & AstDumperOption::SloppyCompare),
846 loc(el->identifierToken), loc(el->lparenToken), loc(el->rparenToken), loc(el->lbraceToken),
847 loc(el->rbraceToken)));
850 void endVisit(AST::FunctionDeclaration *)
override { stop(u"FunctionDeclaration"); }
852 bool visit(AST::FunctionExpression *el)
override {
854 QString parentheses = options & AstDumperOption::NoLocations
856 : QLatin1String(
" lparenToken=%1 rparenToken=%2")
857 .arg(loc(el->lparenToken), loc(el->rparenToken));
859 start(QLatin1String(
"FunctionExpression name=%1 isArrowFunction=%2 isGenerator=%3 "
861 "identifierToken=%5%6 lbraceToken=%7 "
863 .arg(quotedString(el->name), boolStr(el->isArrowFunction),
864 boolStr(el->isGenerator),
865 loc(el->functionToken, options & AstDumperOption::SloppyCompare),
866 loc(el->identifierToken), parentheses, loc(el->lbraceToken),
867 loc(el->rbraceToken)));
870 void endVisit(AST::FunctionExpression *)
override { stop(u"FunctionExpression"); }
872 bool visit(AST::FormalParameterList *)
override {
873 start(u"FormalParameterList");
876 void endVisit(AST::FormalParameterList *)
override { stop(u"FormalParameterList"); }
878 bool visit(AST::ClassExpression *el)
override {
879 start(QLatin1String(
"ClassExpression name=%1 classToken=%2 identifierToken=%3 lbraceToken=%4 rbraceToken=%5")
880 .arg(quotedString(el->name), loc(el->classToken), loc(el->identifierToken), loc(el->lbraceToken), loc(el->rbraceToken)));
883 void endVisit(AST::ClassExpression *)
override { stop(u"ClassExpression"); }
885 bool visit(AST::ClassDeclaration *el)
override {
886 start(QLatin1String(
"ClassDeclaration name=%1 classToken=%2 identifierToken=%3 lbraceToken=%4 rbraceToken=%5")
887 .arg(quotedString(el->name), loc(el->classToken), loc(el->identifierToken), loc(el->lbraceToken), loc(el->rbraceToken)));
890 void endVisit(AST::ClassDeclaration *)
override { stop(u"ClassDeclaration"); }
892 bool visit(AST::ClassElementList *el)
override {
893 start(QLatin1String(
"ClassElementList isStatic=%1")
894 .arg(boolStr(el->isStatic)));
897 void endVisit(AST::ClassElementList *)
override { stop(u"ClassElementList"); }
899 bool visit(AST::Program *)
override {
903 void endVisit(AST::Program *)
override { stop(u"Program"); }
905 bool visit(AST::NameSpaceImport *el)
override {
906 start(QLatin1String(
"NameSpaceImport starToken=%1 importedBindingToken=%2 importedBinding=%3")
907 .arg(loc(el->starToken), loc(el->importedBindingToken), quotedString(el->importedBinding)));
910 void endVisit(AST::NameSpaceImport *)
override { stop(u"NameSpaceImport"); }
912 bool visit(AST::ImportSpecifier *el)
override {
913 start(QLatin1String(
"ImportSpecifier identifierToken=%1 importedBindingToken=%2 identifier=%3 importedBinding=%4")
914 .arg(loc(el->identifierToken), loc(el->importedBindingToken), quotedString(el->identifier), quotedString(el->importedBinding)));
917 void endVisit(AST::ImportSpecifier *)
override { stop(u"ImportSpecifier"); }
919 bool visit(AST::ImportsList *el)
override {
920 start(QLatin1String(
"ImportsList importSpecifierToken=%1")
921 .arg(loc(el->importSpecifierToken)));
924 void endVisit(AST::ImportsList *)
override { stop(u"ImportsList"); }
926 bool visit(AST::NamedImports *el)
override {
927 start(QLatin1String(
"NamedImports leftBraceToken=%1 rightBraceToken=%2")
928 .arg(loc(el->leftBraceToken), loc(el->rightBraceToken)));
931 void endVisit(AST::NamedImports *)
override { stop(u"NamedImports"); }
933 bool visit(AST::FromClause *el)
override {
934 start(QLatin1String(
"FromClause fromToken=%1 moduleSpecifierToken=%2 moduleSpecifier=%3")
935 .arg(loc(el->fromToken), loc(el->moduleSpecifierToken), quotedString(el->moduleSpecifier)));
938 void endVisit(AST::FromClause *)
override { stop(u"FromClause"); }
940 bool visit(AST::ImportClause *el)
override {
941 start(QLatin1String(
"ImportClause importedDefaultBindingToken=%1 importedDefaultBinding=%2")
942 .arg(loc(el->importedDefaultBindingToken), quotedString(el->importedDefaultBinding)));
945 void endVisit(AST::ImportClause *)
override { stop(u"ImportClause"); }
947 bool visit(AST::ImportDeclaration *el)
override {
948 start(QLatin1String(
"ImportDeclaration importToken=%1 moduleSpecifierToken=%2 moduleSpecifier=%3")
949 .arg(loc(el->importToken), loc(el->moduleSpecifierToken), quotedString(el->moduleSpecifier)));
952 void endVisit(AST::ImportDeclaration *)
override { stop(u"ImportDeclaration"); }
954 bool visit(AST::ExportSpecifier *el)
override {
955 start(QLatin1String(
"ExportSpecifier identifierToken=%1 exportedIdentifierToken=%2 identifier=%3 exportedIdentifier=%4")
956 .arg(loc(el->identifierToken), loc(el->exportedIdentifierToken), quotedString(el->identifier), quotedString(el->exportedIdentifier)));
959 void endVisit(AST::ExportSpecifier *)
override { stop(u"ExportSpecifier"); }
961 bool visit(AST::ExportsList *)
override {
962 start(u"ExportsList");
965 void endVisit(AST::ExportsList *)
override { stop(u"ExportsList"); }
967 bool visit(AST::ExportClause *el)
override {
968 start(QLatin1String(
"ExportClause leftBraceToken=%1 rightBraceToken=%2")
969 .arg(loc(el->leftBraceToken), loc(el->rightBraceToken)));
972 void endVisit(AST::ExportClause *)
override { stop(u"ExportClause"); }
974 bool visit(AST::ExportDeclaration *el)
override {
975 start(QLatin1String(
"ExportDeclaration exportToken=%1 exportDefault=%3")
976 .arg(loc(el->exportToken), boolStr(el->exportDefault)));
979 void endVisit(AST::ExportDeclaration *)
override { stop(u"ExportDeclaration"); }
981 bool visit(AST::ESModule *)
override {
985 void endVisit(AST::ESModule *)
override { stop(u"ESModule"); }
987 bool visit(AST::DebuggerStatement *el)
override {
988 start(QLatin1String(
"DebuggerStatement debuggerToken=%1%2")
989 .arg(loc(el->debuggerToken), semicolonToken(el->semicolonToken)));
992 void endVisit(AST::DebuggerStatement *)
override { stop(u"DebuggerStatement"); }
998 void endVisit(AST::Type *)
override { stop(u"Type"); }
1000 bool visit(AST::TypeAnnotation *el)
override {
1001 start(QLatin1String(
"TypeAnnotation colonToken=%1")
1002 .arg(loc(el->colonToken)));
1005 void endVisit(AST::TypeAnnotation *)
override { stop(u"TypeAnnotation"); }
1008 qCWarning(domLog) <<
"Maximum statement or expression depth exceeded in AstDumper";
1013 std::function <
void (QStringView)> dumper;
1017 function_ref<QStringView(SourceLocation)> loc2str;
1019 return options & AstDumperOption::DumpNode;
1021 bool noLocations() {
1022 return options & AstDumperOption::NoLocations;
1024 bool noAnnotations() {
1025 return options & AstDumperOption::NoAnnotations;