aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clang-tidy/readability/ReadabilityTidyModule.cpp
AgeCommit message (Collapse)AuthorFilesLines
2025-07-13[clang-tidy] Add new check: ↵Victor Chernyakin1-0/+3
`readability-use-concise-preprocessor-directives` (#146830) Closes #132561. This is a check that rewrites `#if`s and `#elif`s like so: ```cpp #if defined(MEOW) // -> #ifdef MEOW #if !defined(MEOW) // -> #ifndef MEOW ``` And, since C23 and C++23: ```cpp #elif defined(MEOW) // -> #elifdef MEOW #elif !defined(MEOW) // -> #elifndef MEOW ```
2025-06-23Revert "[clang-tidy] Add new check `readability-use-numeric-limits`" (#145355)Baranov Victor1-3/+0
Reverts llvm/llvm-project#127430 due to stable asan buildbot failures: https://lab.llvm.org/buildbot/#/builders/169
2025-06-21[clang-tidy] Add new check `readability-use-numeric-limits` (#127430)Katherine Whitlock1-0/+3
The adds a check that replaces specific numeric literals like `32767` with the equivalent call to `std::numeric_limits` (such as `std::numeric_limits<int16_t>::max())`. Partially addresses #34434, but notably does not handle cases listed in the title post such as `~0` and `-1`.
2025-06-10[clang-tidy][NFC] fix 'misc-use-internal-linkage' check warnings (#143482)Baranov Victor1-0/+1
Run misc-use-internal-linkage check over clang-tidy code. Also fixed a couple of other clang-tidy warnings. Apart from issues in header files, all '.cpp' in `clang-tools-extra/clang-tidy` must be clang-tidy clear now.
2025-03-11[clang-tidy] Add bugprone-smartptr-reset-ambiguous-call check (#121291)Baranov Victor1-0/+3
Add new clang-tidy check that finds potentially erroneous calls to ``reset()`` method on smart pointers when the pointee type also has a ``reset()`` method. It's easy to make typo and delete object because the difference between ``.`` and ``->`` is really small. Sometimes IDE's autocomplete will change ``->`` to ``.`` automatically. For example, developer wrote ``ptr->res`` but after pressing _Tab_ it became ``ptr.reset()``. Fixes #120908
2024-04-25[clang-tidy] Add clang-tidy check readability-math-missing-parentheses (#84481)Bhuminjay Soni1-0/+3
This commit closes #80850 where author suggests adding a readability check to detect missing parentheses around mathematical expressions when operators of different priorities are used. Signed-off-by: 11happy <soni5happy@gmail.com>
2024-04-01[clang-tidy] add new check readability-enum-initial-value (#86129)Congcong Cai1-0/+3
Fixes: #85243.
2024-02-06Add clang-tidy check to suggest replacement of conditional statement with ↵Bhuminjay Soni1-0/+3
std::min/std::max (#77816) This pull request fixes #64914 where author suggests adding a readability check to propose the replacement of conditional statements with std::min/std::max for improved code readability. Additionally, reference is made to PyLint's similar checks: [consider-using-min-builtin](https://pylint.pycqa.org/en/latest/user_guide/messages/refactor/consider-using-min-builtin.html) and [consider-using-max-builtin](https://pylint.pycqa.org/en/latest/user_guide/messages/refactor/consider-using-max-builtin.html)
2024-01-20[clang-tidy] Added new check to detect redundant inline keyword (#73069)Félix-Antoine Constantin1-0/+3
This checks find usages of the inline keywork where it is already implicitly defined by the compiler and suggests it's removal. Fixes #72397
2024-01-20[clang-tidy] Add readability-redundant-casting check (#70595)Piotr Zegar1-0/+3
Detects explicit type casting operations that involve the same source and destination types, and subsequently recommend their removal. Covers a range of explicit casting operations. Its primary objective is to enhance code readability and maintainability by eliminating unnecessary type casting. Closes #67534
2024-01-15[clang-tidy]Add new check readability-avoid-nested-conditional-operator (#78022)Congcong Cai1-0/+3
Finds nested conditional operator. Nested conditional operators lead code hard to understand, so they should be splited as several statement and stored in temporary varibale.
2024-01-06[clang-tidy] Add check `readability-avoid-return-with-void-value` (#76249)Danny Mösch1-0/+3
2023-07-29[clang-tidy] Add readability-reference-to-constructed-temporary checkPiotr Zegar1-0/+3
Detects code where a temporary object is directly constructed by calling a constructor or using an initializer list and immediately assigned to a reference variable. Reviewed By: xgupta Differential Revision: https://reviews.llvm.org/D146368
2023-03-31[clang-tidy] Add readability-operators-representation checkPiotr Zegar1-0/+3
Check helps enforce consistent token representation for binary, unary and overloaded operators in C++ code. The check supports both traditional and alternative representations of operators. Reviewed By: carlosgalvezp Differential Revision: https://reviews.llvm.org/D144522
2023-03-26[clang-tidy] Add readability-avoid-unconditional-preprocessor-if checkPiotr Zegar1-0/+3
Check flags always enabled or disabled code blocks in preprocessor '#if' conditions, such as '#if 0' and '#if 1' etc. Reviewed By: carlosgalvezp Differential Revision: https://reviews.llvm.org/D145617
2023-01-14[clang-tidy][NFC] Use C++17 nested namespaces in the clang-tidy folderCarlos Galvez1-4/+2
Fix applied by running: run-clang-tidy.py -checks=-*,modernize-concat-nested-namespaces Differential Revision: https://reviews.llvm.org/D141770
2022-01-24[clang-tidy] Add `readability-container-contains` checkAdrian Vogelsgesang1-0/+3
This commit introduces a new check `readability-container-contains` which finds usages of `container.count()` and `container.find() != container.end()` and instead recommends the `container.contains()` method introduced in C++20. For containers which permit multiple entries per key (`multimap`, `multiset`, ...), `contains` is more efficient than `count` because `count` has to do unnecessary additional work. While this this performance difference does not exist for containers with only a single entry per key (`map`, `unordered_map`, ...), `contains` still conveys the intent better. Reviewed By: xazax.hun, whisperity Differential Revision: http://reviews.llvm.org/D112646
2022-01-23[clang-tidy] Add readability-duplicate-include checkRichard1-0/+3
Looks for duplicate includes and removes them. Every time an include directive is processed, check a vector of filenames to see if the included file has already been included. If so, it issues a warning and a replacement to remove the entire line containing the duplicated include directive. When a macro is defined or undefined, the vector of filenames is cleared. This enables including the same file multiple times, but getting different expansions based on the set of active macros at the time of inclusion. For example: #undef NDEBUG #include "assertion.h" // ...code with assertions enabled #define NDEBUG #include "assertion.h" // ...code with assertions disabled Since macros are redefined between the inclusion of assertion.h, they are not flagged as redundant. Differential Revision: https://reviews.llvm.org/D7982
2021-09-15Revert "Re-Revert "clang-tidy: introduce readability-containter-data-pointer ↵Saleem Abdulrasool1-0/+3
check"" This reverts commit 626586fc253c6f032aedb325dba6b1ff3f11875e. Tweak the test for Windows. Windows defaults to delayed template parsing, which resulted in the main template definition not registering the test on Windows. Process the file with the additional `-fno-delayed-template-parsing` flag to change the default beahviour. Additionally, add an extra check for the fix it and use a more robust test to ensure that the value is always evaluated. Differential Revision: https://reviews.llvm.org/D108893
2021-09-14Re-Revert "clang-tidy: introduce readability-containter-data-pointer check"Nico Weber1-3/+0
This reverts commit 49992c04148e5327bef9bd2dff53a0d46004b4b4. The test is still failing on Windows, see comments on https://reviews.llvm.org/D108893
2021-09-14Revert "Revert "clang-tidy: introduce readability-containter-data-pointer ↵Saleem Abdulrasool1-0/+3
check"" This reverts commit 76dc8ac36d07cebe8cfe8fe757323562bb36df94. Restore the change. The test had an incorrect negative from testing. The test is expected to trigger a failure as mentioned in the review comments. This corrects the test and should resolve the failure.
2021-09-14Revert "clang-tidy: introduce readability-containter-data-pointer check"Nico Weber1-3/+0
This reverts commit d0d9e6f0849b2e76e980e2edf365302f47f4e35f. Breaks tests, see e.g. https://lab.llvm.org/buildbot/#/builders/188/builds/3326
2021-09-14clang-tidy: introduce readability-containter-data-pointer checkSaleem Abdulrasool1-0/+3
This introduces a new check, readability-containter-data-pointer. This check is meant to catch the cases where the user may be trying to materialize the data pointer by taking the address of the 0-th member of a container. With C++11 or newer, the `data` member should be used for this. This provides the following benefits: - `.data()` is easier to read than `&[0]` - it avoids an unnecessary re-materialization of the pointer * this doesn't matter in the case of optimized code, but in the case of unoptimized code, this will be visible - it avoids a potential invalid memory de-reference caused by the indexing when the container is empty (in debug mode, clang will normally optimize away the re-materialization in optimized builds). The small potential behavioural change raises the question of where the check should belong. A reasoning of defense in depth applies here, and this does an unchecked conversion, with the assumption that users can use the static analyzer to catch cases where we can statically identify an invalid memory de-reference. For the cases where the static analysis is unable to prove the size of the container, UBSan can be used to track the invalid access. Special thanks to Aaron Ballmann for the discussion on whether this check would be useful and where to place it. This also partially resolves PR26817! Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D108893
2021-08-12Add a check for enforcing minimum length for variable namesFlorin Iucha1-0/+3
Add a check for enforcing minimum length for variable names. A default minimum length of three characters is applied to regular variables (including function parameters). Loop counters and exception variables have a minimum of two characters. Additionally, the 'i', 'j' and 'k' are accepted as legacy values. All three sizes, as well as the list of accepted legacy loop counter names are configurable.
2021-07-19[clang-tidy] Add 'readability-suspicious-call-argument' checkWhisperity1-0/+3
Finds function calls where the call arguments might be provided in an incorrect order, based on the comparison (via string metrics) of the parameter names and the argument names against each other. A diagnostic is emitted if an argument name is similar to a *different* parameter than the one currently passed to, and it is sufficiently dissimilar to the one it **is** passed to currently. False-positive warnings from this check are useful to indicate bad naming convention issues, even if a swap isn't necessary. This check does not generate FixIts. Originally implemented by @varjujan as his Master's Thesis work. The check was subsequently taken over by @barancsuk who added type conformity checks to silence false positive matches. The work by @whisperity involved driving the check's review and fixing some more bugs in the process. Reviewed By: aaron.ballman, alexfh Differential Revision: http://reviews.llvm.org/D20689 Co-authored-by: János Varjú <varjujanos2@gmail.com> Co-authored-by: Lilla Barancsuk <barancsuklilla@gmail.com>
2021-03-16[clang-tidy] Remove readability-deleted-defaultNathan James1-3/+0
The deprecation notice was cherrypicked to the release branch in https://github.com/llvm/llvm-project/commit/f8b32989241cca87a8690c8cc404f06ce1f90e4c so its safe to remove this for the 13.X release cycle. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D98612
2020-10-03[clang-tidy] Implement readability-function-cognitive-complexity checkRoman Lebedev1-0/+3
Currently, there is basically just one clang-tidy check to impose some sanity limits on functions - `clang-tidy-readability-function-size`. It is nice, allows to limit line count, total number of statements, number of branches, number of function parameters (not counting implicit `this`), nesting level. However, those are simple generic metrics. It is still trivially possible to write a function, which does not violate any of these metrics, yet is still rather unreadable. Thus, some additional, slightly more complicated metric is needed. There is a well-known [[ https://en.wikipedia.org/wiki/Cyclomatic_complexity | Cyclomatic complexity]], but certainly has its downsides. And there is a [[ https://www.sonarsource.com/docs/CognitiveComplexity.pdf | COGNITIVE COMPLEXITY by SonarSource ]], which is available for opensource on https://sonarcloud.io/. This check checks function Cognitive Complexity metric, and flags the functions with Cognitive Complexity exceeding the configured limit. The default limit is `25`, same as in 'upstream'. The metric is implemented as per [[ https://www.sonarsource.com/docs/CognitiveComplexity.pdf | COGNITIVE COMPLEXITY by SonarSource ]] specification version 1.2 (19 April 2017), with two notable exceptions: * `preprocessor conditionals` (`#ifdef`, `#if`, `#elif`, `#else`, `#endif`) are not accounted for. Could be done. Currently, upstream does not account for them either. * `each method in a recursion cycle` is not accounted for. It can't be fully implemented, because cross-translational-unit analysis would be needed, which is not possible in clang-tidy. Thus, at least right now, i completely avoided implementing it. There are some further possible improvements: * Are GNU statement expressions (`BinaryConditionalOperator`) really free? They should probably cause nesting level increase, and complexity level increase when they are nested within eachother. * Microsoft SEH support * ??? Reviewed By: aaron.ballman, JonasToth, lattner Differential Revision: https://reviews.llvm.org/D36836
2020-06-03[clang-tidy] add new check readability-use-anyofallofMatthias Gehre1-0/+3
Summary: Finds range-based for loops that can be replaced by a call to ``std::any_of`` or ``std::all_of``. In C++ 20 mode, suggests ``std::ranges::any_of`` or ``std::ranges::all_of``. For now, no fixits are produced. Reviewers: aaron.ballman, alexfh, hokein Subscribers: mgorny, xazax.hun, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D77572
2020-01-14Added readability-qualified-auto checkNathan James1-0/+3
Adds a check that detects any auto variables that are deduced to a pointer or a const pointer then adds in the const and asterisk according. Will also check auto L value references that could be written as const. This relates to the coding standard https://llvm.org/docs/CodingStandards.html#beware-unnecessary-copies-with-auto
2019-11-06[clang-tidy] Add readability-make-member-function-constMatthias Gehre1-0/+3
Summary: Finds non-static member functions that can be made ``const`` because the functions don't use ``this`` in a non-const way. The check conservatively tries to preserve logical costness in favor of physical costness. See readability-make-member-function-const.rst for more details. Reviewers: aaron.ballman, gribozavr, hokein, alexfh Subscribers: mgorny, xazax.hun, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D68074
2019-10-30Add the readability-redundant-access-specifiers check.Aaron Ballman1-0/+3
This finds redundant access specifier declarations inside classes, structs, and unions. Patch by Mateusz Mackowski.
2019-07-16[clang-tidy] initial version of readability-convert-member-functions-to-staticMatthias Gehre1-0/+3
Summary: Finds non-static member functions that can be made ``static``. I have run this check (repeatedly) over llvm-project. It made 1708 member functions ``static``. Out of those, I had to exclude 22 via ``NOLINT`` because their address was taken and stored in a variable of pointer-to-member type (e.g. passed to llvm::StringSwitch). It also made 243 member functions ``const``. (This is currently very conservative to have no false-positives and can hopefully be extended in the future.) You can find the results here: https://github.com/mgehre/llvm-project/commits/static_const_eval Reviewers: alexfh, aaron.ballman Subscribers: mgorny, xazax.hun, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D61749 llvm-svn: 366265
2019-01-19Update the file headers across all of the LLVM projects in the monorepoChandler Carruth1-4/+3
to reflect the new license. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351636
2019-01-11[clang-tidy] new check 'readability-redundant-preprocessor'Miklos Vajna1-0/+3
Finds potentially redundant preprocessor directives. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D54349 llvm-svn: 350922
2018-10-31Implement the readability-const-return-type check.Aaron Ballman1-0/+3
This check flags function top-level const-qualified return types and suggests removing the mostly-superfluous const qualifier where possible. Patch by Yitzhak Mandelbaum. llvm-svn: 345764
2018-10-31[clang-tidy] new check 'readability-isolate-declaration'Jonas Toth1-0/+3
Summary: This patch introduces a new clang-tidy check that matches on all `declStmt` that declare more then one variable and transform them into one statement per declaration if possible. It currently only focusses on variable declarations but should be extended to cover more kinds of declarations in the future. It is related to https://reviews.llvm.org/D27621 and does use it's extensive test-suite. Thank you to firolino for his work! Reviewers: rsmith, aaron.ballman, alexfh, hokein, kbobyrev Reviewed By: aaron.ballman Subscribers: ZaMaZaN4iK, mgehre, nemanjai, kbarton, lebedev.ri, Eugene.Zelenko, mgorny, xazax.hun, cfe-commits Tags: #clang-tools-extra Differential Revision: https://reviews.llvm.org/D51949 llvm-svn: 345735
2018-10-26[clang-tidy] Re-commit: Add new 'readability-uppercase-literal-suffix' check ↵Roman Lebedev1-0/+3
(CERT DCL16-C, MISRA C:2012, 7.3, MISRA C++:2008, 2-13-4) Summary: Detects when the integral literal or floating point (decimal or hexadecimal) literal has non-uppercase suffix, and suggests to make the suffix uppercase, with fix-it. All valid combinations of suffixes are supported. ``` auto x = 1; // OK, no suffix. auto x = 1u; // warning: integer literal suffix 'u' is not upper-case auto x = 1U; // OK, suffix is uppercase. ... ``` This is a re-commit, the original was reverted by me in rL345305 due to discovered bugs. (implicit code, template instantiation) Tests were added, and the bugs were fixed. I'm unable to find any further bugs, hopefully there aren't any.. References: * [[ https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=87152241 | CERT DCL16-C ]] * MISRA C:2012, 7.3 - The lowercase character "l" shall not be used in a literal suffix * MISRA C++:2008, 2-13-4 - Literal suffixes shall be upper case Reviewers: JonasToth, aaron.ballman, alexfh, hokein, xazax.hun Reviewed By: aaron.ballman Subscribers: Eugene.Zelenko, mgorny, rnkovacs, cfe-commits Tags: #clang-tools-extra Differential Revision: https://reviews.llvm.org/D52670 llvm-svn: 345381
2018-10-25[clang-tidy] Revert my readability-uppercase-literal-suffix check.Roman Lebedev1-3/+0
There are some lurking issues with the handling of the SourceManager. Somehow sometimes we end up extracting completely wrong portions of the source buffer. Reverts r344772, r44760, r344758, r344755. llvm-svn: 345305
2018-10-18[clang-tidy] Add new 'readability-uppercase-literal-suffix' check (CERT ↵Roman Lebedev1-0/+3
DCL16-C, MISRA C:2012, 7.3, MISRA C++:2008, 2-13-4) Summary: Detects when the integral literal or floating point (decimal or hexadecimal) literal has non-uppercase suffix, and suggests to make the suffix uppercase, with fix-it. All valid combinations of suffixes are supported. ``` auto x = 1; // OK, no suffix. auto x = 1u; // warning: integer literal suffix 'u' is not upper-case auto x = 1U; // OK, suffix is uppercase. ... ``` References: * [[ https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=87152241 | CERT DCL16-C ]] * MISRA C:2012, 7.3 - The lowercase character "l" shall not be used in a literal suffix * MISRA C++:2008, 2-13-4 - Literal suffixes shall be upper case Reviewers: JonasToth, aaron.ballman, alexfh, hokein, xazax.hun Reviewed By: aaron.ballman Subscribers: Eugene.Zelenko, mgorny, rnkovacs, cfe-commits Tags: #clang-tools-extra Differential Revision: https://reviews.llvm.org/D52670 llvm-svn: 344755
2018-08-12Add a new check to the readability module that flags uses of "magic numbers" ↵Aaron Ballman1-0/+3
(both floating-point and integral). Patch by Florin Iucha <florin@signbit.net> llvm-svn: 339516
2018-05-16Add a new check, readability-simplify-subscript-expr, that diagnoses array ↵Aaron Ballman1-0/+3
subscript expressions that can be simplified. Currently, diagnoses code that calls container.data()[some_index] when the container exposes a suitable operator[]() method that can be used directly. Patch by Shuai Wang. llvm-svn: 332519
2018-03-07[clang-tidy] Add "portability" module and rename readability-simd-intrinsics ↵Fangrui Song1-3/+0
to portability-simd-intrinsics Reviewers: alexfh Subscribers: klimek, nemanjai, mgorny, xazax.hun, kbarton, cfe-commits Differential Revision: https://reviews.llvm.org/D44173 llvm-svn: 326909
2018-02-15[clang-tidy] Add `readability-simd-intrinsics` check.Fangrui Song1-0/+3
Summary: Many architectures provide SIMD operations (e.g. x86 SSE/AVX, Power AltiVec/VSX, ARM NEON). It is common that SIMD code implementing the same algorithm, is written in multiple target-dispatching pieces to optimize for different architectures or micro-architectures. The C++ standard proposal P0214 and its extensions cover many common SIMD operations. By migrating from target-dependent intrinsics to P0214 operations, the SIMD code can be simplified and pieces for different targets can be unified. Refer to http://wg21.link/p0214 for introduction and motivation for the data-parallel standard library. Subscribers: klimek, aemerson, mgorny, xazax.hun, kristof.beyls, hintonda, cfe-commits Differential Revision: https://reviews.llvm.org/D42983 llvm-svn: 325272
2018-01-30clang-tidy/rename_check.py misc-string-compare readability-string-compareAlexander Kornienko1-0/+3
llvm-svn: 323766
2017-08-08[clang-tidy] Add new readability non-idiomatic static access checkGabor Horvath1-0/+3
Patch by: Lilla Barancsuk Differential Revision: https://reviews.llvm.org/D35937 llvm-svn: 310371
2017-08-08[clang-tidy] 'implicit cast' -> 'implicit conversion'Alexander Kornienko1-3/+3
Summary: This patch renames checks, check options and changes messages to use correct term "implicit conversion" instead of "implicit cast" (which has been in use in Clang AST since ~10 years, but it's still technically incorrect w.r.t. C++ standard). * performance-implicit-cast-in-loop -> performance-implicit-conversion-in-loop * readability-implicit-bool-cast -> readability-implicit-bool-conversion - readability-implicit-bool-cast.AllowConditionalIntegerCasts -> readability-implicit-bool-conversion.AllowIntegerConditions - readability-implicit-bool-cast.AllowConditionalPointerCasts -> readability-implicit-bool-conversion.AllowPointerConditions Reviewers: hokein, jdennett Reviewed By: hokein Subscribers: mgorny, JDevlieghere, xazax.hun, cfe-commits Differential Revision: https://reviews.llvm.org/D36456 llvm-svn: 310366
2017-02-14[clang-tidy] Add readability-misleading-indentation check.Gabor Horvath1-0/+3
Differential Revision: https://reviews.llvm.org/D19586 llvm-svn: 295041
2016-12-31[clang-tidy] Add delete null pointer check.Gabor Horvath1-0/+3
This check detects and fixes redundant null checks before deletes. Patch by: Gergely Angeli! Differential Revision: https://reviews.llvm.org/D21298 llvm-svn: 290784
2016-12-13[clang-tidy] Add check for redundant function pointer dereferencesMalcolm Parsons1-0/+3
Reviewers: alexfh, aaron.ballman, hokein Subscribers: mgorny, JDevlieghere, cfe-commits Differential Revision: https://reviews.llvm.org/D27520 llvm-svn: 289524
2016-11-01[clang-tidy] Add check readability-redundant-declarationDaniel Marjamaki1-0/+3
Finds redundant variable and function declarations. extern int X; extern int X; // <- redundant Differential Revision: https://reviews.llvm.org/D24656 llvm-svn: 285689