Clang: Auto reparse if diagnostic config changes

On diagnostic config change, affected documents are closed behind the
scenes. Visible ones are parsed immediately, invisible ones are tagged
for parse once they become visible.

Task-number: QTCREATORBUG-16263
Change-Id: Id4dcc69f1a4bfccc597e798d6821f8718f86e352
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Nikolai Kosjar
2018-01-19 16:57:18 +01:00
parent 2c74441260
commit 5b1ae09fbf
5 changed files with 82 additions and 19 deletions

View File

@@ -181,6 +181,11 @@ void ClangEditorDocumentProcessor::clearProjectPart()
m_projectPart.clear();
}
Core::Id ClangEditorDocumentProcessor::diagnosticConfigId() const
{
return m_diagnosticConfigId;
}
void ClangEditorDocumentProcessor::updateCodeWarnings(
const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics,
const ClangBackEnd::DiagnosticContainer &firstHeaderErrorDiagnostic,
@@ -442,6 +447,7 @@ public:
}
const QStringList &options() const { return m_options; }
const Core::Id &diagnosticConfigId() const { return m_diagnosticConfigId; }
private:
void addLanguageOptions()
@@ -469,15 +475,19 @@ private:
const CppTools::ClangDiagnosticConfigsModel configsModel(
CppTools::codeModelSettings()->clangCustomDiagnosticConfigs());
if (configsModel.hasConfigWithId(warningConfigId)) {
m_options.append(
configsModel.configWithId(warningConfigId).commandLineWarnings());
addDiagnosticOptionsForConfig(configsModel.configWithId(warningConfigId));
return;
}
}
}
m_options.append(
CppTools::codeModelSettings()->clangDiagnosticConfig().commandLineWarnings());
addDiagnosticOptionsForConfig(CppTools::codeModelSettings()->clangDiagnosticConfig());
}
void addDiagnosticOptionsForConfig(const CppTools::ClangDiagnosticConfig &diagnosticConfig)
{
m_diagnosticConfigId = diagnosticConfig.id();
m_options.append(diagnosticConfig.commandLineWarnings());
}
void addXclangArg(const QString &argName, const QString &argValue = QString())
@@ -541,6 +551,7 @@ private:
const QString &m_filePath;
const CppTools::ProjectPart &m_projectPart;
Core::Id m_diagnosticConfigId;
QStringList m_options;
};
} // namespace
@@ -563,6 +574,7 @@ void ClangEditorDocumentProcessor::registerTranslationUnitForEditor(
}
const FileOptionsBuilder fileOptions(filePath(), projectPart);
m_diagnosticConfigId = fileOptions.diagnosticConfigId();
m_communicator.registerTranslationUnitsForEditor(
{fileContainerWithOptionsAndDocumentContent(projectPart, fileOptions.options())});
ClangCodeModel::Utils::setLastSentDocumentRevision(filePath(), revision());