diff options
| author | Haojian Wu <hokein@google.com> | 2019-04-17 12:53:59 +0000 |
|---|---|---|
| committer | Haojian Wu <hokein@google.com> | 2019-04-17 12:53:59 +0000 |
| commit | f2879d8a4877eafcdb12c852030746d175f8abbd (patch) | |
| tree | a0a0b22753ec03cdf48709cd2e70c6c39b0ef627 /clang-tools-extra/unittests/clang-tidy | |
| parent | 641caa57cc14816d6bed71a08b810ede37fdc794 (diff) | |
| download | bcm5719-llvm-f2879d8a4877eafcdb12c852030746d175f8abbd.tar.gz bcm5719-llvm-f2879d8a4877eafcdb12c852030746d175f8abbd.zip | |
[clang-tidy] Add fix descriptions to clang-tidy checks.
Summary:
Motivation/Context: in the code review system integrating with clang-tidy,
clang-tidy doesn't provide a human-readable description of the fix. Usually
developers have to preview a code diff (before vs after apply the fix) to
understand what the fix does before applying a fix.
This patch proposes that each clang-tidy check provides a short and
actional fix description that can be shown in the UI, so that users can know
what the fix does without previewing diff.
This patch extends clang-tidy framework to support fix descriptions (will add implementations for
existing checks in the future). Fix descriptions and fixes are emitted via diagnostic::Note (rather than
attaching the main warning diagnostic).
Before this patch:
```
void MyCheck::check(...) {
...
diag(loc, "my check warning") << FixtItHint::CreateReplacement(...);
}
```
After:
```
void MyCheck::check(...) {
...
diag(loc, "my check warning"); // Emit a check warning
diag(loc, "fix description", DiagnosticIDs::Note) << FixtItHint::CreateReplacement(...); // Emit a diagnostic note and a fix
}
```
Reviewers: sammccall, alexfh
Reviewed By: alexfh
Subscribers: MyDeveloperDay, Eugene.Zelenko, aaron.ballman, JonasToth, xazax.hun, jdoerfert, cfe-commits
Tags: #clang-tools-extra, #clang
Differential Revision: https://reviews.llvm.org/D59932
llvm-svn: 358576
Diffstat (limited to 'clang-tools-extra/unittests/clang-tidy')
| -rw-r--r-- | clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h index 33139d72c29..560b0ff893c 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h @@ -14,6 +14,8 @@ #include "clang/ASTMatchers/ASTMatchFinder.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/FrontendActions.h" +#include "clang/Tooling/Core/Diagnostic.h" +#include "clang/Tooling/Core/Replacement.h" #include "clang/Tooling/Refactoring.h" #include "clang/Tooling/Tooling.h" #include "llvm/ADT/Optional.h" @@ -130,16 +132,17 @@ runCheckOnCode(StringRef Code, std::vector<ClangTidyError> *Errors = nullptr, tooling::Replacements Fixes; std::vector<ClangTidyError> Diags = DiagConsumer.take(); for (const ClangTidyError &Error : Diags) { - for (const auto &FileAndFixes : Error.Fix) { - for (const auto &Fix : FileAndFixes.second) { - auto Err = Fixes.add(Fix); - // FIXME: better error handling. Keep the behavior for now. - if (Err) { - llvm::errs() << llvm::toString(std::move(Err)) << "\n"; - return ""; + if (const auto *ChosenFix = tooling::selectFirstFix(Error)) + for (const auto &FileAndFixes : *ChosenFix) { + for (const auto &Fix : FileAndFixes.second) { + auto Err = Fixes.add(Fix); + // FIXME: better error handling. Keep the behavior for now. + if (Err) { + llvm::errs() << llvm::toString(std::move(Err)) << "\n"; + return ""; + } } } - } } if (Errors) *Errors = std::move(Diags); |

