aboutsummaryrefslogtreecommitdiff
path: root/tools/libclang/Indexing.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/libclang/Indexing.cpp')
-rw-r--r--tools/libclang/Indexing.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/tools/libclang/Indexing.cpp b/tools/libclang/Indexing.cpp
index f462c14dbf..50c37bc51f 100644
--- a/tools/libclang/Indexing.cpp
+++ b/tools/libclang/Indexing.cpp
@@ -12,6 +12,7 @@
#include "CXSourceLocation.h"
#include "CXTranslationUnit.h"
#include "CXString.h"
+#include "CIndexDiagnostic.h"
#include "CIndexer.h"
#include "clang/Frontend/ASTUnit.h"
@@ -31,6 +32,8 @@ using namespace cxstring;
using namespace cxtu;
using namespace cxindex;
+static void indexDiagnostics(CXTranslationUnit TU, IndexingContext &IdxCtx);
+
namespace {
//===----------------------------------------------------------------------===//
@@ -158,13 +161,15 @@ public:
class IndexingFrontendAction : public ASTFrontendAction {
IndexingContext IndexCtx;
+ CXTranslationUnit CXTU;
public:
IndexingFrontendAction(CXClientData clientData,
IndexerCallbacks &indexCallbacks,
unsigned indexOptions,
CXTranslationUnit cxTU)
- : IndexCtx(clientData, indexCallbacks, indexOptions, cxTU) { }
+ : IndexCtx(clientData, indexCallbacks, indexOptions, cxTU),
+ CXTU(cxTU) { }
virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
StringRef InFile) {
@@ -174,6 +179,10 @@ public:
return new IndexingConsumer(IndexCtx);
}
+ virtual void EndSourceFileAction() {
+ indexDiagnostics(CXTU, IndexCtx);
+ }
+
virtual TranslationUnitKind getTranslationUnitKind() { return TU_Prefix; }
virtual bool hasCodeCompletionSupport() const { return false; }
};
@@ -334,7 +343,6 @@ static void clang_indexSourceFile_Impl(void *UserData) {
bool Persistent = requestedToGetTU;
StringRef ResourceFilesPath = CXXIdx->getClangResourcesPath();
bool OnlyLocalDecls = false;
- bool CaptureDiagnostics = true;
bool PrecompilePreamble = false;
bool CacheCodeCompletionResults = false;
PreprocessorOptions &PPOpts = CInvok->getPreprocessorOpts();
@@ -360,13 +368,12 @@ static void clang_indexSourceFile_Impl(void *UserData) {
Persistent,
ResourceFilesPath,
OnlyLocalDecls,
- CaptureDiagnostics,
+ /*CaptureDiagnostics=*/true,
PrecompilePreamble,
CacheCodeCompletionResults);
if (!Unit)
return;
- // FIXME: Set state of the ASTUnit according to the TU_options.
if (out_TU)
*out_TU = CXTU->takeTU();
@@ -450,8 +457,11 @@ static void indexTranslationUnit(ASTUnit &Unit, IndexingContext &IdxCtx) {
}
static void indexDiagnostics(CXTranslationUnit TU, IndexingContext &IdxCtx) {
- // FIXME: Create a CXDiagnosticSet from TU;
- // IdxCtx.handleDiagnosticSet(Set);
+ if (!IdxCtx.hasDiagnosticCallback())
+ return;
+
+ CXDiagnosticSetImpl *DiagSet = cxdiag::lazyCreateDiags(TU);
+ IdxCtx.handleDiagnosticSet(DiagSet);
}
static void clang_indexTranslationUnit_Impl(void *UserData) {