// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details #include "AstQueryDsl.h" namespace Luau { FindNthOccurenceOf::FindNthOccurenceOf(Nth nth) : requestedNth(nth) { } bool FindNthOccurenceOf::checkIt(AstNode* n) { if (theNode) return false; if (n->classIndex == requestedNth.classIndex) { // Human factor: the requestedNth starts from 1 because of the term `nth`. if (currentOccurrence + 1 != requestedNth.nth) ++currentOccurrence; else theNode = n; } return !theNode; // once found, returns false and stops traversal } bool FindNthOccurenceOf::visit(AstNode* n) { return checkIt(n); } bool FindNthOccurenceOf::visit(AstType* t) { return checkIt(t); } bool FindNthOccurenceOf::visit(AstTypePack* t) { return checkIt(t); } } // namespace Luau