Extra Clang Tools 14.0.6 Release Notes — Extra Clang Tools 14.0.6 documentation

# Extra Clang Tools 14.0.6 documentation

## Extra Clang Tools 14.0.6 Release Notes

Written by the LLVM Team

## Introduction

This document contains the release notes for the Extra Clang Tools, part of the Clang release 14.0.6. Here we describe the status of the Extra Clang Tools in some detail, including major improvements from the previous release and new feature work. All LLVM releases may be downloaded from the LLVM releases web site.

For more information about Clang or LLVM, including information about the latest release, please see the Clang Web Site or the LLVM Web Site.

Note that if you are reading this file from a Git checkout or the main Clang web page, this document applies to the next release, not the current one. To see the release notes for a specific release, please see the releases page.

## What’s New in Extra Clang Tools 14.0.6?

Some of the major new features and improvements to Extra Clang Tools are listed here. Generic improvements to Extra Clang Tools as a whole or to its underlying infrastructure are described first, followed by tool-specific sections.

### Major New Features

…

### Improvements to clangd

#### Inlay hints

- This feature provides texutal hints interleaved with the code, like parameter names, deduced types and designated initializers.

- The clangd/inlayHints LSP extension is now documented, and both position and range.

- Inlay hints are now on-by-default in clangd, if the client supports and exposes them. (vscode-clangd does so). The `-inlay-hints` flag has been removed.

- Inlay hints can be disabled or configured in the config file.

#### Diagnostics

- Unused #include diagnostics are available. These are off by default, and can be turned on through the Diagnostics.UnusedIncludes config option.

- `Deprecated` and `Unnecessary` tags from LSP 3.15 are set on `-Wdeprecated` and `-Wunused` diagnostics. Clients may display these in a specialized way.

- clangd suggests inserting includes to fix problems in more cases:

  - calling unknown functions in C, even when an implicit declaration is inferred.

  - incomplete types (some additional cases).

  - various diagnostics that specify “include <foo.h>” in their text.

- The “populate switch” action is more reliably offered as a fix for `-Wswitch` warnings, and works with C enums.

- Warnings specified by `ExtraArgs: -W...` flags in `.clang-tidy` config files are now produced.

#### Semantic Highlighting

- `virtual` modifier for method names

- `usedAsMutableReference` modifier for function parameters

- Lambda captures now marked as local variables.

#### Compile flags

- Compile flags like `-xc++-header` that must precede input file names are now added correctly by the CompileFlags.Add config option.

- If multiple architectures are specified (e.g. when targeting Apple M1+Intel), clangd will now use the host architecture instead of failing to parse.

- Added CompileFlags.Compiler option to override executable name in compile flags.

- Copying `compile_commands.json` entries from one file to another (and simply adjusting `file`) should now work correctly.

#### Hover

- Hovering on many attributes (e.g. `[[nodiscard]]`) will show documentation.

- Hovering on include directives shows the resolved header path.

- Hovering on character literals shows their numeric value.

- Code snippets are marked with the appropriate language instead of always C++. This may improve clients’ syntax highlighting.

- Include desugared types in hover, like in diagnostics. Off by default, controlled with Hover.ShowAKA config option.

#### Code completion

- Completion of attributes (e.g. `[[gsl::Owner(Foo)]]`)

- Completion of `/*ParameterName=*/` comments.

- Documentation of items with `annotate` attributes now includes the annotation.

- Improved handling of results with 1-3 character names.

- Completion of members in constructor init lists (`Foo() : member_() {}`) is much more reliable.

- C++ Standard library completions should be less noisy: parameter names are deuglified (`vector<_Tp>` is now `vector<Tp>`) and many `__implementation_details` are hidden altogether.

#### Signature help

- Signatures for template argument lists

- Signatures for braced constructor calls

- Signatures for aggregate initializers

- Signatures for members in constructor init lists are much more reliable.

- Variadic functions correctly show signature help when typing the variadic arguments.

- Signature help is retriggered on closing brackets `)`, `}`, `>`. This means signature help should be correct after nested function calls.

#### Cross-references

- Support for `textDocument/typeDefinition` LSP request.

- Improved handling of symbols introduced via using declarations.

- Searching for references to an overriding method also returns references to the base class method. (Typically calls that may invoke the override).

- All references from the current file are always returned, even if there are enough to exceed our usual limit.

#### Objective-C

- `#pragma mark` directives now form groups in the document outline.

- `id` and `instancetype` are treated as keywords rather than typedefs

#### Miscellaneous

- Include request context on crashes when possible.

- Many stability, performance and correctness improvements.

- `-use-dirty-headers` command line flag to use dirty buffer contents when parsing headers, rather than the saved on-disk contents.

- `clangd --check=/path/to/file.cpp` now reads config files in ancestor directories, in addition to user config file.

- Improved compile flags handling in `clangd-indexer`.

- The index file format changed in this release, indexes need to be rebuilt. This should happen transparently in standard cases (the background index).

### Improvements to clang-doc

The improvements are…

### Improvements to clang-query

The improvements are…

### Improvements to clang-rename

The improvements are…

### Improvements to clang-tidy

- Ignore warnings from macros defined in system headers, if not using the -system-headers flag.

- Added support for globbing in NOLINT* expressions, to simplify suppressing multiple warnings in the same line.

- Added support for NOLINTBEGIN … NOLINTEND comments to suppress Clang-Tidy warnings over multiple lines.

- Added support for external plugin checks with -load.

- Fixed a regression introduced in clang-tidy 14.0.0, which prevented NOLINTs from suppressing diagnostics associated with macro arguments. This fixes Issue 55134.

#### New checks

- New abseil-cleanup-ctad check.

  Suggests switching the initialization pattern of `absl::Cleanup` instances from the factory function to class template argument deduction (CTAD), in C++17 and higher.

- New bugprone-stringview-nullptr check.

  Checks for various ways that the `const CharT*` constructor of `std::basic_string_view` can be passed a null argument.

- New bugprone-suspicious-memory-comparison check.

  Finds potentially incorrect calls to `memcmp()` based on properties of the arguments.

- New cppcoreguidelines-virtual-class-destructor check.

  Finds virtual classes whose destructor is neither public and virtual nor protected and non-virtual.

- New misc-misleading-bidirectional check.

  Inspects string literal and comments for unterminated bidirectional Unicode characters.

- New misc-misleading-identifier check.

  Reports identifier with unicode right-to-left characters.

- New readability-container-contains check.

  Finds usages of `container.count()` and `container.find() == container.end()` which should be replaced by a call to the `container.contains()` method introduced in C++20.

- New readability-container-data-pointer check.

  Finds cases where code could use `data()` rather than the address of the element at index 0 in a container.

- New readability-duplicate-include check.

  Looks for duplicate includes and removes them.

- New readability-identifier-length check.

  Reports identifiers whose names are too short. Currently checks local variables and function parameters only.

#### New check aliases

- New alias cert-err33-c to bugprone-unused-return-value was added.

- New alias cert-exp42-c to bugprone-suspicious-memory-comparison was added.

- New alias cert-flp37-c to bugprone-suspicious-memory-comparison was added.

#### Changes in existing checks

- bugprone-assert-side-effect check now supports an `IgnoredFunctions` option to explicitly consider the specified semicolon-separated functions list as not having any side-effects. Regular expressions for the list items are also accepted.

- Fixed a false positive in bugprone-throw-keyword-missing when creating an exception object using placement new.

- Removed default setting `cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors = "true"`, from cppcoreguidelines-explicit-virtual-functions to match the current state of the C++ Core Guidelines.

- Eliminated false positives for cppcoreguidelines-macro-usage by restricting the warning about using constants to only macros that expand to literals.

- cppcoreguidelines-narrowing-conversions check now supports a `WarnOnIntegerToFloatingPointNarrowingConversion` option to control whether to warn on narrowing integer to floating-point conversions.

- Make the cppcoreguidelines-pro-bounds-array-to-pointer-decay check accept string literal to pointer decay in conditional operator even if operands are of the same length.

- Removed suggestion `use gsl::at` from warning message in the cppcoreguidelines-pro-bounds-constant-array-index check, since that is not a requirement from the C++ Core Guidelines. This allows people to choose their own safe indexing strategy. The fix-it is kept for those who want to use the GSL library.

- Fixed a false positive in fuchsia-trailing-return for C++17 deduction guides.

- Updated google-readability-casting to diagnose and fix functional casts, to achieve feature parity with the corresponding `cpplint.py` check.

- Generalized the modernize-use-default-member-init check to handle non-default constructors.

- Improved performance-move-const-arg check.

  Removed a wrong FixIt for trivially copyable objects wrapped by `std::move()` and passed to an rvalue reference parameter. Removal of `std::move()` would break the code.

- readability-simplify-boolean-expr now simplifies return statements associated with `case`, `default` and labeled statements.

- Fixed a crash in readability-suspicious-call-argument related to passing arguments that refer to program elements without a trivial identifier.

- Fixed a bug in :doc:`bugprone-use-after-move <clang-tidy/checks/bugprone-use-after-move> where a move in a lambda capture was treated as if it happened within the body of the lambda, not within the function that defines the lambda.

#### Removed checks

### Improvements to include-fixer

The improvements are…

### Improvements to clang-include-fixer

The improvements are…

### Improvements to modularize

The improvements are…

### Improvements to pp-trace

The improvements are…

### Clang-tidy Visual Studio plugin