Commit Graph

2562 Commits

Author SHA1 Message Date
owenca 5889ed83a0 [clang-format] Don't insert braces for loops with a null statement
This is a workaround for #57539.

Fixes #57509.

Differential Revision: https://reviews.llvm.org/D133635
2022-09-12 00:37:47 -07:00
Emilia Dreamer 247613548b [clang-format] Change heuristic for locating lambda template arguments
Previously, the heuristic was simply to look for template argument-
specific keywords, such as typename, class, template and auto
that are preceded by a left angle bracket <.

This changes the heuristic to instead look for a left angle bracket <
preceded by a right square bracket ], since according to the C++
grammar, the template arguments must *directly* follow the introducer.
(This sort of check might just end up being *too* aggressive)

This patch also adds a bunch more token annotator tests for lambdas,
specifically for some of the stranger forms of lambdas now allowed as
of C++20 or soon-to-be-allowed as part of C++23.

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

This does NOT resolve the FIXME regarding explicit template lists, but
perhaps it gets closer

Differential Revision: https://reviews.llvm.org/D132295
2022-09-06 12:24:19 +02:00
Emilia Dreamer bd3dd10a8b [clang-format] Concepts: allow identifiers after negation
Previously, the formatter would refuse to treat identifiers within a
compound concept definition as actually part of the definition, if
they were after the negation operator !. It is now made consistent
with the likes of && and ||.

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

Differential Revision: https://reviews.llvm.org/D131978
2022-09-05 12:35:40 +02:00
Emilia Dreamer c6e7752f8e [clang-format] Allow `throw` to be a keyword in front of casts
This makes throw more similar to return. However, unlike return,
it has to more strict as to not remove spaces after usages of throw as
a (deprecated) exception specifier.

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

Differential Revision: https://reviews.llvm.org/D132762
2022-09-05 12:35:39 +02:00
Emilia Dreamer f54d42abcf [clang-format] Don't put `noexcept` on empty line following constructor
With the AlwaysBreakTemplateDeclarations option, having a constructor
template for a type consisting of all-uppercase letters with a
noexcept specifier would put said noexcept specifier on its own blank
line.

This is because the all-uppercase type is understood as a macro-like
attribute (such as DEPRECATED()), and noexcept is seen as the
declaration. However, noexcept is a keyword and cannot be an
identifier on its own.

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

Differential Revision: https://reviews.llvm.org/D132189
2022-09-05 12:35:39 +02:00
owenca 92d8738c38 [clang-format] Fix a bug in merging blocks with a wrapped l_brace
When the opening brace of a control statement block is wrapped, we
must check the previous line to determine whether to try to merge
the block.

Fixes #38639.
Fixes #48007.
Fixes #57421.

Differential Revision: https://reviews.llvm.org/D133093
2022-09-02 21:38:36 -07:00
jackh 3bbdf06b28 [clang-format] Fix annotating when deleting array of pointers
Fixes https://github.com/llvm/llvm-project/issues/57418

The token `*` below should be annotated as `UnaryOperator`.

```
delete[] *ptr;
```

Reviewed By: owenpan, MyDeveloperDay

Differential Revision: https://reviews.llvm.org/D132911
2022-09-03 05:56:49 +08:00
owenca bc10ab8da1 [clang-format] Fix a bug in inserting braces at trailing comments
If the style wraps control statement braces, the opening braces
should be inserted after the trailing comments if present.

Fixes #57419.

Differential Revision: https://reviews.llvm.org/D132905
2022-08-30 22:50:36 -07:00
owenca f00f2b3e8d [clang-format] Fix a bug in removing braces for the LLVM style
When an l_brace is wrapped and the line above it ends with a
comment, the annotator adds ColumnLimit to the TotalLength of the
l_brace, so the actual column position of the l_brace must be
adjusted accordingly.

Fixes #57376.

Differential Revision: https://reviews.llvm.org/D132805
2022-08-28 14:22:31 -07:00
owenca 44a06b51b2 [clang-format] Rework removeBraces() in Format.cpp
Fixes #57373.

Differential Revision: https://reviews.llvm.org/D132719
2022-08-27 14:10:24 -07:00
owenca 47e70569fc [clang-format] Remove an extraneous test in TokenAnnotatorTest.cpp
This removes an obsolete test case introduced by mistake from
commit 2e36120726.
2022-08-22 21:18:37 -07:00
owenca 2e36120726 [clang-format] Fix regressions in WhitespaceSensitiveMacros
Fixes #54522.
Fixes #57158.

Differential Revision: https://reviews.llvm.org/D132001
2022-08-22 20:42:54 -07:00
owenca d90c1bcdf9 Revert "[clang-format][NFC] Fix a bug in setting type FunctionLBrace"
This reverts commit 35f7dd601d.

Fixes #57200.
2022-08-21 23:26:51 -07:00
owenca 41214456de [clang-format] Fix BeforeHash indent of comments above PPDirective
Fixes #56326.

Differential Revision: https://reviews.llvm.org/D132097
2022-08-21 18:23:14 -07:00
owenca 777b6ad168 [clang-format] Handle return type auto followed by l_paren
Fixes #57160.

Differential Revision: https://reviews.llvm.org/D132008
2022-08-17 16:06:34 -07:00
owenca 2185f64771 [clang-format] Handle comments between access specifier and colon
Fixes #56740.

Differential Revision: https://reviews.llvm.org/D131940
2022-08-16 20:18:21 -07:00
Danil Sidoruk d8d331bc97 [clang-format] Fix aligning of java-style declarations
- Modify TokenAnnotator to work fine with java-style array declarations.
- Add test for aligning of java declarations.

Fixes #55931.

Differential Revision: https://reviews.llvm.org/D129628
2022-08-15 20:27:15 -07:00
jackh ef71383b0c [clang-format] Distinguish logical and after bracket from reference
Fix commit `b646f0955574` and remove redundant code.

Differential Revision: https://reviews.llvm.org/D131750
2022-08-13 11:52:23 +08:00
sstwcw 60e12068ff [clang-format] Handle Verilog attributes
Reviewed By: HazardyKnusperkeks, owenpan

Differential Revision: https://reviews.llvm.org/D128709
2022-07-29 00:38:30 +00:00
sstwcw c88719483c [clang-format] Handle Verilog case statements
These statements are like switch statements in C, but without the 'case'
keyword in labels.

How labels are parsed.  In UnwrappedLineParser, the program tries to
parse a statement every time it sees a colon.  In TokenAnnotator, a
colon that isn't part of an expression is annotated as a label.

The token type `TT_GotoLabelColon` is added.  We did not include Verilog
in the name because we thought we would eventually have to fix the
problem that case labels in C can't contain ternary conditional
expressions and we would use that token type.

The style is like below.  Labels are on separate lines and indented by
default.  The linked style guide also has examples where labels and the
corresponding statements are on the same lines.  They are not supported
for now.

https://github.com/lowRISC/style-guides/blob/master/VerilogCodingStyle.md

```
case (state_q)
  StIdle:
    state_d = StA;
  StA: begin
    state_d = StB;
  end
endcase
```

Differential Revision: https://reviews.llvm.org/D128714
2022-07-29 00:38:30 +00:00
sstwcw b67ee18e85 [clang-format] Handle Verilog user-defined primitives
Differential Revision: https://reviews.llvm.org/D128713
2022-07-29 00:38:30 +00:00
sstwcw 6db0c18b1a [clang-format] Handle Verilog modules
Now things inside hierarchies like modules and interfaces are
indented.  When the module header spans multiple lines, all except the
first line are indented as continuations.  We added the property
`IsContinuation` to mark lines that should be indented this way.

In order that the colons inside square brackets don't get labeled as
`TT_ObjCMethodExpr`, we added a check to only use this type when the
language is not Verilog.

Differential Revision: https://reviews.llvm.org/D128712
2022-07-29 00:38:30 +00:00
sstwcw 67480b360c [clang-format] Handle Verilog blocks
Now stuff inside begin-end blocks get indented.

Some tests are moved into FormatTestVerilog.Block from
FormatTestVerilog.If because they have nothing to do with if statements.

Reviewed By: HazardyKnusperkeks, owenpan

Differential Revision: https://reviews.llvm.org/D128711
2022-07-29 00:38:30 +00:00
sstwcw f93182a887 [clang-format] Handle Verilog numbers and operators
Reviewed By: HazardyKnusperkeks

Differential Revision: https://reviews.llvm.org/D126845
2022-07-29 00:38:29 +00:00
Denis Fatkulin 4977fd2192 [clang-format] Missing space between trailing return type 'auto' and left brace
There's no a space symbol between  trailing return type `auto` and left brace `{`.

The simpliest examles of code to reproduce the issue:

```
[]() -> auto {}
```

and

```
auto foo() -> auto {}
```

Depends on D130299

Reviewed By: HazardyKnusperkeks, curdeius, owenpan

Differential Revision: https://reviews.llvm.org/D130417
2022-07-29 00:30:22 +03:00
Denis Fatkulin 17fb879764 [clang-format] FIX: Misannotation 'auto' as trailing return type in lambdas
Lambdas with trailing return type 'auto' are annotated incorrectly. It causes a misformatting. The simpliest code to reproduce is:

```
auto list = {[]() -> auto { return 0; }};
```

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

Reviewed By: HazardyKnusperkeks, owenpan, curdeius

Differential Revision: https://reviews.llvm.org/D130299
2022-07-27 22:20:09 +03:00
owenca 0ffb3dd33e [clang-format] Fix a hang when formatting C# $@ string literals
Fixes #56624.

Differential Revision: https://reviews.llvm.org/D130411
2022-07-25 23:17:54 -07:00
owenca a4c62f6654 [clang-format][NFC] Refactor RequiresDoesNotChangeParsingOfTheRest
Differential Revision: https://reviews.llvm.org/D129982
2022-07-20 21:56:48 -07:00
owenca 892a9968ec [clang-format] Indent tokens after hash only if it starts a line
Fixes #56602.

Differential Revision: https://reviews.llvm.org/D130136
2022-07-20 21:52:17 -07:00
Björn Schäpers d2eda49202 [clang-format] Mark constexpr lambdas as lambda
Otherwise the brace was detected as a function brace, not wrong per se,
but when directly calling the lambda the calling parens were put on the
next line.

Differential Revision: https://reviews.llvm.org/D129946
2022-07-18 21:42:34 +02:00
Björn Schäpers 3c18a8b3a3 [clang-format] Indent TT_CtorInitializerColon after requires clauses
Fixes https://github.com/llvm/llvm-project/issues/56215

Differential Revision: https://reviews.llvm.org/D129942
2022-07-18 21:41:09 +02:00
Björn Schäpers 2b04c41b28 [clang-format] Fix misannotation of colon in presence of requires clause
For clauses without parentheses it was annotated as TT_InheritanceColon.
Relates to https://github.com/llvm/llvm-project/issues/56215

Differential Revision: https://reviews.llvm.org/D129940
2022-07-18 21:41:09 +02:00
owenca a0458d92e9 [clang-format] Never remove braces in macro definitions
Fixes #56559.

Differential Revision: https://reviews.llvm.org/D129921
2022-07-16 13:11:10 -07:00
Krasimir Georgiev 8dd2ef2130 [clang-format] distinguish multiplication after brace-init from pointer
After b646f09555,
the added regression test started being formatted as-if the
multiplication `*` was a pointer. This adapts the heuristic to
distinguish between these two cases.

Reviewed By: jackhong12, curdeius, HazardyKnusperkeks, owenpan

Differential Revision: https://reviews.llvm.org/D129771
2022-07-15 11:45:12 +02:00
owenca 6ab7307177 [clang-format] Fix invalid-code-generation by RemoveBracesLLVM
When removing an r_brace that is the first token of an annotated line, if the
line above ends with a line comment, clang-format generates invalid code by
merging the tokens after the r_brace into the line comment.

Fixes #56488.

Differential Revision: https://reviews.llvm.org/D129742
2022-07-14 15:19:57 -07:00
Jorge Gorbe Moya ee88c0cf09 [NFCI] Fix unused variable/function warnings in MacroCallReconstructorTest.cpp when asserts are disabled. 2022-07-12 16:46:58 -07:00
Manuel Klimek d6d0dc1f45 [clang-format] Add MacroUnexpander.
MacroUnexpander applies the structural formatting of expanded lines into
UnwrappedLines to the corresponding unexpanded macro calls, resulting in
UnwrappedLines for the macro calls the user typed.

Differential Revision: https://reviews.llvm.org/D88299
2022-07-12 07:11:46 +00:00
Marek Kurdej 14c30c70c4 [clang-format] Avoid crash in LevelIndentTracker.
Fixes https://github.com/llvm/llvm-project/issues/56352.

Reviewed By: HazardyKnusperkeks, owenpan, MyDeveloperDay

Differential Revision: https://reviews.llvm.org/D129064
2022-07-07 10:15:45 +02:00
owenca 47bdf53a5d [clang-format] Break on AfterColon only if not followed by comment
Break after a constructor initializer colon only if it's not followed by a
comment on the same line.

Fixes #41128.
Fixes #43246.

Differential Revision: https://reviews.llvm.org/D129057
2022-07-04 12:34:19 -07:00
owenca 40d2ef841b [clang-format][NFC] Replace an EXPECT_EQ with a verifyFormat 2022-07-01 21:20:54 -07:00
Huang Zhen-Hong b646f09555 [clang-format] Fix misplacement of `*` in declaration of pointer to struct
Fixes #55810

Differential Revision: https://reviews.llvm.org/D127873
2022-06-29 15:21:02 +08:00
sstwcw 2e32ff106e [clang-format] Handle Verilog preprocessor directives
Verilog uses the backtick instead of the hash.  In this revision
backticks are lexed manually and then get labeled as hashes so the logic
for handling C preprocessor stuff don't have to change.  Hashes get
labeled as identifiers for Verilog-specific stuff like delays.

Reviewed By: HazardyKnusperkeks

Differential Revision: https://reviews.llvm.org/D124749
2022-06-26 02:02:29 +00:00
sstwcw 9ed2e68c9a [clang-format] Parse Verilog if statements
This patch mainly handles treating `begin` as block openers.

While and for statements will be handled in another patch.

Reviewed By: HazardyKnusperkeks

Differential Revision: https://reviews.llvm.org/D123450
2022-06-26 01:52:15 +00:00
Björn Schäpers b3aeca3962 [clang-format] Further improve requires clause detection
If there is a typeish token before the requires, it can't be a requires
expression.

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

Differential Revision: https://reviews.llvm.org/D128496
2022-06-25 04:43:38 +02:00
owenca 7cb0bc8abf [clang-format] Handle more cases for RemoveBracesLLVM
Call mightFitOneOneline() on the line before the closing brace only
if it is at the level of the block.

Differential Revision: https://reviews.llvm.org/D127614
2022-06-13 12:10:35 -07:00
owenca 05d771021a [clang-format] Fix a bug in RemoveBracesLLVM
Remove the braces of an else block only if the r_brace of the block
is followed by an if.

Differential Revision: https://reviews.llvm.org/D127532
2022-06-11 01:12:11 -07:00
owenca 40a5d79a5c [clang-format][NFC] Format lib/Format and unittests/Format in clang
Reformat these directories with InsertBraces and RemoveBracesLLVM.

Differential Revision: https://reviews.llvm.org/D127366
2022-06-09 02:25:06 -07:00
owenca 5ead1f13a2 [clang-format] Remove braces of else blocks that embody an if block
Fixes #55663.

Differential Revision: https://reviews.llvm.org/D127260
2022-06-08 16:05:20 -07:00
owenca fc1c160f73 [clang-format] Handle attributes for for/while loops
Fixes #55853.

Differential Revision: https://reviews.llvm.org/D127054
2022-06-05 15:45:25 -07:00
owenca db15e31212 [clang-format] Handle do-while loops for RemoveBracesLLVM
Also updates the unit tests to match the updated LLVM Coding
Standards.

Differential Revision: https://reviews.llvm.org/D126758
2022-06-02 01:08:40 -07:00