[clang-tools-extra] 6c07bda - [clang-tidy] Avoid adding unnecessary semicolon in modernize-use-equals-default
Alexander Shaposhnikov via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 21 17:49:11 PDT 2022
Author: Alexander Shaposhnikov
Date: 2022-10-22T00:42:50Z
New Revision: 6c07bda7a75c68aa14a1e5f1ca0eac9ba6220cbb
URL: https://github.com/llvm/llvm-project/commit/6c07bda7a75c68aa14a1e5f1ca0eac9ba6220cbb
DIFF: https://github.com/llvm/llvm-project/commit/6c07bda7a75c68aa14a1e5f1ca0eac9ba6220cbb.diff
LOG: [clang-tidy] Avoid adding unnecessary semicolon in modernize-use-equals-default
Adjust the automatic fixit to avoid adding superfluous semicolon.
Test plan: ninja check-all
Differential revision: https://reviews.llvm.org/D136399
Added:
Modified:
clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp
index e72ea76114783..60e0f80da2878 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp
@@ -337,10 +337,13 @@ void UseEqualsDefaultCheck::check(const MatchFinder::MatchResult &Result) {
Diag << MemberType;
if (ApplyFix) {
+ SourceLocation UnifiedEnd = utils::lexer::getUnifiedEndLoc(
+ *Body, Result.Context->getSourceManager(),
+ Result.Context->getLangOpts());
// Skipping comments, check for a semicolon after Body->getSourceRange()
Optional<Token> Token = utils::lexer::findNextTokenSkippingComments(
- Body->getSourceRange().getEnd().getLocWithOffset(1),
- Result.Context->getSourceManager(), Result.Context->getLangOpts());
+ UnifiedEnd, Result.Context->getSourceManager(),
+ Result.Context->getLangOpts());
StringRef Replacement =
Token && Token->is(tok::semi) ? "= default" : "= default;";
Diag << FixItHint::CreateReplacement(Body->getSourceRange(), Replacement)
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 68995a9d3f190..d7ae8dfdcf364 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -159,6 +159,7 @@ Changes in existing checks
with empty body is not equivalent to the explicitly defaulted one, variadic constructors
since they cannot be explicitly defaulted. The check also skips copy assignment operators
with nonstandard return types, private/protected default constructors for C++17 or earlier.
+ The automatic fixit has been adjusted to avoid adding superfluous semicolon.
The check is restricted to C++11 or later.
- Change the default behavior of :doc:`readability-avoid-const-params-in-decls
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp
index 6482c3a82241e..7a21ebe439cc1 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp
@@ -91,7 +91,7 @@ class CM {
// Private constructor/destructor.
class Priv {
Priv();
- ~Priv() {};
+ ~Priv() {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
// CHECK-FIXES: ~Priv() = default;
};
@@ -100,14 +100,28 @@ Priv::Priv() {}
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use '= default'
// CHECK-FIXES: Priv::Priv() = default;
+struct SemiColon {
+ SemiColon() {};
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
+ // CHECK-FIXES: SemiColon() = default;{{$}}
+};
+
+struct SemiColonOutOfLine {
+ SemiColonOutOfLine();
+};
+
+SemiColonOutOfLine::SemiColonOutOfLine() {};
+// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: use '= default'
+// CHECK-FIXES: SemiColonOutOfLine::SemiColonOutOfLine() = default;{{$}}
+
// struct.
struct ST {
ST() {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
- // CHECK-FIXES: ST() = default;
+ // CHECK-FIXES: ST() = default;{{$}}
~ST() {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
- // CHECK-FIXES: ST() = default;
+ // CHECK-FIXES: ST() = default;{{$}}
};
// Deleted constructor/destructor.
@@ -200,7 +214,13 @@ struct DC : KW {
DC() : KW() {}
~DC() override {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
- // CHECK-FIXES: ~DC() override = default;
+ // CHECK-FIXES: ~DC() override = default;{{$}}
+};
+
+struct OverrideWithSemiColon : KW {
+ ~OverrideWithSemiColon() override {};
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
+ // CHECK-FIXES: ~OverrideWithSemiColon() override = default;{{$}}
};
struct Comments {
More information about the cfe-commits
mailing list