forked from qt-creator/qt-creator
Clang: Provide example with a lot of tidy warnings
Change-Id: I6d6d2559bb8e2b6c972e88c3af9ce06968e7c959 Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
9
share/qtcreator/cplusplus/examples/examples.pro
Normal file
9
share/qtcreator/cplusplus/examples/examples.pro
Normal file
@@ -0,0 +1,9 @@
|
||||
QT += core
|
||||
|
||||
CONFIG+= c++1z
|
||||
|
||||
TARGET = examples
|
||||
|
||||
SOURCES += tidy_example.cpp
|
||||
|
||||
HEADERS += tidy_example.h
|
273
share/qtcreator/cplusplus/examples/tidy_example.cpp
Normal file
273
share/qtcreator/cplusplus/examples/tidy_example.cpp
Normal file
@@ -0,0 +1,273 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2018 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
// llvm-include-order
|
||||
#include <cassert>
|
||||
#include <numeric>
|
||||
#include <algorithm>
|
||||
#include <cstdlib>
|
||||
#include <vector>
|
||||
|
||||
#include "tidy_example.h"
|
||||
|
||||
#define INCREMENT_TWO(x, y) (x)++; (y)++
|
||||
|
||||
namespace Foo {
|
||||
|
||||
void macro()
|
||||
{
|
||||
bool do_increment = true;
|
||||
int a, b;
|
||||
|
||||
// misc-multiple-statement-macro
|
||||
if (do_increment)
|
||||
INCREMENT_TWO(a, b);
|
||||
}
|
||||
|
||||
} // llvm-namespace-comment
|
||||
|
||||
// misc-forward-declaration-namespace
|
||||
namespace na { struct A; }
|
||||
namespace nb { struct A {}; }
|
||||
nb::A a;
|
||||
|
||||
// cppcoreguidelines-special-member-functions
|
||||
class Base
|
||||
{
|
||||
public:
|
||||
Base();
|
||||
|
||||
// google-explicit-constructor
|
||||
Base(int arg);
|
||||
virtual ~Base();
|
||||
Base(const Base &) = default;
|
||||
Base(Base &&) = default;
|
||||
|
||||
// cppcoreguidelines-c-copy-assignment-signature
|
||||
// misc-noexcept-move-constructor
|
||||
// misc-unconventional-assign-operator
|
||||
// misc-unused-parameters
|
||||
Base operator=(Base &¶m) {}
|
||||
virtual int function()
|
||||
{
|
||||
// modernize-use-nullptr
|
||||
int *a = 0;
|
||||
return 0;
|
||||
}
|
||||
protected:
|
||||
void anotherFunctions(bool flag);
|
||||
public:
|
||||
// cppcoreguidelines-pro-type-member-init
|
||||
int value;
|
||||
};
|
||||
|
||||
// cert-err58-cpp
|
||||
static Base base;
|
||||
|
||||
// modernize-redundant-void-arg
|
||||
double getDouble(void)
|
||||
{
|
||||
return 10.5;
|
||||
}
|
||||
|
||||
void bad_malloc(char *str)
|
||||
{
|
||||
// modernize-use-auto
|
||||
// cppcoreguidelines-pro-type-cstyle-cast
|
||||
// google-readability-casting
|
||||
// cppcoreguidelines-no-malloc
|
||||
// cppcoreguidelines-pro-bounds-pointer-arithmetic
|
||||
char *c = (char*) malloc(strlen(str + 1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void foo(T&& t)
|
||||
{
|
||||
// misc-move-forwarding-reference
|
||||
bar(std::move(t));
|
||||
}
|
||||
|
||||
void afterMove(Base &&base)
|
||||
{
|
||||
Base moved(std::move(base));
|
||||
|
||||
// misc-use-after-move
|
||||
base.value;
|
||||
}
|
||||
|
||||
// google-runtime-references
|
||||
void reference(Base &base)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
class Derived : public Base {
|
||||
public:
|
||||
// modernize-use-equals-default
|
||||
Derived() {}
|
||||
|
||||
// readability-named-parameter
|
||||
Derived(const Derived &) {}
|
||||
|
||||
// modernize-use-override
|
||||
int function()
|
||||
{
|
||||
int a = 0;
|
||||
bool *p = nullptr;
|
||||
// misc-bool-pointer-implicit-conversion, readability-implicit-bool-cast
|
||||
if (p) {
|
||||
}
|
||||
auto b = {0.5f, 0.5f, 0.5f, 0.5f};
|
||||
|
||||
// misc-fold-init-type
|
||||
std::accumulate(std::begin(b), std::end(b), 0);
|
||||
|
||||
// google-readability-casting, misc-incorrect-roundings
|
||||
auto c = (int)(getDouble() + 0.5);
|
||||
|
||||
// misc-string-constructor
|
||||
std::string str('x', 50);
|
||||
|
||||
int i[5] = {1, 2, 3, 4, 5};
|
||||
// cppcoreguidelines-pro-bounds-array-to-pointer-decay
|
||||
int *ip = i;
|
||||
|
||||
// cert-flp30-c
|
||||
for (float a = .0; a != 5.; a += .1) {
|
||||
// cert-msc30-c, cert-msc50-cpp
|
||||
std::rand();
|
||||
}
|
||||
|
||||
// misc-sizeof-container
|
||||
const Base constVal = sizeof(str);
|
||||
|
||||
// cppcoreguidelines-pro-type-const-cast
|
||||
auto val = const_cast<Base &>(constVal);
|
||||
|
||||
// readability-redundant-string-init
|
||||
std::string str2 = "";
|
||||
|
||||
// misc-string-compare
|
||||
if (str.compare(str2)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// cppcoreguidelines-pro-type-reinterpret-cast
|
||||
return a + c + reinterpret_cast<int>(&val);
|
||||
}
|
||||
};
|
||||
|
||||
union Union
|
||||
{
|
||||
int intVal;
|
||||
double doubleVal;
|
||||
};
|
||||
|
||||
class Derived2 : public Base
|
||||
{
|
||||
public:
|
||||
// misc-virtual-near-miss
|
||||
virtual int functiom()
|
||||
{
|
||||
// cert-env33-c
|
||||
std::system("echo ");
|
||||
// cert-err52-cpp
|
||||
setjmp(nullptr);
|
||||
}
|
||||
|
||||
// google-default-arguments
|
||||
virtual bool check(bool enable = true);
|
||||
};
|
||||
|
||||
// performance-unnecessary-value-param
|
||||
void use(Base b)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void FancyFunction()
|
||||
{
|
||||
// cppcoreguidelines-pro-type-vararg
|
||||
// cppcoreguidelines-pro-bounds-array-to-pointer-decay
|
||||
// misc-lambda-function-name
|
||||
[] { printf("Called from %s\n", __func__); }();
|
||||
}
|
||||
|
||||
// modernize-use-using
|
||||
typedef int *int_ptr;
|
||||
|
||||
// readability-avoid-const-params-in-decls, misc-misplaced-const
|
||||
void f(const int_ptr ptr);
|
||||
|
||||
void f(int *X, int Y)
|
||||
{
|
||||
// readability-misplaced-array-index
|
||||
Y[X] = 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
// cppcoreguidelines-pro-type-member-init
|
||||
Union u;
|
||||
|
||||
// cppcoreguidelines-pro-type-union-access
|
||||
u.doubleVal = 10.;
|
||||
|
||||
// readability-braces-around-statements, readability-simplify-boolean-expr
|
||||
if (false)
|
||||
return 1;
|
||||
// readability-else-after-return
|
||||
else {
|
||||
// google-readability-todo
|
||||
// TODO: implement something
|
||||
}
|
||||
|
||||
int arr[] = {1,2,3};
|
||||
|
||||
// modernize-loop-convert
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
// cppcoreguidelines-pro-bounds-constant-array-index
|
||||
arr[i];
|
||||
}
|
||||
|
||||
std::vector<std::pair<int, int>> w;
|
||||
|
||||
// modernize-use-emplace
|
||||
w.push_back(std::pair<int, int>(21, 37));
|
||||
|
||||
bool val = false;
|
||||
if (val)
|
||||
if (val)
|
||||
Foo::macro();
|
||||
// readability-misleading-indentation
|
||||
else
|
||||
Foo::macro();
|
||||
|
||||
Derived derived;
|
||||
|
||||
// cppcoreguidelines-slicing
|
||||
use(derived);
|
||||
return 0;
|
||||
}
|
39
share/qtcreator/cplusplus/examples/tidy_example.h
Normal file
39
share/qtcreator/cplusplus/examples/tidy_example.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2018 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
// llvm-header-guard
|
||||
|
||||
#include <string>
|
||||
|
||||
// google-build-using-namespace, google-global-names-in-headers
|
||||
using namespace std;
|
||||
|
||||
// cert-dcl59-cpp, google-build-namespaces
|
||||
namespace {
|
||||
class HeaderClass {
|
||||
|
||||
};
|
||||
|
||||
} // llvm-namespace-comment
|
Reference in New Issue
Block a user