======================================
Extra Clang Tools 10.0.0 Release Notes
======================================

.. contents::
   :local:
   :depth: 3

Written by the `LLVM Team <https://llvm.org/>`_

Introduction
============

This document contains the release notes for the Extra Clang Tools, part of the
Clang release 10.0.0. 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 <https://llvm.org/releases/>`_.

For more information about Clang or LLVM, including information about
the latest release, please see the `Clang Web Site <https://clang.llvm.org>`_ or
the `LLVM Web Site <https://llvm.org>`_.

What's New in Extra Clang Tools 10.0.0?
=======================================

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.


Improvements to clangd
----------------------

- clangd documentation is now found at https://clangd.llvm.org/

- Go-to-definition, hover, find-references etc use a new mechanism to identify
  what is under the cursor, which is (hopefully) more consistent and accurate.

- clangd should be able to reliably locate the standard library/SDK on macOS.

- Shutdown more cleanly on receiving a signal. In particular temporary PCH files
  should be cleaned up.

- Find references now works on macros.

- clangd can be more easily used remotely or in a docker container.

  The ``--path-mappings`` flag translates between local and remote paths.

- Experimental support for renaming across files (behind the
  ``--cross-file-rename`` flag).

- Hover now exposes more information, including the type of symbols and the
  value of constant expressions.

- Go to definition now works in dependent code in more cases, by assuming the
  primary template is used.

- Better recovery and reporting when the compile command for a file can't be
  fully parsed.

- Switch header/source (an extension) now uses index information in addition
  to filename heuristics, and is much more robust.

- Semantic selection (expand/contract selection) is supported.

- Semantic highlighting is more robust, highlights more types of tokens, and
  as an extension provides information about inactive preprocessor regions.

- Code completion results now include an extension field ``score``.

  This allows clients to incorporate clangd quality signals when re-ranking code
  completion after client-side fuzzy-matching.

- New refactorings:
  define function out-of-line, define function in-line, extract function,
  remove using namespace directive, localize Objective-C string.

- Bug fixes and performance improvements :-)

Improvements to clang-doc
-------------------------

- :doc:`clang-doc <clang-doc>` now generates documentation in HTML format.

Improvements to clang-tidy
--------------------------

New checks
^^^^^^^^^^

- New :doc:`bugprone-bad-signal-to-kill-thread
  <clang-tidy/checks/bugprone-bad-signal-to-kill-thread>` check.

  Finds ``pthread_kill`` function calls when a thread is terminated by
  raising ``SIGTERM`` signal.

- New :doc:`bugprone-dynamic-static-initializers
  <clang-tidy/checks/bugprone-dynamic-static-initializers>` check.

  Finds instances where variables with static storage are initialized
  dynamically in header files.

- New :doc:`bugprone-infinite-loop
  <clang-tidy/checks/bugprone-infinite-loop>` check.

  Finds obvious infinite loops (loops where the condition variable is not
  changed at all).

- New :doc:`bugprone-not-null-terminated-result
  <clang-tidy/checks/bugprone-not-null-terminated-result>` check

  Finds function calls where it is possible to cause a not null-terminated
  result.

- New :doc:`bugprone-signed-char-misuse
  <clang-tidy/checks/bugprone-signed-char-misuse>` check.

  Finds ``signed char`` to integer conversions which might indicate a
  programming error.

- New :doc:`cert-mem57-cpp
  <clang-tidy/checks/cert-mem57-cpp>` check.

  Checks if an object of type with extended alignment is allocated by using
  the default ``operator new``.

- New :doc:`cert-oop58-cpp
  <clang-tidy/checks/cert-oop58-cpp>` check.

  Finds assignments to the copied object and its direct or indirect members
  in copy constructors and copy assignment operators.

- New :doc:`cppcoreguidelines-init-variables
  <clang-tidy/checks/cppcoreguidelines-init-variables>` check.

  Checks whether there are local variables that are declared without an initial
  value.

- New :doc:`darwin-dispatch-once-nonstatic
  <clang-tidy/checks/darwin-dispatch-once-nonstatic>` check.

  Finds declarations of ``dispatch_once_t`` variables without static or global
  storage.

- New :doc:`google-upgrade-googletest-case
  <clang-tidy/checks/google-upgrade-googletest-case>` check.

  Finds uses of deprecated Googletest APIs with names containing ``case`` and
  replaces them with equivalent APIs with ``suite``.

- New :doc:`linuxkernel-must-use-errs
  <clang-tidy/checks/linuxkernel-must-use-errs>` check.

  Checks Linux kernel code to see if it uses the results from the functions in
  ``linux/err.h``.

- New :doc:`llvm-prefer-register-over-unsigned
  <clang-tidy/checks/llvm-prefer-register-over-unsigned>` check.

  Finds historical use of ``unsigned`` to hold vregs and physregs and rewrites
  them to use ``Register``

- New :doc:`objc-missing-hash
  <clang-tidy/checks/objc-missing-hash>` check.

  Finds Objective-C implementations that implement ``-isEqual:`` without also
  appropriately implementing ``-hash``.

- New :doc:`performance-no-automatic-move
  <clang-tidy/checks/performance-no-automatic-move>` check.

  Finds local variables that cannot be automatically moved due to constness.

- New :doc:`performance-trivially-destructible
  <clang-tidy/checks/performance-trivially-destructible>` check.

  Finds types that could be made trivially-destructible by removing out-of-line
  defaulted destructor declarations.

- New :doc:`readability-make-member-function-const
  <clang-tidy/checks/readability-make-member-function-const>` check.

  Finds non-static member functions that can be made ``const``
  because the functions don't use ``this`` in a non-const way.

- New :doc:`readability-qualified-auto
  <clang-tidy/checks/readability-qualified-auto>` check.

  Adds pointer and ``const`` qualifications to ``auto``-typed variables
  that are deduced to pointers and ``const`` pointers.

- New :doc:`readability-redundant-access-specifiers
  <clang-tidy/checks/readability-redundant-access-specifiers>` check.

  Finds classes, structs, and unions that contain redundant member
  access specifiers.

New aliases
^^^^^^^^^^^

- New alias :doc:`cert-pos44-c
  <clang-tidy/checks/cert-pos44-c>` to
  :doc:`bugprone-bad-signal-to-kill-thread
  <clang-tidy/checks/bugprone-bad-signal-to-kill-thread>` was added.

- New alias :doc:`llvm-qualified-auto
  <clang-tidy/checks/llvm-qualified-auto>` to
  :doc:`readability-qualified-auto
  <clang-tidy/checks/readability-qualified-auto>` was added.

Changes in existing checks
^^^^^^^^^^^^^^^^^^^^^^^^^^

- Improved :doc:`bugprone-posix-return
  <clang-tidy/checks/bugprone-posix-return>` check.

  Now also checks if any calls to ``pthread_*`` functions expect negative
  return values.

- Improved :doc:`hicpp-signed-bitwise
  <clang-tidy/checks/hicpp-signed-bitwise>` check.

  The check now supports the `IgnorePositiveIntegerLiterals` option.

- Improved :doc:`modernize-avoid-bind
  <clang-tidy/checks/modernize-avoid-bind>` check.

  The check now supports supports diagnosing and fixing arbitrary callables
  instead of only simple free functions. The `PermissiveParameterList` option
  has also been added to address situations where the existing fix-it logic
  would sometimes generate code that no longer compiles.

- The :doc:`modernize-use-equals-default
  <clang-tidy/checks/modernize-use-equals-default>` fix no longer adds
  semicolons where they would be redundant.

- Improved :doc:`modernize-use-override
  <clang-tidy/checks/modernize-use-override>` check.

  The check now supports the `AllowOverrideAndFinal` option to eliminate
  conflicts with `gcc -Wsuggest-override` or `gcc -Werror=suggest-override`.

- The :doc:`modernize-use-using
  <clang-tidy/checks/modernize-use-using>` check now converts typedefs
  containing struct definitions and multiple comma-separated types.

- Improved :doc:`readability-magic-numbers
  <clang-tidy/checks/readability-magic-numbers>` check.

  The check now supports the `IgnoreBitFieldsWidths` option to suppress
  the warning for numbers used to specify bit field widths.

  The check was updated to eliminate some false positives (such as using
  class enumeration as non-type template parameters, or the synthetically
  computed length of a static user string literal.)

- Improved :doc:`readability-redundant-member-init
  <clang-tidy/checks/readability-redundant-member-init>` check.

  The check  now supports the `IgnoreBaseInCopyConstructors` option to avoid
  `"base class 'Foo' should be explicitly initialized in the copy constructor"`
  warnings or errors with `gcc -Wextra` or `gcc -Werror=extra`.

- The :doc:`readability-redundant-string-init
  <clang-tidy/checks/readability-redundant-string-init>` check now supports a
  `StringNames` option enabling its application to custom string classes.

Renamed checks
^^^^^^^^^^^^^^

- The 'objc-avoid-spinlock' check was renamed to :doc:`darwin-avoid-spinlock
  <clang-tidy/checks/darwin-avoid-spinlock>`


Clang-tidy visual studio plugin
-------------------------------

The clang-tidy-vs plugin has been removed from clang, as
it's no longer maintained. Users should migrate to
`Clang Power Tools <https://marketplace.visualstudio.com/items?itemName=caphyon.ClangPowerTools>`_
instead.
