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 { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits