問題タブ [libclang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - LibClang Python バインディング関数「getOverridden」
LibClang は、「指定されたメソッドによってオーバーライドされるメソッドのセットを決定する」関数を公開します (ここで説明されています)。ただし、この関数は python バインディングで公開されていないようです。誰かがこの関数をバインディングに追加する方法を説明できますか、それとも見つけられませんでしたか?
python - libclang: コンパイラ システムのインクルード パスを追加 (Windows の Python)
この質問とアンドリューの提案に従って、私はliblang にコンパイラ システム インクルード パス(Windows の場合) を追加して、Python コードを作成しようとしています。
このようなC++ ソース ファイルを完全に解析するには
ここで、コンパイラ システムのインクルード パスが適切に設定されていない場合 (Windows を使用)、次の出力が得られます。
残念ながら、このアプローチ(Python と Clang の新機能) や、このソリューションを Python コードに実装する方法を理解できません。
ccsyspathも試しましたが、「Windows 用に調整する」スキルがありません。
誰でもこの問題を解決する方法を知っていますか?
python - libclang (Python) で特定の関数宣言のすべての参照を見つける
Python で libclang を介して C++ ソース ファイルを解析するときに、特定の関数宣言のすべての参照 (行と列の位置) を見つけようとしています。
例えば:
addition
したがって、上記のソース ファイルの場合、 5 行目の関数宣言については、15 行目と 16 行目find_all_function_decl_references
の参照を (下記参照) に返したいと思います。addition
私はこれを試しました(ここから適応)
もう 1 つの方法は、リストにあるすべての関数宣言を保存し、find_all_function_decl_references
それぞれに対してメソッドを実行することです。
これにアプローチする方法を知っている人はいますか?このfind_all_function_decl_references
方法はどうでしょう。(私はlibclang
Pythonと非常に新しいです。)
が何らかのタイプへのすべての参照を見つけているところを見てきましdef find_typerefs
たが、私のニーズに合わせてそれを実装する方法がわかりません。
理想的には、あらゆる宣言のすべての参照を取得できるようにしたいと考えています。関数だけでなく、変数の宣言、パラメーターの宣言 (例: 上記の例の 7 行目のa
and b
)、クラスの宣言など。
編集アンドリューのコメントに 続いて、私のセットアップ仕様に関する詳細を以下に示します。
- LLVM 3.8.0-win64
- libclang-py3 3.8.1
- Python3.5.1 (WindowsではCPythonを想定)
- については、こちらの回答で提案されているものと別の
args
回答のものの両方を試しました。
*私の小さなプログラミング経験を考えると、それがどのように機能するかについての簡単な説明とともに回答をいただければ幸いです.
python - lib clang カーソル/タイプの実際のスペルを取得する
C++ コードのフォーマット エラーを検出するスクリプトを作成しています。(たとえば、すべてのメンバー変数に接頭辞が付けられていることを確認しますm_
)。私がやりたいことの 1 つは、ポインターである型の型にアスタリスクが付いていることを確認することです ( int* num
, not int *num
)。
そのため、ソース コードにある型のテキストを取得する必要があります。ただし、カーソルまたはタイプのスペルを取得すると、きれいに印刷されたバージョンが返されます。int *
ソースに が含まれていても、常に が返されますint*
。
これを回避するために、カーソルの範囲を取得し、ソース ファイルから部分文字列を取得して確認します。ただし、タイプの範囲を取得する方法がないように思われるため、実際のスペルを取得できませんか? これを行う方法はありますか?おそらく、型のトークンを取得してから、それらの範囲を取得することでしょうか?
(私は Python バインディングを使用していますが、必要に応じて C API に切り替えることができます)
c++ - libclang の -D マクロ コンパイラ フラグをグローバルに設定する
コンパイルするために -D マクロを使用する (AST ベースのミュータント ジェネレーターを使用して) コードのミュータントを生成しようとしています。このコマンドを使用して、clang を使用して AST ダンプを生成できます
clang -Xclang -ast-dump -fsyntax-only -DFLAG=0 -DOTHER_FLAG file.c
ただし、ミュータント ジェネレーター ツール (Milu) は libclang を使用して c コードを解析し、AST を生成します。これらのマクロがないと、libclang はコードを適切に解析できず、コードに #defines を追加することはできません。これらの -D マクロをグローバルに設定したい。
たとえば、libclang によって読み取られる環境変数 C_INCLUDE_PATH を設定できます。-D マクロについても同様のことができるかどうか疑問に思っています。