Sto scrivendo un semplice strumento per aiutare con il refactoring del codice sorgente della nostra applicazione. Vorrei analizzare il codice C++ basato sulla libreria wxWidgets, che definisce la GUI e produce file XML .ui
da utilizzare con Qt. Ho bisogno di ottenere tutte le chiamate di funzione e il valore degli argomenti.Come analizzare un singolo file usando i collegamenti Python su Clang?
Attualmente sto giocando con i collegamenti Python a Clang, utilizzando il codice di esempio seguente ricevo i token e il loro tipo e posizione, ma il tipo di cursore è sempre 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)
Qual è il modo corretto per determinare il tipo di cursore?
Non sono riuscito a trovare alcuna documentazione tranne alcuni post di blog, ma erano obsoleti o non coprivano questo argomento. Non ero nemmeno in grado di elaborarlo dagli esempi forniti con Clang.
Potresti fornire l'output di 'lista (f.source.name per f in tu.get_includes())'? (basta stamparlo alla fine del tuo script) – forivall
proprio come un altro c compilatore, la cartella include deve essere impostata correttamente, index.parse (sys.argv [1], args = ['I./path/to/ include ',' I./another/include ']) –
Non è un peccato affidarsi al lavoro altrui, non dimenticare di menzionarlo: il tuo codice è in qualche modo molto simile al primo esempio nella pagina di Eli: http: //eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang –