Skip to content

[clangd] Improve robustness when clang-tidy check names contain leading spaces. #109421

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 20, 2024

Conversation

hokein
Copy link
Collaborator

@hokein hokein commented Sep 20, 2024

The current logic assumes that check names do not have leading spaces.

In cases like "-, clang-diagnostic", when processing the second check " clang-diagnostics-*" (with a leading space), the check fails on CDPrefix.starts_with(Check), resulting in all diagnostics remaining disabled.

…ng spaces.

The current logic assumes that check names do not have leading spaces.

In cases like "-*, clang-diagnostic*", when processing the second check
" clang-diagnostics-*" (with a leading space), the check fails on
`CDPrefix.starts_with(Check)`, resulting in all diagnostics remaining
disabled.
@llvmbot
Copy link
Member

llvmbot commented Sep 20, 2024

@llvm/pr-subscribers-clang-tools-extra

@llvm/pr-subscribers-clangd

Author: Haojian Wu (hokein)

Changes

The current logic assumes that check names do not have leading spaces.

In cases like "-, clang-diagnostic", when processing the second check " clang-diagnostics-*" (with a leading space), the check fails on CDPrefix.starts_with(Check), resulting in all diagnostics remaining disabled.


Full diff: https://github.com/llvm/llvm-project/pull/109421.diff

2 Files Affected:

  • (modified) clang-tools-extra/clangd/ParsedAST.cpp (+2)
  • (modified) clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp (+4)
diff --git a/clang-tools-extra/clangd/ParsedAST.cpp b/clang-tools-extra/clangd/ParsedAST.cpp
index 4491be9aa0362b..5cf1691ce39617 100644
--- a/clang-tools-extra/clangd/ParsedAST.cpp
+++ b/clang-tools-extra/clangd/ParsedAST.cpp
@@ -280,6 +280,8 @@ class TidyDiagnosticGroups {
     llvm::StringRef Check;
     while (!Checks.empty()) {
       std::tie(Check, Checks) = Checks.split(',');
+      Check = Check.trim();
+
       if (Check.empty())
         continue;
 
diff --git a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
index 096f77e414f5a5..efb2e5ed2fbe1d 100644
--- a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
+++ b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
@@ -748,6 +748,10 @@ TEST(DiagnosticTest, ClangTidyEnablesClangWarning) {
   TU.ExtraArgs = {"-Wunused"};
   TU.ClangTidyProvider = addClangArgs({"-Wno-unused"}, {});
   EXPECT_THAT(TU.build().getDiagnostics(), IsEmpty());
+
+  TU.ExtraArgs = {"-Wno-unused"};
+  TU.ClangTidyProvider = addClangArgs({"-Wunused"}, {"-*, clang-diagnostic-*"});
+  EXPECT_THAT(TU.build().getDiagnostics(), SizeIs(1));
 }
 
 TEST(DiagnosticTest, LongFixMessages) {

Copy link
Member

@kadircet kadircet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks!

@hokein hokein merged commit 57b12e8 into llvm:main Sep 20, 2024
8 of 9 checks passed
@hokein hokein deleted the clangd-clang-tidy-config branch September 20, 2024 13:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants