Skip to content

Commit dad2ea2

Browse files
committed
Filtered NOLINT fix in ClangTidyRename test
1 parent 3fb02dd commit dad2ea2

File tree

5 files changed

+24
-13
lines changed

5 files changed

+24
-13
lines changed

clang-tools-extra/clangd/Diagnostics.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ std::string mainMessage(const Diag &D, const ClangdDiagnosticOptions &Opts) {
317317
// the fixes is just to suppress could be misleading.
318318
int RealFixCount = D.Fixes.size();
319319
for (auto const &Fix : D.Fixes) {
320-
if (isClangTidyNoLintFixes(Fix)) {
320+
if (isNoLintFixes(Fix)) {
321321
RealFixCount--;
322322
}
323323
}

clang-tools-extra/clangd/NoLintFixes.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ namespace clang {
3939
namespace clangd {
4040

4141
std::vector<Fix>
42-
clangTidyNoLintFixes(const clang::tidy::ClangTidyContext &CTContext,
42+
noLintFixes(const clang::tidy::ClangTidyContext &CTContext,
4343
const clang::Diagnostic &Info, const Diag &Diag) {
4444
auto RuleName = CTContext.getCheckName(Diag.ID);
4545
if (
@@ -93,9 +93,9 @@ clangTidyNoLintFixes(const clang::tidy::ClangTidyContext &CTContext,
9393
return {F};
9494
}
9595

96-
const auto MsgRegex = std::regex("ignore \\[.*\\] for this line");
97-
bool isClangTidyNoLintFixes(const Fix &F) {
98-
return std::regex_match(F.Message, MsgRegex);
96+
const auto Regex = std::regex(NoLintFixMsgRegexStr);
97+
bool isNoLintFixes(const Fix &F) {
98+
return std::regex_match(F.Message, Regex);
9999
}
100100

101101
} // namespace clangd

clang-tools-extra/clangd/NoLintFixes.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ namespace clangd {
2222

2323
/// Suggesting to insert "\\ NOLINTNEXTLINE(...)" to suppress clang-tidy
2424
/// diagnostics.
25-
std::vector<Fix>
26-
clangTidyNoLintFixes(const clang::tidy::ClangTidyContext &CTContext,
27-
const clang::Diagnostic &Info, const Diag &Diag);
25+
std::vector<Fix> noLintFixes(const clang::tidy::ClangTidyContext &CTContext,
26+
const clang::Diagnostic &Info, const Diag &Diag);
27+
28+
const auto NoLintFixMsgRegexStr = std::string("ignore \\[.*\\] for this line");
2829

2930
/// Check if a fix created by clangTidyNoLintFixes().
30-
bool isClangTidyNoLintFixes(const Fix &F);
31+
bool isNoLintFixes(const Fix &F);
3132

3233
} // namespace clangd
3334
} // namespace clang

clang-tools-extra/clangd/ParsedAST.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs,
660660
[&FixIncludes, &CTContext](const Diag &Diag,
661661
const clang::Diagnostic &Info) {
662662
auto Fixes = std::vector<Fix>();
663-
auto NoLintFixes = clangTidyNoLintFixes(*CTContext, Info, Diag);
663+
auto NoLintFixes = noLintFixes(*CTContext, Info, Diag);
664664
Fixes.insert(Fixes.end(), NoLintFixes.begin(), NoLintFixes.end());
665665
auto IncludeFixes = FixIncludes->fix(Diag.Severity, Info);
666666
Fixes.insert(Fixes.end(), IncludeFixes.begin(), IncludeFixes.end());

clang-tools-extra/clangd/unittests/ClangdLSPServerTests.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "FeatureModule.h"
1616
#include "LSPBinder.h"
1717
#include "LSPClient.h"
18+
#include "NoLintFixes.h"
1819
#include "TestFS.h"
1920
#include "support/Function.h"
2021
#include "support/Logger.h"
@@ -32,13 +33,15 @@
3233
#include "llvm/Testing/Support/SupportHelpers.h"
3334
#include "gmock/gmock.h"
3435
#include "gtest/gtest.h"
36+
#include <algorithm>
3537
#include <cassert>
3638
#include <condition_variable>
3739
#include <cstddef>
3840
#include <deque>
3941
#include <memory>
4042
#include <mutex>
4143
#include <optional>
44+
#include <regex>
4245
#include <thread>
4346
#include <utility>
4447

@@ -222,7 +225,7 @@ TEST_F(LSPTest, ClangTidyRename) {
222225
ASSERT_TRUE(Diags && !Diags->empty());
223226
auto RenameDiag = Diags->front();
224227

225-
auto RenameCommand =
228+
auto Fixes =
226229
(*Client
227230
.call("textDocument/codeAction",
228231
llvm::json::Object{
@@ -232,9 +235,16 @@ TEST_F(LSPTest, ClangTidyRename) {
232235
{"diagnostics", llvm::json::Array{RenameDiag}}}},
233236
{"range", Source.range()}})
234237
.takeValue()
235-
.getAsArray())[0];
238+
.getAsArray());
239+
const auto NoLintRegex = std::regex("Apply fix: " + NoLintFixMsgRegexStr);
240+
const auto &RenameCommand = *std::find_if(
241+
Fixes.begin(), Fixes.end(), [&](decltype(Fixes)::value_type &Fix) {
236242

237-
ASSERT_EQ((*RenameCommand.getAsObject())["title"], "change 'foo' to 'Foo'");
243+
return !std::regex_match((*Fix.getAsObject())["title"].getAsString()->data(), NoLintRegex);
244+
});
245+
246+
ASSERT_EQ((*RenameCommand.getAsObject()).get("title")->getAsString(),
247+
"change 'foo' to 'Foo'");
238248

239249
Client.expectServerCall("workspace/applyEdit");
240250
Client.call("workspace/executeCommand", RenameCommand);

0 commit comments

Comments
 (0)