Ich versuche, einen Source-to-Source-Übersetzer mit libTooling zu schreiben.Warum endet der Quellort hier mit zwei Zeichen?
Ich benutze ASTMatchers zu versuchen, if
Anweisungen zu finden, die nicht geschweifte Klammern haben und dann einen Rewriter verwenden, um die Klammern hinzuzufügen.
Der Matcher Ich verwende ist:
ifStmt(unless(hasDescendant(compoundStmt())))
Dann bekomme ich nur die Start- und Endstellen und die geschweiften Klammern umschreiben.
Hier ist der Quellcode für die:
if (const IfStmt *IfS = Result.Nodes.getNodeAs<clang::IfStmt>("ifStmt")) {
const Stmt *Then = IfS->getThen();
Rewrite.InsertText(Then->getLocStart(), "{", true, true);
Rewrite.InsertText(Then->getLocEnd(),"}",true,true);
Das Problem ist jetzt, dass die Endstelle aus irgendeinem Grunde von 2 Zeichen immer ausgeschaltet ist. Warum ist das so?
Ich habe versucht, InsertTextAfterToken anstelle von InserText zu verwenden. Es hat immer das Semikolon verpasst, jetzt ist es nur noch eins. – bloodstalker