私は、アプリケーションのソースコードのリファクタリングに役立つ簡単なツールを書いています。.ui
GUIを定義し、Qtで使用するXMLファイルを生成するwxWidgetsライブラリに基づいてC++コードを解析したいと思います。すべての関数呼び出しと引数の値を取得する必要があります。
現在、ClangへのPythonバインディングをいじっています。以下のサンプルコードを使用して、トークンとその種類と場所を取得しますが、カーソルの種類は常にCursorKind.INVALID_FILE
です。
import sys
import clang.cindex
def find_typerefs(node):
""" Find all references to the type named 'typename'
"""
for t in node.get_tokens():
if not node.location.file != sys.argv[1]:
continue
if t.kind.value != 0 and t.kind.value != 1 and t.kind.value != 4:
print t.spelling
print t.location
print t.cursor.kind
print t.kind
print "\n"
index = clang.cindex.Index.create()
tu = index.parse(sys.argv[1])
print 'Translation unit:', tu.spelling
find_typerefs(tu.cursor)
カーソルの種類を判別する正しい方法は何ですか?
いくつかのブログ投稿を除いてドキュメントは見つかりませんでしたが、それらは古くなっているか、このトピックをカバーしていませんでした。Clangに付属している例からもそれを理解することができませんでした。