163 Commits

Author SHA1 Message Date
Owen Pan
51f1681424
[clang-format] Don't merge a short block for SBS_Never (#88238)
Also fix unit tests.

Fixes #87484.
2024-04-10 19:06:29 -07:00
Owen Pan
bcf849b1e5
[clang-format] instanceof is a keyword only in Java/JavaScript (#88085)
Fixes #87907.
2024-04-09 20:00:03 -07:00
Owen Pan
58323de2e5
[clang-format] Correctly annotate braces in macros (#87953)
Also fix unit tests and reformat polly.

Fixes #86550.
2024-04-09 19:59:36 -07:00
Owen Pan
7c9c38eaa9
[clang-format] Fix a regression in annotating BK_BracedInit (#87450)
Fixes #86539.
2024-04-04 17:55:18 -07:00
Owen Pan
a7f4576ff4
[clang-format] Fix a regression in annotating TrailingReturnArrow (#86624)
Fixes #86559.
2024-04-02 14:48:14 -07:00
Hirofumi Nakamura
e54af60816
[clang-format] Added AlignConsecutiveTableGenBreakingDAGArgColons option. (#86150)
The option to specify the style of alignment of the colons inside TableGen's DAGArg.
2024-03-22 23:11:36 +09:00
Owen Pan
6f31cf51df Revert "[clang-format][NFC] Eliminate the IsCpp parameter in all functions (#84599)"
This reverts c3a1eb6207d8 (and the related commit f3c5278efa3b) which makes
cleanupAroundReplacements() no longer thread-safe.
2024-03-19 18:06:59 -07:00
Hirofumi Nakamura
0c423af59c
[clang-format] Add Options to break inside the TableGen DAGArg. (#83149)
Add two options to control the line break inside TableGen DAGArg.
- TableGenBreakInsideDAGArg
- TableGenBreakingDAGArgOperators
2024-03-19 00:13:59 +09:00
Owen Pan
7c460c6205
[clang-format] Fix a bug in annotating FunctionDeclarationName (#85361)
A name is not a FunctionDeclarationName if it's preceded by an
Objective-C keyword.

Fixes #84578.
2024-03-15 19:25:41 -07:00
Owen Pan
c3a1eb6207 Reland [clang-format][NFC] Eliminate the IsCpp parameter in all functions (#84599)
Initialize IsCpp in LeftRightQualifierAlignmentFixer ctor.
2024-03-14 19:44:40 -07:00
Mehdi Amini
b0d1e32ca2
Revert "[clang-format][NFC] Eliminate the IsCpp parameter in all functions" (#85353)
Reverts llvm/llvm-project#84599

This broke the presubmit bot.
2024-03-14 19:33:11 -07:00
Owen Pan
0c07102927
[clang-format][NFC] Eliminate the IsCpp parameter in all functions (#84599) 2024-03-14 18:56:24 -07:00
Owen Pan
0baef3b18c
[clang-format] Handle common C++ non-keyword types as such (#83709)
Fixes #83400.
2024-03-08 19:42:35 -08:00
Owen Pan
8de230093f
[clang-format] Correctly annotate braces of empty ctors/dtors (#82097)
Also reformat Polly.

Fixes #79834.
2024-02-19 12:41:22 -08:00
Hirofumi Nakamura
6a471611a4
[clang-format] Support of TableGen value annotations. (#80299)
This implements the annotation of the values in TableGen.
The main changes are,

- parseTableGenValue(), the simplified parser method for the syntax of
values.
- modified consumeToken() to parseTableGenValue in 'if', 'assert' and
after '='.
- modified parseParens() to call parseTableGenValue inside.
- modified parseSquare() to to call parseTableGenValue inside, with
skipping separator tokens.
- modified parseAngle() to call parseTableGenValue inside, with skipping
separator tokens.
2024-02-12 23:27:09 +09:00
XDeme
7e7f118404
[clang-format] Handles Elaborated type specifier for enum in trailing return (#80085)
Fixes llvm/llvm-project#80062
2024-02-01 14:11:14 -03:00
Emilia Kond
9b68c095d6
[clang-format] Allow decltype in requires clause (#78847)
If clang-format is not sure whether a `requires` keyword starts a
requires clause or a requires expression, it looks ahead to see if any
token disqualifies it from being a requires clause. Among these tokens
was `decltype`, since it fell through the switch.

This patch allows decltype to exist in a require clause.

I'm not 100% sure this change won't have repercussions, but that just
means we need more test coverage!

Fixes https://github.com/llvm/llvm-project/issues/78645
2024-02-01 08:00:45 +02:00
Hirofumi Nakamura
0058263600
[clang-format] Support of TableGen tokens with unary operator like form, bang operators and numeric literals. (#78996)
Adds the support for tokens that have forms like unary operators.
- bang operators:  `!name`
- cond operator: `!cond`
- numeric literals: `+1`, `-1`
cond operator are one of bang operators but is distinguished because it has very specific syntax.
2024-01-31 00:30:37 +09:00
Owen Pan
f826f55b2a
[clang-format] Fix a bug in AnnotatingParser::rParenEndsCast() (#79549)
Fixes #78965.
2024-01-26 18:32:03 -08:00
Emilia Kond
88d1de5ec6
[clang-format][NFC] Unify token size tests to use ASSERT_EQ 2024-01-22 14:53:47 +02:00
Hirofumi Nakamura
df4ba00c7b
[clang-format] Support of TableGen statements in unwrapped line parser (#78846)
Make TableGen's statements to be parsed considering their structure.
- Avoid to parse label
- Avoid class from being parsed as c++'s class
- Support if statement of the form `if <cond> then { ... }` 
- Support defset statement of the form `defset <type> <name> {}`

---------

Co-authored-by: Björn Schäpers <github@hazardy.de>
2024-01-22 21:35:01 +09:00
XDeme
a464e05109
[clang-format] Handle templated elaborated type specifier in function… (#77013)
… return type.

The behavior now is consistent with the non template version.
Enabled and updated old test.
2024-01-20 14:47:58 -08:00
Hirofumi Nakamura
fcb6737f82
[clang-format] Support of TableGen identifiers beginning with a number. (#78571)
TableGen allows the identifiers beginning with a number.
This patch add the support of the recognition of such identifiers.
2024-01-20 21:15:58 +09:00
Hirofumi Nakamura
e3702f6225
[clang-format] TableGen multi line string support. (#78032)
Support the handling of TableGen's multiline string (code) literal.
That has the form, 
[{ this is the string possibly with multi line... }]
2024-01-17 21:20:35 +09:00
Emilia Kond
791637e782
[clang-format] Don't allow casts in front of ampamp (#77704)
clang-format performs a heuristic to see if a right parenthesis is the
parenthesis of a cast expression. This check never looked ahead to see
if the next token is an ampamp && token. This resulted in the paren
being set as an CastRParen, and the following ampamp got annotated as an
UnaryOperator!

Since && can never be a unary operator is standard C++, this patch
forbids the right paren from ever becoming a cast.

Fixes https://github.com/llvm/llvm-project/issues/77680
2024-01-12 03:47:37 +02:00
Kazu Hirata
cf3421de58 [Format] Fix a warning
This patch fixes:

  clang/unittests/Format/TokenAnnotatorTest.cpp:2181:29: error: lambda
  capture 'Style' is not used [-Werror,-Wunused-lambda-capture]
2024-01-11 12:09:01 -08:00
Hirofumi Nakamura
0cc31579e0
[clang-format] TableGen keywords support. (#77477)
Add TableGen keywords to the additional keyword list of the formatter.

This pull request is the splited part from
https://github.com/llvm/llvm-project/pull/76059 .
2024-01-11 20:07:49 +01:00
XDeme
093e6bdd4b
[clang-format] Fix crash involving array designators (#77045)
Fixes llvm/llvm-project#76716
Fixes parsing of `[0]{}`. Before this patch it was begin parsed as a
lambda, now it is correctly parsed as a designator initializer.
2024-01-10 19:46:11 -08:00
kadir çetinkaya
27f547968c
[clang-format] Break after string literals with trailing line breaks (#76795)
This restores a subset of functionality that was forego in
d68826dfbd987377ef6771d40c1d984f09ee3b9e.

Streaming multiple string literals is rare enough in practice, hence
that change makes sense in general. But it seems people were
incidentally relying on this for having line breaks after string
literals that ended with `\n`.

This patch tries to restore that behavior to prevent regressions in the
upcoming LLVM release, until we can implement some configuration based
approach as proposed in https://github.com/llvm/llvm-project/pull/69859.
2024-01-08 11:11:02 +01:00
Owen Pan
f8f8926054
[clang-format] Fix a bug in annotating function declaration names (#76206)
Annotates function declaration names having unnamed parameters.
2023-12-22 22:51:00 -08:00
XDeme
9512d6d213
[clang-format] Fix parsing of operator<() {} (#75144)
Fixes #74876.

During the parsing of `operator<(Foo&) {}`, there was no handling for
the operator<, so it called `consumeToken()` again, causing the
`AnnotationParser::Scopes` to have one additional left brace each time
it tried to parse it, leaving it unbalanced.
Because of this, in the following code:
```cpp
class Foo {
  void operator<(Foo&) {}
  Foo& f;
};
```
The `&` in the reference member, was being interpreted as
`TT_BinaryOperator` instead of `TT_PointerOrReference`.
2023-12-13 11:57:56 -08:00
Emilia Kond
a112921d88
[clang-format] Don't skip stringizing when determining brace kind (#73886)
PR #69473 introduced skipping PP directives when determining the brace
kind of an lbrace. However, it did so by skipping to the end of the line
when encountering a hash character. This means it also skipped to the
end of line when encountering a macro stringizing operator, which,
unlike PP directives, don't have effect until the end of line.

This led to cases where the rbrace could be completely skipped if it was
on the same line as a stringizing operator.

This patch skips hash characters if we're already in a PP directive, as
you can't define a macro inside of a macro

Fixes https://github.com/llvm/llvm-project/issues/72662
2023-11-30 21:26:39 +02:00
sstwcw
3af82b3962
[clang-format] Add spaces around the Verilog implication operator (#71352)
The Verilog implication operator `->` is a binary operator meaning
either the left hand side is false or the right hand side is true.
Previously it was treated as the C++ struct member operator.

I didn't even know it existed when I added the operator formatting part.
And I didn't check all the tests for all the operators I added. That is
how the bad test got in.
2023-11-29 15:17:59 +00:00
Owen Pan
edad025d1e
[clang-format] Correctly annotate braces of empty functions (#72733)
Also fixed some existing test cases.

Fixed #57305.
Fixed #58251.
2023-11-19 15:10:27 -08:00
Owen Pan
cb3a605c5d
[clang-format] Fix a bug in isStartOfName() on macro definitions (#72768)
Fixed #72751.
2023-11-19 15:08:54 -08:00
Owen Pan
eaff083035
[clang-format] Fix more bugs in isStartOfName() (#72336)
Fixed #72264.
2023-11-15 14:31:30 -08:00
Gedare Bloom
a852869398 [clang-format] Fix a bug in parsing function/variable names
Function and variable names are not detected when there is a
__attribute__((x)) preceding the name.

Fixes #64137.

Differential Revision: https://reviews.llvm.org/D156370
2023-11-13 19:35:28 -08:00
Emilia Kond
063e3fe648
[clang-format] Skip PP directives when determining brace kind (#69473)
Pull request #65409 changed the brace kind heuristic to not treat a
preprocessor if directive as a in statement, however, this caused some
regressions.

If the contents of a brace don't immediately determine the brace kind,
the heuristic will look at the characters immediately before and after
the closing brace to determine the brace type.

Unfortunately, if the closing brace was preceded by a preprocessor
directive, for example `#endif`, the preceding token was `endif`, seen
as just an identifier, so the braces were understood as a braced list.

This patch fixes this behaviour by skipping all preprocessor directives
when calculating brace types. Comments were already being skipped, so
now preprocessor lines are skipped alongside comments.

Fixes https://github.com/llvm/llvm-project/issues/68404
2023-11-03 05:51:20 +02:00
Björn Schäpers
c280bed85a
[clang-format] Fix annotating annotations after requires clause
Fixes #69325.
2023-10-31 13:10:46 +01:00
Owen Pan
e00d32afb9
[clang-format][NFC] Delete TT_LambdaArrow (#70519)
It's one type of TT_TrailingReturnArrow.
2023-10-28 12:48:00 -07:00
Owen Pan
88934a82dc [clang-format][NFC] Remove extraneous newlines in some unit test files 2023-10-26 21:43:27 -07:00
Björn Schäpers
a95d4b7950
[clang-format] Annotate do while while
So we can differentiate on the while keyword between a do-while-loop and
a normal while-loop.
2023-10-20 21:46:40 +02:00
Owen Pan
0ae998c4ae
[clang-format] Fix a bug in annotating TrailingReturnArrow (#69249)
Skip TrailingAnnotation when looking for TrailingReturnArrow.

Fixes #69234.
2023-10-18 14:04:51 -07:00
Emilia Kond
5f4ed780d3
[clang-format] Allow default values for template parameters in lambda (#69052)
Previously, upon encountering an equals sign while parsing a lambda in
the UnwrappedLineParser, it would fall through and fail. This caused any
lambda template with a default argument for a template parameter to be
annotated as an ArraySubscriptLSquare.

This patch allows equals signs in the UnwrappedLineParser if we're
currently in a template parameter list. This resolved a FIXME that was
in the lambda parsing function.

This patch seems deceptively easy, it's likely it doesn't solve the
FIXME entirely, or causes other issues (the FIXME itself mentions
something about Objective-C, which I cannot comment about). However this
patch is sufficient to fix the below issue.

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

---------

Co-authored-by: Owen Pan <owenpiano@gmail.com>
2023-10-17 00:38:33 +03:00
Jared Grubb
7f881a2abe [clang-format] Treat AttributeMacro more like __attribute__
There are two parts to this fix:
- Annotate the paren after an AttributeMacro as an AttributeLParen.
- Treat an AttributeMacro-without-paren the same as one with a paren.

I added a new test-case to differentiate a macro that is or is-not an
AttributeMacro; also handled whether ColumnLimit is set to infinite (0) or a
finite value, as part of this patch is in ContinuationIndenter.

Closes #68722.

Differential Revision: https://reviews.llvm.org/D145262
2023-10-15 15:58:24 -07:00
Owen Pan
6c7cf74a75 Revert "[clang-format] Treat AttributeMacro more like __attribute__"
This reverts commit 6f46bcc609f14121e6942763ba9871f98541ea0e.
2023-10-15 15:52:17 -07:00
Jared Grubb
6f46bcc609 [clang-format] Treat AttributeMacro more like __attribute__
There are two parts to this fix:
- Annotate the paren after an AttributeMacro as an AttributeLParen.
- Treat an AttributeMacro-without-paren the same as one with a paren.

I added a new test-case to differentiate a macro that is or is-not an
AttributeMacro; also handled whether ColumnLimit is set to infinite (0) or a
finite value, as part of this patch is in ContinuationIndenter.

Closes #68722.

Differential Revision: https://reviews.llvm.org/D145262
2023-10-15 15:44:57 -07:00
Björn Schäpers
a8896e57f1
[clang-format][NFC] Annotate control statement r_braces (#68621)
Annotating switch braces for the first time.

Also in preparation of #67906.
2023-10-13 21:07:33 +02:00
Björn Schäpers
b7abab2f28
Annotate enum r brace
In preparation of #67906.
2023-10-09 19:53:03 +02:00
Björn Schäpers
38c31d7e31
[clang-format][NFC] Annotate more r_braces
In preparation of #67906.
2023-10-09 19:52:15 +02:00