是否有某种方法可以从 libclang 获取源文件中的 C++ 代码是否具有正确语法的信息?即使使用无效的 C++ 代码,Libclang 也会尝试创建翻译单元。
一般问题的一般答案是肯定的。看看这个使用 libclang 来实现此目的的 Sublime Text 插件:https://github.com/quarnster/SublimeClang。
它使用 libclang Python 绑定来处理编辑器中的当前文件并标记错误和警告,并提供其他有用的功能,例如自动完成和“转到定义”。
如果您询问如何在使用 Python libclang 绑定时检测语法错误,例如在调用
clang.cindex.Index.parse
之后,答案是检查返回的 diagnostics
的
TranslationUnit
字段。
例如:
import sys
import clang.cindex
index = clang.cindex.Index.create()
translation_unit = index.parse("test.c")
if translation_unit.diagnostics:
# Print the errors and bail.
for d in translation_unit.diagnostics:
print(d, file=sys.stderr)
sys.exit(2)
else:
print("No syntax errors.")