================ @@ -0,0 +1,89 @@ +//===----------------------------------------------------------------------===// +// +// 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 "RedundantConstCheck.h" +#include "../utils/LexerUtils.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" +#include "clang/ASTMatchers/ASTMatchers.h" +#include <optional> + +using namespace clang::ast_matchers; + +namespace clang::tidy::readability { + +static std::optional<Token> findConstToRemove(const VarDecl *VD, + const SourceManager &SM, + const ASTContext &Context) { + const SourceLocation NameBeginLoc = VD->getQualifier() + ? VD->getQualifierLoc().getBeginLoc() + : VD->getLocation(); + + const bool IsPointer = + VD->getType()->isPointerType() || VD->getType()->isMemberPointerType(); + + // If the 'findPreviousTokenKind' below fails, + // we know it is a pointer but cannot find the start token. + // This can happen when either type is aliased or `auto` was used. + // e.g: constexpr const auto const str = "hello"; + // In cases like this, Clang already warns about the use of const + // as duplicate, so we can safely ignore these cases. + const SourceLocation ConstSearchStartLoc = + !IsPointer ? VD->getBeginLoc() + : utils::lexer::findPreviousTokenKind( + NameBeginLoc, SM, Context.getLangOpts(), tok::star); + + if (ConstSearchStartLoc.isInvalid()) + return std::nullopt; + + const SourceLocation PrevSemi = utils::lexer::findPreviousAnyTokenKind( + NameBeginLoc, SM, Context.getLangOpts(), tok::semi); + + // Verify that there is no semicolon between ConstSearchStartLoc and + // NameBeginLoc. This is to limit search area for our variable decl only + if (!PrevSemi.isInvalid() && ---------------- vbvictor wrote:
We have .isValid() or Valid() to avoid double negation https://github.com/llvm/llvm-project/pull/189733 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
