[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
This commit is contained in:
parent
d3f8e0bf8d
commit
6c07bda7a7
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -91,7 +91,7 @@ public:
|
|||
// 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 {
|
||||
|
|
Loading…
Reference in New Issue