[clang-tools-extra] r264856 - [clang-tidy] readability check for const params in declarations
Nico Weber via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 30 05:19:23 PDT 2016
This doesn't build on Windows:
http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/11018/steps/build%20stage%201/logs/stdio
d:\buildslave\clang-x64-ninja-win7\llvm\tools\clang\tools\extra\clang-tidy\readability\../ClangTidyModule.h(61)
: error C2660:
'clang::tidy::readability::AvoidConstParamsInDecls::AvoidConstParamsInDecls'
: function does not take 2 arguments
D:\buildslave\clang-x64-ninja-win7\llvm\tools\clang\tools\extra\clang-tidy\readability\ReadabilityTidyModule.cpp(37)
: see reference to function template instantiation 'void
clang::tidy::ClangTidyCheckFactories::registerCheck<clang::tidy::readability::AvoidConstParamsInDecls>(llvm::StringRef)'
being compiled
Can you take a look?
On Wed, Mar 30, 2016 at 4:31 AM, Alexander Kornienko via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: alexfh
> Date: Wed Mar 30 06:31:33 2016
> New Revision: 264856
>
> URL: http://llvm.org/viewvc/llvm-project?rev=264856&view=rev
> Log:
> [clang-tidy] readability check for const params in declarations
>
> Summary: Adds a clang-tidy warning for top-level consts in function
> declarations.
>
> Reviewers: hokein, sbenza, alexfh
>
> Subscribers: cfe-commits
>
> Patch by Matt Kulukundis!
>
> Differential Revision: http://reviews.llvm.org/D18408
>
> Added:
>
> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp
>
> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h
>
> clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst
>
> clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp
> Modified:
> clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt
>
> clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp
> clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst
>
> Added:
> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp?rev=264856&view=auto
>
> ==============================================================================
> ---
> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp
> (added)
> +++
> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.cpp
> Wed Mar 30 06:31:33 2016
> @@ -0,0 +1,71 @@
> +//===--- AvoidConstParamsInDecls.cpp -
> clang-tidy--------------------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#include "AvoidConstParamsInDecls.h"
> +#include "clang/ASTMatchers/ASTMatchFinder.h"
> +#include "clang/ASTMatchers/ASTMatchers.h"
> +#include "clang/Lex/Lexer.h"
> +
> +using namespace clang::ast_matchers;
> +
> +namespace clang {
> +namespace tidy {
> +namespace readability {
> +namespace {
> +
> +SourceRange getTypeRange(const ParmVarDecl &Param) {
> + if (Param.getIdentifier() != nullptr)
> + return SourceRange(Param.getLocStart(),
> + Param.getLocEnd().getLocWithOffset(-1));
> + return Param.getSourceRange();
> +}
> +
> +} // namespace
> +
> +
> +void AvoidConstParamsInDecls::registerMatchers(MatchFinder *Finder) {
> + const auto ConstParamDecl =
> + parmVarDecl(hasType(qualType(isConstQualified()))).bind("param");
> + Finder->addMatcher(functionDecl(unless(isDefinition()),
> + has(typeLoc(forEach(ConstParamDecl))))
> + .bind("func"),
> + this);
> +}
> +
> +void AvoidConstParamsInDecls::check(const MatchFinder::MatchResult
> &Result) {
> + const auto *Func = Result.Nodes.getNodeAs<FunctionDecl>("func");
> + const auto *Param = Result.Nodes.getNodeAs<ParmVarDecl>("param");
> +
> + QualType Type = Param->getType();
> + if (!Type.isLocalConstQualified())
> + return;
> +
> + Type.removeLocalConst();
> +
> + auto Diag = diag(Param->getLocStart(),
> + "parameter %0 is const-qualified in the function "
> + "declaration; const-qualification of parameters only
> has an "
> + "effect in function definitions");
> + if (Param->getName().empty()) {
> + for (unsigned int i = 0; i < Func->getNumParams(); ++i) {
> + if (Param == Func->getParamDecl(i)) {
> + Diag << (i + 1);
> + break;
> + }
> + }
> + } else {
> + Diag << Param;
> + }
> + Diag << FixItHint::CreateReplacement(getTypeRange(*Param),
> + Type.getAsString());
> +}
> +
> +} // namespace readability
> +} // namespace tidy
> +} // namespace clang
>
> Added:
> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h?rev=264856&view=auto
>
> ==============================================================================
> ---
> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h
> (added)
> +++
> clang-tools-extra/trunk/clang-tidy/readability/AvoidConstParamsInDecls.h
> Wed Mar 30 06:31:33 2016
> @@ -0,0 +1,33 @@
> +//===--- AvoidConstParamsInDecls.h -
> clang-tidy----------------------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef
> LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_AVOID_CONST_PARAMS_IN_DECLS_H
> +#define
> LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_AVOID_CONST_PARAMS_IN_DECLS_H
> +
> +#include "../ClangTidy.h"
> +
> +namespace clang {
> +namespace tidy {
> +namespace readability {
> +
> +// Detect function declarations that have const value parameters and
> discourage
> +// them.
> +class AvoidConstParamsInDecls : public ClangTidyCheck {
> +public:
> + using ClangTidyCheck::ClangTidyCheck;
> +
> + void registerMatchers(ast_matchers::MatchFinder *Finder) override;
> + void check(const ast_matchers::MatchFinder::MatchResult &Result)
> override;
> +};
> +
> +} // namespace readability
> +} // namespace tidy
> +} // namespace clang
> +
> +#endif //
> LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_AVOID_CONST_PARAMS_IN_DECLS_H
>
> Modified: clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt?rev=264856&r1=264855&r2=264856&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt
> (original)
> +++ clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt Wed Mar
> 30 06:31:33 2016
> @@ -1,6 +1,7 @@
> set(LLVM_LINK_COMPONENTS support)
>
> add_clang_library(clangTidyReadabilityModule
> + AvoidConstParamsInDecls.cpp
> BracesAroundStatementsCheck.cpp
> ContainerSizeEmptyCheck.cpp
> ElseAfterReturnCheck.cpp
>
> Modified:
> clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp?rev=264856&r1=264855&r2=264856&view=diff
>
> ==============================================================================
> ---
> clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp
> (original)
> +++
> clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp
> Wed Mar 30 06:31:33 2016
> @@ -10,6 +10,7 @@
> #include "../ClangTidy.h"
> #include "../ClangTidyModule.h"
> #include "../ClangTidyModuleRegistry.h"
> +#include "AvoidConstParamsInDecls.h"
> #include "BracesAroundStatementsCheck.h"
> #include "ContainerSizeEmptyCheck.h"
> #include "ElseAfterReturnCheck.h"
> @@ -32,6 +33,8 @@ namespace readability {
> class ReadabilityModule : public ClangTidyModule {
> public:
> void addCheckFactories(ClangTidyCheckFactories &CheckFactories)
> override {
> + CheckFactories.registerCheck<AvoidConstParamsInDecls>(
> + "readability-avoid-const-params-in-decls");
> CheckFactories.registerCheck<BracesAroundStatementsCheck>(
> "readability-braces-around-statements");
> CheckFactories.registerCheck<ContainerSizeEmptyCheck>(
>
> Modified: clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst?rev=264856&r1=264855&r2=264856&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst (original)
> +++ clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst Wed Mar 30
> 06:31:33 2016
> @@ -90,8 +90,9 @@ Clang-Tidy Checks
> performance-faster-string-find
> performance-for-range-copy
> performance-implicit-cast-in-loop
> - performance-unnecessary-value-param
> performance-unnecessary-copy-initialization
> + performance-unnecessary-value-param
> + readability-avoid-const-params-in-decls
> readability-braces-around-statements
> readability-container-size-empty
> readability-else-after-return
>
> Added:
> clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst?rev=264856&view=auto
>
> ==============================================================================
> ---
> clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst
> (added)
> +++
> clang-tools-extra/trunk/docs/clang-tidy/checks/readability-avoid-const-params-in-decls.rst
> Wed Mar 30 06:31:33 2016
> @@ -0,0 +1,17 @@
> +.. title:: clang-tidy - readability-avoid-const-params-in-decls
> +
> +readability-avoid-const-params-in-decls
> +=======================================
> +
> +Checks whether a function declaration has parameters that are top level
> const.
> +
> +`const` values in declarations do not affect the signature of a function,
> so
> +they should not be put there. For example:
> +
> +Examples:
> +
> +.. code:: c++
> +
> + void f(const string); // Bad: const is top level.
> + void f(const string&); // Good: const is not top level.
> +
>
> Added:
> clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp?rev=264856&view=auto
>
> ==============================================================================
> ---
> clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp
> (added)
> +++
> clang-tools-extra/trunk/test/clang-tidy/readability-avoid-const-params-in-decls.cpp
> Wed Mar 30 06:31:33 2016
> @@ -0,0 +1,78 @@
> +// RUN: %check_clang_tidy %s readability-avoid-const-params-in-decls %t
> +
> +using alias_type = bool;
> +using alias_const_type = const bool;
> +
> +
> +void F1(const int i);
> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is
> const-qualified in the function declaration; const-qualification of
> parameters only has an effect in function definitions
> [readability-avoid-const-params-in-decls]
> +// CHECK-FIXES: void F1(int i);
> +
> +void F2(const int *const i);
> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is
> const-qualified
> +// CHECK-FIXES: void F2(const int * i);
> +
> +void F3(int const i);
> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is
> const-qualified
> +// CHECK-FIXES: void F3(int i);
> +
> +void F4(alias_type const i);
> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is
> const-qualified
> +// CHECK-FIXES: void F4(alias_type i);
> +
> +void F5(const int);
> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 1 is const-qualified
> +// CHECK-FIXES: void F5(int);
> +
> +void F6(const int *const);
> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 1 is const-qualified
> +// BUG(b/27584482): void F6(const int *); should be produced
> +
> +void F7(int, const int);
> +// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: parameter 2 is
> const-qualified
> +// CHECK-FIXES: void F7(int, int);
> +
> +void F8(const int, const int);
> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 1 is const-qualified
> +// CHECK-MESSAGES: :[[@LINE-2]]:20: warning: parameter 2 is
> const-qualified
> +// CHECK-FIXES: void F8(int, int);
> +
> +void F9(const int long_name);
> +// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'long_name'
> +// CHECK-FIXES: void F9(int long_name);
> +
> +void F10(const int *const *const long_name);
> +// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: parameter 'long_name'
> +// CHECK-FIXES: void F10(const int *const * long_name);
> +
> +
> +struct Foo {
> + Foo(const int i);
> + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: parameter 'i'
> + // CHECK-FIXES: Foo(int i);
> +
> + void operator()(const int i);
> + // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: parameter 'i'
> + // CHECK-FIXES: void operator()(int i);
> +};
> +
> +// Do not match on definitions
> +void NF1(const int i) {}
> +void NF2(const int *const i) {}
> +void NF3(int const i) {}
> +void NF4(alias_type const i) {}
> +void NF5(const int) {}
> +void NF6(const int *const) {}
> +void NF7(int, const int) {}
> +void NF8(const int, const int) {}
> +
> +// Do not match on other stuff
> +void NF(const alias_type& i);
> +void NF(const int &i);
> +void NF(const int *i);
> +void NF(alias_const_type i);
> +void NF(const alias_type&);
> +void NF(const int&);
> +void NF(const int*);
> +void NF(const int* const*);
> +void NF(alias_const_type);
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160330/5a0108f9/attachment-0001.html>
More information about the cfe-commits
mailing list