問題タブ [libtooling]
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.
c++ - libtooling を使用して完全修飾テンプレート テンプレート引数名を取得する
テンプレートテンプレートパラメーターを使用して、テンプレートクラスの実体化libtooling
を印刷するために使用しようとしています。CXXRecordDecl
残念ながら、テンプレート テンプレート パラメータの文字列表現は完全修飾されていません (たとえば、名前空間がありません)。
私はCXXRecordDecl
このコードで印刷しています:
出力が になると予想される例を次に示しますが、次のns::A<ns::B>
ようになりますns::A<B>
。
テンプレート テンプレート パラメータを使用してクラスの完全修飾名を出力するにはどうすればよいですか?
getCanonicalTypeInternal
関連して、内部関数のように聞こえるを呼び出さずにこれを行う方法はありますか?
[編集 #1]decl->getQualifiedNameAsString()
テンプレートの引数と出力を完全に省略したも試しましns::A
た。
[編集 #2] Cling は一連の問題を別の問題と交換します。テンプレート テンプレート パラメーターの完全修飾型を正しく生成します。ただし、関数 (および関数ポインター) の引数と戻り値の型の非修飾名が生成されます。たとえば、次のコードは、ns::A<void (B)>
代わりに出力を生成しns::A<void (ns::B)>
ます。
[編集 #3]上記の問題について、Cling イシュー トラッカーにイシューを投稿しました。ページを表示するには、CERN 軽量アカウントでサインインする必要があることに注意してください。アカウントの作成手順については、このページを参照してください。
clang - ObjCPropertyDecl からクラス情報を取得する
clangObjCPropertyDecl
型からクラス情報を抽出するのに問題があります。
Objective-C ファイルの例:
ast をダンプすると、次のようになります。
以前は、型をチェックして であるかどうかを確認することに依存する OCLint ルールがあったNSArray
ため、 anASTVisitor
と次のコードを使用します。
nullable
上記のコード サンプルのキーワードとジェネリックの両方が、修飾された型を変更することに注意してください (AST ダンプを参照してください)。
私の質問は、ObjCPropertyDecl
egから、NSArray *
またはNSString *
余分な砂糖なしで、Objective-C クラス型のみを取得できる方法はありますか?
私は試してみましgetSplitDesugaredType();
たが、それはnull可能な部分を削除するのにうまく機能しますが、ジェネリックは削除されません。
編集:
私の現在の考えではType
、SplitQualType
then キャストからObjCObjectPointerType
を取得しObjCObjectType
て、必要な情報を取得できる可能性がありますが、明日それを実装してみます。
c++ - cmake build config を使用して、コードベース全体でプラグインではない llvm libclang ツールを実行するにはどうすればよいですか?
llvm プラグインを作成し、各ソース ファイルに対してプラグインを実行する cmake オブジェクト ライブラリを作成しましたが、コンパイル全体からのデータが必要ですが、プラグインはコンパイル ユニットごとに再度実行されます。
ただし、私のビルド環境はかなり複雑で、このツールを実行するためだけに構成の 2 番目の表現を管理したくありません。
既存の CMakeLists.txt を使用して #define などを送信し、1 回の実行でコード ベース全体を実行できるツールへのパスを含めるにはどうすればよいですか?
単一のコンパイル ユニットになるので、Coliru の unity ビルドをプラグインで使用することを検討しましたが、必要な情報を取得できる cmake に組み込まれたもの (おそらくいくつかのコマンド ライン ツールと組み合わせて) を望んでいました。 . また、多数のデータ ファイルを構築し、それらを結合する別のツールを作成するマルチパス ランを実行することもできますが、それも理想的ではありません。
ありがとうございました。
c++ - clang: カスタム属性が AST に表示されない
公式マニュアルで説明されているように、clang にカスタム属性を実装しました: http://clang.llvm.org/docs/InternalsManual.html#how-to-add-an-attribute
そこで、次のコードを Attr.td に追加しました。
およびAttrDocs.tdへのドキュメント。クランを再構築した後、使用時に不明な属性の警告が表示されないため、明らかに属性を認識しています。libtoolingを使用して新しい属性クラスにアクセスすることもできますがlet ASTNode = 1
、属性定義に行を追加しても、属性は AST に表示されません。
他に検討する必要があるものはありますか、それとも何が問題なのですか?
installation - LibTool の実行方法は?
現在、開発中のマシンにclang-llvmをインストールしてツールをテストしました。私がしなければならないのはbuild/bin
、ツールを実行することだけです。
ただし、このツールを別のマシンで実行してみたいと思います。開発したツールを実行するには、ここで何をすべきですか?
clang-llvm 環境全体もセットアップする必要がありますか? これには非常に時間がかかり、フォルダ全体のサイズは約 22 GB 以上になります。
私が作成しているツールは、RecursiveASTVisitor を実行しています (以下のリンクと同じ環境) http://clang.llvm.org/docs/LibASTMatchersTutorial.html