有没有什么办法可以通过clang::FileID
或clang::FileEntry
得到 #include
什么?如何使用clang libtooling获得#includes的源码位置?
1
A
回答
2
如何使用以fileid为参数的源代码管理器的GetIncludedLoc函数呢?
SourceManager.GetIncludedLoc(FILEID)
0
感谢的@Hemant的回答,你说得对
我已经发现,通过我自己(在铛3.8它被称为getIncludeLoc
) 却忘了写在这里。 我用它来找到所有#includes之后我可以放置自己的位置。 这里的功能(可以肯定不是最好的方式),我写了这个,希望它可以帮助别人
SourceLocation getIncludeLocation(FileID fileID, SourceManager &sm, unsigned carriages) {
return SourceLocation();
set<unsigned> lines;
if (fileID.isInvalid())
for (auto it = sm.fileinfo_begin(); it != sm.fileinfo_end(); it++) {
SourceLocation includeLoc = sm.getIncludeLoc(sm.translateFile(it->first));
if (includeLoc.isValid() && sm.isInFileID(includeLoc, fileID)) {
lines.insert(sm.getSpellingLineNumber(includeLoc));
}
}
unsigned pos(0);
if (!lines.empty()) {
bool first = true;
for (unsigned line :lines) {
if (first)
first = false;
else if ((line - pos) > carriages)
break;
pos = line;
//cout << "Include line:" << pos << endl;
}
//cout << console_hline('-') << endl;
}
cout << sm.getFileEntryForID(fileID)->getName() << endl;
return sm.translateFileLineCol(sm.getFileEntryForID(fileID), ++pos, 1);
}
也有一些相关信息包括可以通过
Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer)
和
Lexer::ComputePreamble(StringRef Buffer, const LangOptions &LangOpts, unsigned MaxLines = 0)
可以得到
相关问题
- 1. 如何获取Clang LibTooling中的声明名称?
- 2. 如何在Clang和LibTooling中使用标准库
- 3. clang libTooling:如何找到一个AST项目出来的头?
- 4. Clang使用LibTooling重写器来生成新文件?
- 5. 使用Clang获取AST
- 6. 如何使Visual Studio在获得后请求源路径:“没有可用于当前位置的源代码。”
- 7. clang:如何获得源代码信息,同时在OS X中分析
- 8. 这个代码如何获得最低位的位置?
- 9. 如何使用Clang的AST?
- 10. 如何使用preg_match_all获得职位的
- 11. 如何使用.net获取Windows资源管理器的位置?
- 12. 如何获得在使用JQuery的表中的位置?
- 13. 如何使用,以获得在列表中的位置的Android
- 14. 如何获得div的位置? jquery
- 15. 如何获得longpress中的touchesEnded位置?
- 16. 如何获得Mootools中div的位置?
- 17. 如何获得FrameworkElement的真实位置?
- 18. 如何获得的父目录位置
- 19. 如何获得RecyclerView.Adapter中的卡位置?
- 20. 如何获得更准确的位置?
- 21. 如何获得Android的GPS位置
- 22. 地理编码 - 获得位置
- 23. 如何在资源位置使用setOnClickListener?
- 24. 如何使用四角位置获得3d平面的角度
- 25. 如何获得使用LAC的位置名称
- 26. CLLocationManger给出了旧的位置。如何获得新的位置?
- 27. 使用jQuery获得div的绝对或相对位置位置
- 28. 如何使用.pch和clang?
- 29. 锵3.8 C++ - 使用LibTooling
- 30. 如何在执行头后获取HTML源代码(位置:URL)
谢谢,@Yuriy了解更多信息。 – Hemant