forked from qt-creator/qt-creator
Clang: Little speedup for code completion
...by ensuring that the precompiled preamble is created. Change-Id: I80784b6a79c40a7e452530e8288783f33f881efc Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
committed by
Nikolai Kosjar
parent
dbe4e32201
commit
f9899c2da8
@@ -163,10 +163,6 @@ void TranslationUnit::removeOutdatedTranslationUnit() const
|
|||||||
|
|
||||||
void TranslationUnit::createTranslationUnitIfNeeded() const
|
void TranslationUnit::createTranslationUnitIfNeeded() const
|
||||||
{
|
{
|
||||||
const auto options = CXTranslationUnit_CacheCompletionResults
|
|
||||||
| CXTranslationUnit_PrecompiledPreamble
|
|
||||||
| CXTranslationUnit_SkipFunctionBodies;
|
|
||||||
|
|
||||||
if (!d->translationUnit) {
|
if (!d->translationUnit) {
|
||||||
d->translationUnit = CXTranslationUnit();
|
d->translationUnit = CXTranslationUnit();
|
||||||
CXErrorCode errorCode = clang_parseTranslationUnit2(index(),
|
CXErrorCode errorCode = clang_parseTranslationUnit2(index(),
|
||||||
@@ -175,11 +171,15 @@ void TranslationUnit::createTranslationUnitIfNeeded() const
|
|||||||
d->projectPart.argumentCount(),
|
d->projectPart.argumentCount(),
|
||||||
d->unsavedFiles.cxUnsavedFiles(),
|
d->unsavedFiles.cxUnsavedFiles(),
|
||||||
d->unsavedFiles.count(),
|
d->unsavedFiles.count(),
|
||||||
options,
|
defaultOptions(),
|
||||||
&d->translationUnit);
|
&d->translationUnit);
|
||||||
|
|
||||||
checkTranslationUnitErrorCode(errorCode);
|
checkTranslationUnitErrorCode(errorCode);
|
||||||
|
|
||||||
|
// We need to reparse to create the precompiled preamble, which will speed up further calls,
|
||||||
|
// e.g. clang_codeCompleteAt() dramatically.
|
||||||
|
reparseTranslationUnit();
|
||||||
|
|
||||||
updateLastChangeTimePoint();
|
updateLastChangeTimePoint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,6 +192,21 @@ void TranslationUnit::checkTranslationUnitErrorCode(CXErrorCode errorCode) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TranslationUnit::reparseTranslationUnit() const
|
||||||
|
{
|
||||||
|
clang_reparseTranslationUnit(d->translationUnit,
|
||||||
|
d->unsavedFiles.count(),
|
||||||
|
d->unsavedFiles.cxUnsavedFiles(),
|
||||||
|
clang_defaultReparseOptions(d->translationUnit));
|
||||||
|
}
|
||||||
|
|
||||||
|
int TranslationUnit::defaultOptions()
|
||||||
|
{
|
||||||
|
return CXTranslationUnit_CacheCompletionResults
|
||||||
|
| CXTranslationUnit_PrecompiledPreamble
|
||||||
|
| CXTranslationUnit_SkipFunctionBodies;
|
||||||
|
}
|
||||||
|
|
||||||
uint TranslationUnit::unsavedFilesCount() const
|
uint TranslationUnit::unsavedFilesCount() const
|
||||||
{
|
{
|
||||||
return d->unsavedFiles.count();
|
return d->unsavedFiles.count();
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ private:
|
|||||||
void removeOutdatedTranslationUnit() const;
|
void removeOutdatedTranslationUnit() const;
|
||||||
void createTranslationUnitIfNeeded() const;
|
void createTranslationUnitIfNeeded() const;
|
||||||
void checkTranslationUnitErrorCode(CXErrorCode errorCode) const;
|
void checkTranslationUnitErrorCode(CXErrorCode errorCode) const;
|
||||||
|
void reparseTranslationUnit() const;
|
||||||
|
static int defaultOptions();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mutable std::shared_ptr<TranslationUnitData> d;
|
mutable std::shared_ptr<TranslationUnitData> d;
|
||||||
|
|||||||
Reference in New Issue
Block a user