ClangCodeModel: Force clangd restart on external changes

Neither we nor clangd can afford to watch all source files, which means
that after e.g. a branch switch we can easily end up in an inconsistent
state.
We alleviate this problem by restarting clangd if at least one open file
was changed externally.

Change-Id: I7e0d14835e3afbd7a64c3233614f2161282dddc0
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-09-03 17:14:54 +02:00
parent 847a03786c
commit d583dde17b
12 changed files with 166 additions and 1 deletions

View File

@@ -106,6 +106,7 @@ public:
QScopedPointer<Formatter> m_formatter;
int m_autoSaveRevision = -1;
bool m_silentReload = false;
TextMarks m_marksCache; // Marks not owned
Utils::Guard m_modificationChangedGuard;
@@ -426,6 +427,13 @@ QAction *TextDocument::createDiffAgainstCurrentFileAction(
return diffAction;
}
#ifdef WITH_TESTS
void TextDocument::setSilentReload()
{
d->m_silentReload = true;
}
#endif
void TextDocument::triggerPendingUpdates()
{
if (d->m_fontSettingsNeedsApply)
@@ -707,6 +715,13 @@ void TextDocument::setFilePath(const Utils::FilePath &newName)
IDocument::setFilePath(newName.absoluteFilePath());
}
IDocument::ReloadBehavior TextDocument::reloadBehavior(ChangeTrigger state, ChangeType type) const
{
if (d->m_silentReload)
return IDocument::BehaviorSilent;
return BaseTextDocument::reloadBehavior(state, type);
}
bool TextDocument::isModified() const
{
return d->m_document.isModified();