mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 03:25:54 -04:00

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
54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
//===- clang-apply-replacements/ApplyReplacementsTest.cpp
|
|
//----------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "clang-apply-replacements/Tooling/ApplyReplacements.h"
|
|
#include "clang/Format/Format.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace clang::replace;
|
|
using namespace llvm;
|
|
|
|
namespace clang {
|
|
namespace tooling {
|
|
|
|
static TUDiagnostics
|
|
makeTUDiagnostics(const std::string &MainSourceFile, StringRef DiagnosticName,
|
|
const DiagnosticMessage &Message,
|
|
const StringMap<Replacements> &Replacements,
|
|
StringRef BuildDirectory) {
|
|
TUDiagnostics TUs;
|
|
TUs.push_back({MainSourceFile,
|
|
{{DiagnosticName,
|
|
Message,
|
|
{},
|
|
Diagnostic::Warning,
|
|
BuildDirectory}}});
|
|
return TUs;
|
|
}
|
|
|
|
// Test to ensure diagnostics with no fixes, will be merged correctly
|
|
// before applying.
|
|
TEST(ApplyReplacementsTest, mergeDiagnosticsWithNoFixes) {
|
|
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions());
|
|
DiagnosticsEngine Diagnostics(
|
|
IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()), DiagOpts.get());
|
|
FileManager Files((FileSystemOptions()));
|
|
SourceManager SM(Diagnostics, Files);
|
|
TUReplacements TURs;
|
|
TUDiagnostics TUs =
|
|
makeTUDiagnostics("path/to/source.cpp", "diagnostic", {}, {}, "path/to");
|
|
FileToChangesMap ReplacementsMap;
|
|
|
|
EXPECT_TRUE(mergeAndDeduplicate(TURs, TUs, ReplacementsMap, SM));
|
|
EXPECT_TRUE(ReplacementsMap.empty());
|
|
}
|
|
|
|
} // end namespace tooling
|
|
} // end namespace clang
|