mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-25 19:50:12 +01:00
For-range in replacement logic (#631)
This replaces GetAstMatcher with AddMatcher because cxxForRangeStmt is a StatementMatcher. addMatcher has multiple definitions (https://clang.llvm.org/doxygen/classclang_1_1ast__matchers_1_1MatchFinder.html) and so this approach allows using the right addMatcher without writing per-call overloads. To handle the `var`, I'm considering something like moving VarDecl logic into a VarMatcherBase so that I can just use CXXForRangeStmt's getLoopVariable. The problem is a for-range statement has multiple VarDecls, and getLoopVariable may be the easiest way to identify the real one.
This commit is contained in:
@@ -131,10 +131,12 @@ void VarDecl::Run() {
|
||||
clang::CharSourceRange::getCharRange(replace_start, replace_end), after);
|
||||
}
|
||||
|
||||
auto VarDeclFactory::GetAstMatcher() -> cam::DeclarationMatcher {
|
||||
return cam::varDecl(cam::unless(cam::hasParent(cam::declStmt(
|
||||
cam::hasParent(cam::cxxForRangeStmt())))))
|
||||
.bind(Label);
|
||||
void VarDeclFactory::AddMatcher(cam::MatchFinder* finder,
|
||||
cam::MatchFinder::MatchCallback* callback) {
|
||||
finder->addMatcher(cam::varDecl(cam::unless(cam::hasParent(cam::declStmt(
|
||||
cam::hasParent(cam::cxxForRangeStmt())))))
|
||||
.bind(Label),
|
||||
callback);
|
||||
}
|
||||
|
||||
} // namespace Carbon
|
||||
|
||||
Reference in New Issue
Block a user