ClangFormat: Add showing error message in general messages

Change-Id: Ia3e8d7217f0551a768a456ea27b09977507687f2
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Artem Sokolovskii
2024-10-23 14:52:04 +02:00
parent 00f47a3b9f
commit 08a7cc1a3d

View File

@@ -6,6 +6,7 @@
#include "llvmfilesystem.h"
#include <coreplugin/icore.h>
#include <coreplugin/messagemanager.h>
#include <projectexplorer/editorconfiguration.h>
#include <projectexplorer/project.h>
@@ -944,6 +945,37 @@ const clang::format::FormatStyle &ClangFormatBaseIndenter::styleForFile() const
return d->styleForFile();
}
const llvm::Expected<clang::format::FormatStyle> getStyleFromProjectFolder(
const Utils::FilePath *fileName)
{
#if LLVM_VERSION_MAJOR >= 19
static QString s_cachedError;
llvm::SourceMgr::DiagHandlerTy diagHandler = [](const llvm::SMDiagnostic &diag, void *) {
QString errorMessage = QString::fromStdString(diag.getMessage().str()) + " "
+ QString::number(diag.getLineNo()) + ":"
+ QString::number(diag.getColumnNo());
if (s_cachedError == errorMessage)
return;
s_cachedError = errorMessage;
Core::MessageManager::writeSilently("ClangFormat file error: " + errorMessage);
};
return clang::format::getStyle(
"file",
fileName->toFSPathString().toStdString(),
"none",
"",
&llvmFileSystemAdapter,
true,
diagHandler);
#else
return clang::format::getStyle(
"file", fileName->toFSPathString().toStdString(), "none", "", &llvmFileSystemAdapter, true);
#endif
}
const clang::format::FormatStyle &ClangFormatBaseIndenterPrivate::styleForFile() const
{
static const milliseconds cacheTimeout = getCacheTimeout();
@@ -962,8 +994,8 @@ const clang::format::FormatStyle &ClangFormatBaseIndenterPrivate::styleForFile()
return m_cachedStyle.style;
}
llvm::Expected<clang::format::FormatStyle> styleFromProjectFolder = clang::format::getStyle(
"file", m_fileName->toFSPathString().toStdString(), "none", "", &llvmFileSystemAdapter, true);
llvm::Expected<clang::format::FormatStyle> styleFromProjectFolder = getStyleFromProjectFolder(
m_fileName);
if (styleFromProjectFolder && !(*styleFromProjectFolder == clang::format::getNoStyle())) {
addQtcStatementMacros(*styleFromProjectFolder);