mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-01 19:30:13 -06:00
clang-tidy module: add check for boolean parameters
Co-Authored-by: Kyle Edwards <kyle.edwards@kitware.com>
This commit is contained in:
@@ -14,6 +14,8 @@ find_package(Clang REQUIRED)
|
||||
add_library(cmake-clang-tidy-module MODULE
|
||||
Module.cxx
|
||||
|
||||
UseBespokeEnumClassCheck.cxx
|
||||
UseBespokeEnumClassCheck.h
|
||||
UseCmstrlenCheck.cxx
|
||||
UseCmstrlenCheck.h
|
||||
UseCmsysFstreamCheck.cxx
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <clang-tidy/ClangTidyModule.h>
|
||||
#include <clang-tidy/ClangTidyModuleRegistry.h>
|
||||
|
||||
#include "UseBespokeEnumClassCheck.h"
|
||||
#include "UseCmstrlenCheck.h"
|
||||
#include "UseCmsysFstreamCheck.h"
|
||||
|
||||
@@ -17,6 +18,8 @@ public:
|
||||
CheckFactories.registerCheck<UseCmstrlenCheck>("cmake-use-cmstrlen");
|
||||
CheckFactories.registerCheck<UseCmsysFstreamCheck>(
|
||||
"cmake-use-cmsys-fstream");
|
||||
CheckFactories.registerCheck<UseBespokeEnumClassCheck>(
|
||||
"cmake-use-bespoke-enum-class");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -12,3 +12,4 @@ endfunction()
|
||||
|
||||
add_run_clang_tidy_test(cmake-use-cmstrlen)
|
||||
add_run_clang_tidy_test(cmake-use-cmsys-fstream)
|
||||
add_run_clang_tidy_test(cmake-use-bespoke-enum-class)
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
cmake-use-bespoke-enum-class.cxx:3:16: warning: use a bespoke enum class instead of booleans as parameters [cmake-use-bespoke-enum-class]
|
||||
bool function1(bool i)
|
||||
^
|
||||
cmake-use-bespoke-enum-class.cxx:8:15: warning: use a bespoke enum class instead of booleans as parameters [cmake-use-bespoke-enum-class]
|
||||
int function2(bool i)
|
||||
^
|
||||
cmake-use-bespoke-enum-class.cxx:13:16: warning: use a bespoke enum class instead of booleans as parameters [cmake-use-bespoke-enum-class]
|
||||
char function3(bool i)
|
||||
^
|
||||
cmake-use-bespoke-enum-class.cxx:18:16: warning: use a bespoke enum class instead of booleans as parameters [cmake-use-bespoke-enum-class]
|
||||
void function4(bool i)
|
||||
^
|
||||
cmake-use-bespoke-enum-class.cxx:22:17: warning: use a bespoke enum class instead of booleans as parameters [cmake-use-bespoke-enum-class]
|
||||
float function5(bool i)
|
||||
^
|
||||
cmake-use-bespoke-enum-class.cxx:27:18: warning: use a bespoke enum class instead of booleans as parameters [cmake-use-bespoke-enum-class]
|
||||
double function6(bool i)
|
||||
^
|
||||
@@ -0,0 +1,63 @@
|
||||
// Correction needed
|
||||
|
||||
bool function1(bool i)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
int function2(bool i)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
char function3(bool i)
|
||||
{
|
||||
return 'a';
|
||||
}
|
||||
|
||||
void function4(bool i)
|
||||
{
|
||||
}
|
||||
|
||||
float function5(bool i)
|
||||
{
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
double function6(bool i)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// No correction needed
|
||||
bool global;
|
||||
|
||||
bool function7(int i)
|
||||
{
|
||||
bool l;
|
||||
return true;
|
||||
}
|
||||
|
||||
int function8(int i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
char function9(char i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
void function10()
|
||||
{
|
||||
}
|
||||
|
||||
float function11(float i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
double function12(double i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
35
Utilities/ClangTidyModule/UseBespokeEnumClassCheck.cxx
Normal file
35
Utilities/ClangTidyModule/UseBespokeEnumClassCheck.cxx
Normal file
@@ -0,0 +1,35 @@
|
||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#include "UseBespokeEnumClassCheck.h"
|
||||
|
||||
#include <clang/AST/Type.h>
|
||||
#include <clang/ASTMatchers/ASTMatchFinder.h>
|
||||
|
||||
namespace clang {
|
||||
namespace tidy {
|
||||
namespace cmake {
|
||||
using namespace ast_matchers;
|
||||
|
||||
UseBespokeEnumClassCheck::UseBespokeEnumClassCheck(StringRef Name,
|
||||
ClangTidyContext* Context)
|
||||
: ClangTidyCheck(Name, Context)
|
||||
{
|
||||
}
|
||||
|
||||
void UseBespokeEnumClassCheck::registerMatchers(MatchFinder* Finder)
|
||||
{
|
||||
Finder->addMatcher(
|
||||
parmVarDecl(
|
||||
hasTypeLoc(typeLoc(loc(qualType(asString("_Bool")))).bind("type"))),
|
||||
this);
|
||||
}
|
||||
|
||||
void UseBespokeEnumClassCheck::check(const MatchFinder::MatchResult& Result)
|
||||
{
|
||||
const TypeLoc* Node = Result.Nodes.getNodeAs<TypeLoc>("type");
|
||||
this->diag(Node->getBeginLoc(),
|
||||
"use a bespoke enum class instead of booleans as parameters");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
21
Utilities/ClangTidyModule/UseBespokeEnumClassCheck.h
Normal file
21
Utilities/ClangTidyModule/UseBespokeEnumClassCheck.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#pragma once
|
||||
|
||||
#include <clang-tidy/ClangTidyCheck.h>
|
||||
#include <clang/ASTMatchers/ASTMatchFinder.h>
|
||||
|
||||
namespace clang {
|
||||
namespace tidy {
|
||||
namespace cmake {
|
||||
class UseBespokeEnumClassCheck : public ClangTidyCheck
|
||||
{
|
||||
public:
|
||||
UseBespokeEnumClassCheck(StringRef Name, ClangTidyContext* Context);
|
||||
void registerMatchers(ast_matchers::MatchFinder* Finder) override;
|
||||
|
||||
void check(const ast_matchers::MatchFinder::MatchResult& Result) override;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user