From f4070c4b43da876a79faff2aeaa35f404caf4ff5 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 19 Nov 2021 16:19:02 +0100 Subject: [PATCH] ClangCodeModel: Do not report symbol references from non-existing files ... which we get from clangd's textDocument/references. This works around https://github.com/clangd/clangd/issues/935. Fixes: QTCREATORBUG-26574 Change-Id: I3933f30fdaca024a6e240bd0962de3d97acd0dbf Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 1d21cf747fe..5d4e7acbbd6 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -1594,14 +1594,20 @@ void ClangdClient::Private::handleFindUsagesResult(quint64 key, const QListfileData[loc.uri()].rangesAndLineText << qMakePair(loc.range(), QString()); - for (auto it = refData->fileData.begin(); it != refData->fileData.end(); ++it) { - const QStringList lines = SymbolSupport::getFileContents(it.key().toFilePath()); + for (auto it = refData->fileData.begin(); it != refData->fileData.end();) { + const Utils::FilePath filePath = it.key().toFilePath(); + if (!filePath.exists()) { // https://github.com/clangd/clangd/issues/935 + it = refData->fileData.erase(it); + continue; + } + const QStringList lines = SymbolSupport::getFileContents(filePath); it->fileContent = lines.join('\n'); for (auto &rangeWithText : it.value().rangesAndLineText) { const int lineNo = rangeWithText.first.start().line(); if (lineNo >= 0 && lineNo < lines.size()) rangeWithText.second = lines.at(lineNo); } + ++it; } qCDebug(clangdLog) << "document count is" << refData->fileData.size();