問題タブ [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.

0 投票する
1 に答える
2891 参照

c++ - CLang Libtooling: clang::VarDecl、clang::FieldDecl、または clang::ParmVarDecl 内の変数のデータ型をフェッチする

私はCLang 3.5に取り組んでいます。C++ プロジェクトで宣言された変数に関する情報をフェッチしようとしています。

clang::VarDeclclang::FieldDeclまたはclang::ParmVarDeclオブジェクト内の変数のデータ型または修飾クラス名を取得するにはどうすればよいですか? ここで提供されているドキュメントの変数のデータ型またはクラス名を返すことができる関数を見つけようとしclang::VarDeclました。

http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html

$LLVM/tools/clang/tools/clang-check/ClangCheck.cppcmd argを渡す--ast-dumpと、宣言されたすべての変数を含むすべてのASTノードに関するすべての情報が表示されるため、コードも調べてみました。そのすべての情報にどのようにアクセスするのだろうか。

私はASTMatchers自分の変数宣言を見つけるために使用しています。それらは次のとおりです。

宣言されたすべての変数のデータ型を取得する方法を教えてください。

0 投票する
4 に答える
2383 参照

c++ - clang の FunctionDecl クラスからパラメーター情報を取得する

clang の FunctionDecl クラスからパラメータ情報を文字列として取得する方法。私はしようとしていますが、非常に多くの継承に混乱しています。また、コンパイラは getReturnType() は FunctionDecl のメンバーではないと言っていますが、doxygen のドキュメントではそうではありません。助けてください。 http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html

エラー:-

「class clang::FunctionDecl」には「getReturnType」という名前のメンバーがありません</p>

0 投票する
2 に答える
582 参照

macos - Mac OS で clang LibTooling をビルドするには?

Mac OS X Yosemite で clang の LibTooling を使用したいと考えています。Clang のドキュメントには、clang と llvm のビルド方法のみが示されていますが、必要なのは LibTooling であり、clang 全体ではありません (xcode は既に clang と llvm を提供しています)。別のclangを構築せずにLibToolingを構築するには?

0 投票する
0 に答える
265 参照

c - Clang を使用した ac コードでの関数呼び出しの抽出

関数呼び出しを含む式を (C コードで) 分解し、各関数呼び出しを変数に抽出するプログラムを作成したいと考えています。例えば:

x = A() + B();

に変更する必要があります:

Clang と RecursiveASTVisitor を使って書いています。これが私の解決策です。最初に、すべての関数を探し、すべての呼び出しが含まれるメイン ブロックの最初の部分でそれぞれの変数を宣言する必要があります。次に、両側に関数呼び出しがある Binary Operations を探します。次に、関数呼び出しを抽出し、代わりに変数を使用します。私はこれの初心者なので、これを行う方が良いのか、それともこの解決策がまったく機能するのかわかりませんか?

0 投票する
2 に答える
2587 参照

c++ - Clang の libtooling を使用して #includes (または #defines) を一致させる正しい方法は何ですか?

libtooling リファクタリング ツールを作成しています。Fooというヘッダーで定義された、たとえば というクラスがありfoo.hます。foo.hがファイルに含まれているかどうかを確認したい。現在、 がbar.cc含まれてfoo.hいるかどうかを確認するために、 を使用してマッチングしてrecordDecl(hasName("Foo"))います。が含まれている場合、前処理後に の ASTclass Foo { ... };内に存在するため、これは機能します。bar.ccbar.ccfoo.h

ただし、たとえば、which includes が含まbar.ccれている場合、これは機能しません。明示的に含めたい。cat.hfoo.hbar.ccfoo.h

#defineさらに、マクロに対応できるようにしたいです。

私が自分のツールを書いてきた方法では、これら 2 つの目標を達成できませんでした。これは、一致させる AST が既に前処理されているためです。私がやろうとしていることは可能ですか?Clang の Doxygen ページでクラス リファレンスを掘り下げましたPreprocessorが、探しているものがまったく見つかりませんでした。

0 投票する
4 に答える
4063 参照

c++ - Clang と LibTooling で標準ライブラリを使用する方法

Clang と LibTooling を使用して、C++ ソース分析および変換ツールを作成したいと考えています。このチュートリアルに従って Clang と LibToolingを作成しました。作成した Clang バイナリを使用して、いくつかの分析ツールを実行および作成し、C++ プログラムをコンパイルすることができました。ただし、標準ライブラリのヘッダーを (ソース ファイルまたはツールに) 含めると、ソース ファイル/ツールをコンパイルまたは実行するときに問題が発生します。たとえば、次の C++ ソース ファイルに対して clang-check を実行するとします。

「致命的なエラー: 'iostream' ファイルが見つかりません」というメッセージが表示されます。(注: 標準ライブラリを使用する C++ プログラムではなく、ユーザー定義クラスを含む C++ プログラムをコンパイルできます。) この問題を解決するために、libc++ をビルドしました (このガイドに従って、llvm/project でビルドします)。 LLVM と Clang をビルドしたディレクトリ) に移動しましたが、Clang とツールで libc++ を使用するのにまだ問題があります。ここで、次を使用してテスト ファイルをコンパイルしようとすると、次のようになります。

次に、「致命的なエラー: 'unistd.h' ファイルが見つかりません」というメッセージが表示されます。だから私の質問はこれです.Clangと私のツールがlibc ++を使用するように正しく指示するにはどうすればよいですか?

OS X Yosemite 10.10 を実行しており、Clang 3.6.0 を使用しています。

0 投票する
1 に答える
263 参照

c++ - OCLint ASTMatcher ルール。一致する NS_ENUM

typedef enum宣言と宣言の両方に一致する OCLint ルールを作成しようとしていますが、typedef NS_ENUMほとんど成功していません。次の列挙型宣言を含む Objective-C ファイル (TestClass.m) があります。

次のコマンドで AST をダンプします。

これを含む次の出力が表示されます。

ASTMatcherRule (ObjCNsEnumRule) があり、両方を一致させようとしてtypedef enumtypedef NS_ENUMますが、そのコードは次のとおりです。

ただし、このルールを実行すると、typedef enum宣言の出力しか得られません。

ここで何が間違っていますか?両方の列挙型が AST ダンプに表示されますが、OCLint ルールに一致するのは 1 つだけです。

編集

EnumDeclこれは、別のソース ファイルで定義されているforを示す AST ダンプに関係している可能性があると思いNS_ENUMます (おそらく NS_ENUM マクロのため)。

0 投票する
0 に答える
143 参照

clang - リファクタリング ツールでライブ変数を取得する

私はclang libtoolingでリファクタリングツールを書いています。

必要なのは、ライブ変数情報に従ってソース コードを書き直すことです。たとえば、関数内の基本ブロックごとに、ライブアウト変数をダンプします。

分析チェッカーを書いていれば、それは非常に簡単です。

mgr.getAnalysis(D) を呼び出すだけで、この関数の LiveVariables を取得できます。次に、各ブロックをダンプします。

しかし、私はスタンドアロンのリファクタリング ツールを作成しています。AnalysisManager オブジェクトを作成するにはどうすればよいですか?

どうもありがとうございます。