From b3113bbbc6610da1ece71fb235414ac316edc639 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 21 Jul 2015 19:44:08 +0200 Subject: [PATCH] Clang: Reparse always before you complete the code There are two ways to hot fix the dependency problem. First version is to disable the caching(not the preamble) but it is triggering bugs. Second version is to enable caching and reparse before every complete. I opted for the second version because it is the commonly used path for most implementations. Later we have to minimize the reparse calls but for that we need the cooperation of editor. Change-Id: I878afb896cbf2338cbeb13d9e596a7776dd49854 Reviewed-by: Nikolai Kosjar --- src/tools/clangbackend/ipcsource/codecompleter.cpp | 2 ++ src/tools/clangbackend/ipcsource/translationunit.cpp | 7 +++++++ src/tools/clangbackend/ipcsource/translationunit.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/tools/clangbackend/ipcsource/codecompleter.cpp b/src/tools/clangbackend/ipcsource/codecompleter.cpp index e8f88b4c1d0..149277c53d3 100644 --- a/src/tools/clangbackend/ipcsource/codecompleter.cpp +++ b/src/tools/clangbackend/ipcsource/codecompleter.cpp @@ -49,6 +49,8 @@ CodeCompleter::CodeCompleter(TranslationUnit translationUnit) QVector CodeCompleter::complete(uint line, uint column) { + translationUnit.reparse(); + ClangCodeCompleteResults completeResults(clang_codeCompleteAt(translationUnit.cxTranslationUnit(), translationUnit.filePath().constData(), line, diff --git a/src/tools/clangbackend/ipcsource/translationunit.cpp b/src/tools/clangbackend/ipcsource/translationunit.cpp index f74b555f383..bfbfb9ec744 100644 --- a/src/tools/clangbackend/ipcsource/translationunit.cpp +++ b/src/tools/clangbackend/ipcsource/translationunit.cpp @@ -96,6 +96,13 @@ void TranslationUnit::reset() d.reset(); } +void TranslationUnit::reparse() +{ + cxTranslationUnit(); + + reparseTranslationUnit(); +} + CXIndex TranslationUnit::index() const { checkIfNull(); diff --git a/src/tools/clangbackend/ipcsource/translationunit.h b/src/tools/clangbackend/ipcsource/translationunit.h index 75dd39e8614..803e5e9c27b 100644 --- a/src/tools/clangbackend/ipcsource/translationunit.h +++ b/src/tools/clangbackend/ipcsource/translationunit.h @@ -73,6 +73,7 @@ public: bool isNull() const; void reset(); + void reparse(); CXIndex index() const; CXTranslationUnit cxTranslationUnit() const;