[clang-format] Annotate noexcept, explicit specifiers as containing expressions
authorEmilia Dreamer <emilia@rymiel.space>
Wed, 22 Mar 2023 18:26:38 +0000 (20:26 +0200)
committerEmilia Dreamer <emilia@rymiel.space>
Wed, 22 Mar 2023 18:27:17 +0000 (20:27 +0200)
commitead9644684e85e0611f3b0ff72926820f1277e09
tree9fadccd168633c05e4a03d97af8980d008993ea2
parent16b7cf245ec0ff5428daee4f71af62e1938bfc73
[clang-format] Annotate noexcept, explicit specifiers as containing expressions

The noexcept specifier and explicit specifier can optionally include a
boolean expression to make these specifiers apply conditionally,
however, clang-format didn't set the context for the parenthesized
content of these specifiers, meaning they inherited the parent context,
which usually isn't an expressions, leading to misannotated binary
operators.

This patch applies expression context to the content of these
specifiers, making them similar to the static_assert keyword.

Fixes https://github.com/llvm/llvm-project/issues/44543

Reviewed By: owenpan, MyDeveloperDay

Differential Revision: https://reviews.llvm.org/D146284
clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/FormatTest.cpp
clang/unittests/Format/TokenAnnotatorTest.cpp