
Summary: This checker is able to detect missing comma in an array of string literals. ``` const char* A[] = { "abc", "def" // missing comma (no compiler warnings) "ghi", }; ``` The ratio of false-positive is reduced by restricting the size of the array considered and the ratio of missing comma. To validate the quantity of false positive, the checker was tried over LLVM and chromium code and detected these cases: [[ http://reviews.llvm.org/D18454 | http://reviews.llvm.org/D18454 ]] [[https://codereview.chromium.org/1807753002/ | https://codereview.chromium.org/1807753002/]] [[https://codereview.chromium.org/1826193002/ | https://codereview.chromium.org/1826193002/]] [[https://codereview.chromium.org/1805713002/ | https://codereview.chromium.org/1805713002/]] Reviewers: alexfh Subscribers: LegalizeAdulthood, szdominik, xazax.hun, cfe-commits Differential Revision: http://reviews.llvm.org/D18457 llvm-svn: 265033
126 lines
5.1 KiB
C++
126 lines
5.1 KiB
C++
//===--- MiscTidyModule.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 "../ClangTidy.h"
|
|
#include "../ClangTidyModule.h"
|
|
#include "../ClangTidyModuleRegistry.h"
|
|
#include "ArgumentCommentCheck.h"
|
|
#include "AssertSideEffectCheck.h"
|
|
#include "AssignOperatorSignatureCheck.h"
|
|
#include "BoolPointerImplicitConversionCheck.h"
|
|
#include "DanglingHandleCheck.h"
|
|
#include "DefinitionsInHeadersCheck.h"
|
|
#include "ForwardDeclarationNamespaceCheck.h"
|
|
#include "InaccurateEraseCheck.h"
|
|
#include "IncorrectRoundings.h"
|
|
#include "InefficientAlgorithmCheck.h"
|
|
#include "MacroParenthesesCheck.h"
|
|
#include "MacroRepeatedSideEffectsCheck.h"
|
|
#include "MisplacedWideningCastCheck.h"
|
|
#include "MoveConstantArgumentCheck.h"
|
|
#include "MoveConstructorInitCheck.h"
|
|
#include "NewDeleteOverloadsCheck.h"
|
|
#include "NoexceptMoveConstructorCheck.h"
|
|
#include "NonCopyableObjects.h"
|
|
#include "SizeofContainerCheck.h"
|
|
#include "StaticAssertCheck.h"
|
|
#include "StringIntegerAssignmentCheck.h"
|
|
#include "SuspiciousMissingCommaCheck.h"
|
|
#include "SuspiciousSemicolonCheck.h"
|
|
#include "SwappedArgumentsCheck.h"
|
|
#include "ThrowByValueCatchByReferenceCheck.h"
|
|
#include "UndelegatedConstructor.h"
|
|
#include "UniqueptrResetReleaseCheck.h"
|
|
#include "UnusedAliasDeclsCheck.h"
|
|
#include "UnusedParametersCheck.h"
|
|
#include "UnusedRAIICheck.h"
|
|
#include "VirtualNearMissCheck.h"
|
|
|
|
namespace clang {
|
|
namespace tidy {
|
|
namespace misc {
|
|
|
|
class MiscModule : public ClangTidyModule {
|
|
public:
|
|
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
|
|
CheckFactories.registerCheck<ArgumentCommentCheck>("misc-argument-comment");
|
|
CheckFactories.registerCheck<AssertSideEffectCheck>(
|
|
"misc-assert-side-effect");
|
|
CheckFactories.registerCheck<AssignOperatorSignatureCheck>(
|
|
"misc-assign-operator-signature");
|
|
CheckFactories.registerCheck<BoolPointerImplicitConversionCheck>(
|
|
"misc-bool-pointer-implicit-conversion");
|
|
CheckFactories.registerCheck<DanglingHandleCheck>(
|
|
"misc-dangling-handle");
|
|
CheckFactories.registerCheck<DefinitionsInHeadersCheck>(
|
|
"misc-definitions-in-headers");
|
|
CheckFactories.registerCheck<ForwardDeclarationNamespaceCheck>(
|
|
"misc-forward-declaration-namespace");
|
|
CheckFactories.registerCheck<InaccurateEraseCheck>(
|
|
"misc-inaccurate-erase");
|
|
CheckFactories.registerCheck<IncorrectRoundings>(
|
|
"misc-incorrect-roundings");
|
|
CheckFactories.registerCheck<InefficientAlgorithmCheck>(
|
|
"misc-inefficient-algorithm");
|
|
CheckFactories.registerCheck<MacroParenthesesCheck>(
|
|
"misc-macro-parentheses");
|
|
CheckFactories.registerCheck<MacroRepeatedSideEffectsCheck>(
|
|
"misc-macro-repeated-side-effects");
|
|
CheckFactories.registerCheck<MisplacedWideningCastCheck>(
|
|
"misc-misplaced-widening-cast");
|
|
CheckFactories.registerCheck<MoveConstantArgumentCheck>(
|
|
"misc-move-const-arg");
|
|
CheckFactories.registerCheck<MoveConstructorInitCheck>(
|
|
"misc-move-constructor-init");
|
|
CheckFactories.registerCheck<NewDeleteOverloadsCheck>(
|
|
"misc-new-delete-overloads");
|
|
CheckFactories.registerCheck<NoexceptMoveConstructorCheck>(
|
|
"misc-noexcept-move-constructor");
|
|
CheckFactories.registerCheck<NonCopyableObjectsCheck>(
|
|
"misc-non-copyable-objects");
|
|
CheckFactories.registerCheck<SizeofContainerCheck>("misc-sizeof-container");
|
|
CheckFactories.registerCheck<StaticAssertCheck>(
|
|
"misc-static-assert");
|
|
CheckFactories.registerCheck<StringIntegerAssignmentCheck>(
|
|
"misc-string-integer-assignment");
|
|
CheckFactories.registerCheck<SuspiciousMissingCommaCheck>(
|
|
"misc-suspicious-missing-comma");
|
|
CheckFactories.registerCheck<SuspiciousSemicolonCheck>(
|
|
"misc-suspicious-semicolon");
|
|
CheckFactories.registerCheck<SwappedArgumentsCheck>(
|
|
"misc-swapped-arguments");
|
|
CheckFactories.registerCheck<ThrowByValueCatchByReferenceCheck>(
|
|
"misc-throw-by-value-catch-by-reference");
|
|
CheckFactories.registerCheck<UndelegatedConstructorCheck>(
|
|
"misc-undelegated-constructor");
|
|
CheckFactories.registerCheck<UniqueptrResetReleaseCheck>(
|
|
"misc-uniqueptr-reset-release");
|
|
CheckFactories.registerCheck<UnusedAliasDeclsCheck>(
|
|
"misc-unused-alias-decls");
|
|
CheckFactories.registerCheck<UnusedParametersCheck>(
|
|
"misc-unused-parameters");
|
|
CheckFactories.registerCheck<UnusedRAIICheck>("misc-unused-raii");
|
|
CheckFactories.registerCheck<VirtualNearMissCheck>(
|
|
"misc-virtual-near-miss");
|
|
}
|
|
};
|
|
|
|
} // namespace misc
|
|
|
|
// Register the MiscTidyModule using this statically initialized variable.
|
|
static ClangTidyModuleRegistry::Add<misc::MiscModule>
|
|
X("misc-module", "Adds miscellaneous lint checks.");
|
|
|
|
// This anchor is used to force the linker to link in the generated object file
|
|
// and thus register the MiscModule.
|
|
volatile int MiscModuleAnchorSource = 0;
|
|
|
|
} // namespace tidy
|
|
} // namespace clang
|