#
5836472a |
| 26-Aug-2019 |
Martin Probst <martin@probst.io> |
clang-format: [JS] handle `as const`.
Summary: TypeScript 3.4 supports casting into a const type using `as const`:
const x = {x: 1} as const;
Previously, clang-format would insert a space afte
clang-format: [JS] handle `as const`.
Summary: TypeScript 3.4 supports casting into a const type using `as const`:
const x = {x: 1} as const;
Previously, clang-format would insert a space after the `const`. With this patch, no space is inserted after the sequence `as const`.
Reviewers: krasimir
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D66736
llvm-svn: 369916
show more ...
|
#
26a484f4 |
| 19-Mar-2019 |
Martin Probst <martin@probst.io> |
[clang-format] [JS] handle private members.
Addresses PR40999 https://bugs.llvm.org/show_bug.cgi?id=40999
Private fields and methods in JavaScript would get incorrectly indented (it sees them as pr
[clang-format] [JS] handle private members.
Addresses PR40999 https://bugs.llvm.org/show_bug.cgi?id=40999
Private fields and methods in JavaScript would get incorrectly indented (it sees them as preprocessor directives and hence left aligns them)
In this revision `#identifier` tokens `tok::hash->tok::identifier` are merged into a single new token `tok::identifier` with the `#` contained inside the TokenText.
Before:
``` class Example { pub = 1;
static pub2 = "foo"; static #priv2 = "bar";
method() { this.#priv = 5; }
static staticMethod() { switch (this.#priv) { case '1': break; } }
this.#privateMethod(); // infinite loop }
static #staticPrivateMethod() {} } ```
After this fix the code will be correctly indented
``` class Example { pub = 1; #priv = 2;
static pub2 = "foo"; static #priv2 = "bar";
method() { this.#priv = 5; }
static staticMethod() { switch (this.#priv) { case '1': #priv = 3; break; } }
#privateMethod() { this.#privateMethod(); // infinite loop }
static #staticPrivateMethod() {} } ```
NOTE: There might be some JavaScript code out there which uses the C processor to preprocess .js files http://www.nongnu.org/espresso/js-cpp.html. It's not clear how this revision or even private fields and methods would interact.
Patch originally by MyDeveloperDays (thanks!).
llvm-svn: 356449
show more ...
|
#
b274d3d7 |
| 19-Mar-2019 |
Martin Probst <martin@probst.io> |
[clang-format] [JS] Don't break between template string and tag
Before: const x = veryLongIdentifier `hello`; After: const x = veryLongIdentifier`hello`;
While it's allowed
[clang-format] [JS] Don't break between template string and tag
Before: const x = veryLongIdentifier `hello`; After: const x = veryLongIdentifier`hello`;
While it's allowed to have the template string and tag identifier separated by a line break, currently the clang-format output is not stable when a break is forced. Additionally, disallowing a line break makes it clear that the identifier is actually a tag for a template string.
Patch originally by mitchellwills (thanks!).
llvm-svn: 356447
show more ...
|
#
2946cd70 |
| 19-Jan-2019 |
Chandler Carruth <chandlerc@gmail.com> |
Update the file headers across all of the LLVM projects in the monorepo to reflect the new license.
We understand that people may be surprised that we're moving the header entirely to discuss the ne
Update the file headers across all of the LLVM projects in the monorepo to reflect the new license.
We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach.
Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository.
llvm-svn: 351636
show more ...
|
#
55b6d4b9 |
| 07-Jan-2019 |
Martin Probst <martin@probst.io> |
clang-format: [JS] support goog.requireType.
Summary: It's a new primitive for importing symbols, and should be treated like the (previously handled) `goog.require` and `goog.forwardDeclare`.
Revie
clang-format: [JS] support goog.requireType.
Summary: It's a new primitive for importing symbols, and should be treated like the (previously handled) `goog.require` and `goog.forwardDeclare`.
Reviewers: krasimir
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D56385
llvm-svn: 350516
show more ...
|
#
c1631019 |
| 20-Nov-2018 |
Krasimir Georgiev <krasimir@google.com> |
[clang-format] JS: don't treat is: as a type matcher
Summary: Clang-format is treating all occurences of `is` in js as type matchers. In some cases this is wrong, as it might be a dict key.
Reviewe
[clang-format] JS: don't treat is: as a type matcher
Summary: Clang-format is treating all occurences of `is` in js as type matchers. In some cases this is wrong, as it might be a dict key.
Reviewers: mprobst
Reviewed By: mprobst
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D54753
llvm-svn: 347307
show more ...
|
#
3315aed4 |
| 27-Sep-2018 |
Martin Probst <martin@probst.io> |
clang-format: [JS] conditional types.
Summary: This change adds some rudimentary support for conditional types. Specifically it avoids breaking before `extends` and `infer` keywords, which are subje
clang-format: [JS] conditional types.
Summary: This change adds some rudimentary support for conditional types. Specifically it avoids breaking before `extends` and `infer` keywords, which are subject to Automatic Semicolon Insertion, so breaking before them creates incorrect syntax.
The actual formatting of the type expression is odd, but there is as of yet no clear idea on how to format these.
See https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#conditional-types.
Reviewers: krasimir
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D52536
llvm-svn: 343179
show more ...
|
#
cc525e7b |
| 26-Sep-2018 |
Martin Probst <martin@probst.io> |
clang-format: [JS] space after parameter naming.
Summary: Previously: foo(/*bar=*/baz);
Now: foo(/*bar=*/ baz);
The run-in parameter naming comment is not intended in JS.
Reviewers: mboeh
clang-format: [JS] space after parameter naming.
Summary: Previously: foo(/*bar=*/baz);
Now: foo(/*bar=*/ baz);
The run-in parameter naming comment is not intended in JS.
Reviewers: mboehme
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D52535
llvm-svn: 343080
show more ...
|
#
123ca80b |
| 07-Aug-2018 |
Krasimir Georgiev <krasimir@google.com> |
[clang-format] comment reflow: add last line's penalty when ending broken
Summary: This fixes a bug in clang-format where the last line's penalty is not taken into account when its ending is broken.
[clang-format] comment reflow: add last line's penalty when ending broken
Summary: This fixes a bug in clang-format where the last line's penalty is not taken into account when its ending is broken. Usually the last line's penalty is handled by addNextStateToQueue, but in cases where the trailing `*/` is put on a newline, the contents of the last line have to be considered for penalizing.
Reviewers: mprobst
Reviewed By: mprobst
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D50378
llvm-svn: 339123
show more ...
|
#
f326b6b9 |
| 03-Aug-2018 |
Martin Probst <martin@probst.io> |
clang-format: [JS] don't break comments before any '{'
Summary: Previously, clang-format would avoid breaking before the first `{` found, but then happily break before subsequent '{'s on the line. T
clang-format: [JS] don't break comments before any '{'
Summary: Previously, clang-format would avoid breaking before the first `{` found, but then happily break before subsequent '{'s on the line. This change fixes that by looking for the first location that has no opening curly, if any.
This fixes the original commit by correcting the loop condition.
This reverts commit 66dc646e09b795b943668179c33d09da71a3b6bc.
Reviewers: krasimir
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D50249
llvm-svn: 338890
show more ...
|
#
608f136d |
| 03-Aug-2018 |
Tim Northover <tnorthover@apple.com> |
Revert "clang-format: [JS] don't break comments before any '{'"
This reverts commit r338837, it introduced an infinite loop on all bots.
llvm-svn: 338879
|
#
ec45bc2f |
| 03-Aug-2018 |
Martin Probst <martin@probst.io> |
clang-format: [JS] don't break comments before any '{'
Summary: Previously, clang-format would avoid breaking before the first `{` found, but then happily break before subsequent '{'s on the line. T
clang-format: [JS] don't break comments before any '{'
Summary: Previously, clang-format would avoid breaking before the first `{` found, but then happily break before subsequent '{'s on the line. This change fixes that by looking for the first location that has no opening curly, if any.
Reviewers: krasimir
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D50230
llvm-svn: 338837
show more ...
|
#
9d717813 |
| 02-Aug-2018 |
Martin Probst <martin@probst.io> |
clang-format: fix a crash in comment wraps.
Summary: Previously, clang-format would crash if it tried to wrap an overlong single line comment, because two parts of the code inserted a break in the s
clang-format: fix a crash in comment wraps.
Summary: Previously, clang-format would crash if it tried to wrap an overlong single line comment, because two parts of the code inserted a break in the same location.
/** heregoesalongcommentwithnospace */
This wasn't previously noticed as it could only trigger for an overlong single line comment that did have no breaking opportunities except for a whitespace at the very beginning.
This also introduces a check for JavaScript to not ever wrap a comment before an opening curly brace:
/** @mods {donotbreakbeforethecurly} */
This is because some machinery parsing these tags sometimes supports breaks before a possible `{`, but in some other cases does not. Previously clang-format was careful never to wrap a line with certain tags on it. The better solution is to specifically disable wrapping before the problematic token: this allows wrapping and aligning comments but still avoids the problem.
Reviewers: krasimir
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D50177
llvm-svn: 338706
show more ...
|
#
6a5c95bd |
| 30-Jul-2018 |
Krasimir Georgiev <krasimir@google.com> |
[clang-format] Indent after breaking Javadoc annotated line
Summary: This patch makes clang-format indent the subsequent lines created by breaking a long javadoc annotated line.
Reviewers: mprobst
[clang-format] Indent after breaking Javadoc annotated line
Summary: This patch makes clang-format indent the subsequent lines created by breaking a long javadoc annotated line.
Reviewers: mprobst
Reviewed By: mprobst
Subscribers: acoomans, cfe-commits
Differential Revision: https://reviews.llvm.org/D49797
llvm-svn: 338232
show more ...
|
#
c8b7a41a |
| 11-Jun-2018 |
Martin Probst <martin@probst.io> |
clang-format: [JS] strict prop init annotation.
Summary: TypeScript uses the `!` token for strict property initialization assertions, as in:
class X { strictPropAsserted!: string; }
clang-format: [JS] strict prop init annotation.
Summary: TypeScript uses the `!` token for strict property initialization assertions, as in:
class X { strictPropAsserted!: string; }
Previously, clang-format would wrap between the `!` and the `:` for overly long lines. This patch fixes that by generally preventing the wrap in that location.
Reviewers: krasimir
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D48030
llvm-svn: 334415
show more ...
|
#
7ebad4ea |
| 22-May-2018 |
Martin Probst <martin@probst.io> |
clang-format: [JS] do not wrap before any `is`.
Summary: `is` type annotations can occur at any nesting level. For example:
function x() { return function y(): a is B { ... }; }
Brea
clang-format: [JS] do not wrap before any `is`.
Summary: `is` type annotations can occur at any nesting level. For example:
function x() { return function y(): a is B { ... }; }
Breaking before the `is` above breaks TypeScript parsing the code. This change prevents the wrap.
Reviewers: krasimir
Subscribers: klimek, cfe-commits
Differential Revision: https://reviews.llvm.org/D47193
llvm-svn: 332968
show more ...
|
#
3538b39e |
| 15-May-2018 |
Nicola Zaghen <nicola.zaghen@imgtec.com> |
[clang] Update uses of DEBUG macro to LLVM_DEBUG.
The DEBUG() macro is very generic so it might clash with other projects. The renaming was done as follows: - git grep -l 'DEBUG' | xargs sed -i 's/\
[clang] Update uses of DEBUG macro to LLVM_DEBUG.
The DEBUG() macro is very generic so it might clash with other projects. The renaming was done as follows: - git grep -l 'DEBUG' | xargs sed -i 's/\bDEBUG\s\?(/LLVM_DEBUG(/g' - git diff -U0 master | ../clang/tools/clang-format/clang-format-diff.py -i -p1 -style LLVM
Explicitly avoided changing the strings in the clang-format tests.
Differential Revision: https://reviews.llvm.org/D44975
llvm-svn: 332350
show more ...
|
#
c9a918c5 |
| 04-Apr-2018 |
Mark Zeren <mzeren@vmware.com> |
[clang-format] In tests, expected code should be format-stable
Summary: Extend various verifyFormat helper functions to check that the expected text is "stable". This provides some protection agains
[clang-format] In tests, expected code should be format-stable
Summary: Extend various verifyFormat helper functions to check that the expected text is "stable". This provides some protection against bugs where formatting results are ocilating between two forms, or continually change in some other way.
Testing Done:
* Ran unit tests.
* Reproduced a known instability in preprocessor indentation which was caught by this new check.
Reviewers: krasimir
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D42034
llvm-svn: 329231
show more ...
|
#
446d6ec9 |
| 06-Mar-2018 |
Krasimir Georgiev <krasimir@google.com> |
[clang-format] fix handling of consecutive unary operators
Summary: Code that used to be formatted as `if (! + object) {` is now formatted as `if (!+object) {` (we have a particular object in our co
[clang-format] fix handling of consecutive unary operators
Summary: Code that used to be formatted as `if (! + object) {` is now formatted as `if (!+object) {` (we have a particular object in our codebase where unary `operator+` is overloaded to return the underlying value, which in this case is a `bool`)
We still preserve the TypeScript behavior where `!` is a trailing non-null operator. (This is already tested by an existing unit test in `FormatTestJS.cpp`)
It doesn't appear like handling of consecutive unary operators are tested in general, so I added another test for completeness
Patch contributed by @kevinl!
Reviewers: krasimir
Reviewed By: krasimir
Subscribers: klimek, cfe-commits
Differential Revision: https://reviews.llvm.org/D43312
llvm-svn: 326792
show more ...
|
#
110ecc70 |
| 19-Feb-2018 |
Martin Probst <martin@probst.io> |
clang-format: [JS] fix `of` detection.
Summary: `of` is only a keyword when after an identifier, but not when after an actual keyword.
Before: return of (a, b, c); After: return of(a, b, c)
clang-format: [JS] fix `of` detection.
Summary: `of` is only a keyword when after an identifier, but not when after an actual keyword.
Before: return of (a, b, c); After: return of(a, b, c);
Reviewers: djasper
Subscribers: cfe-commits, klimek
Differential Revision: https://reviews.llvm.org/D43440
llvm-svn: 325489
show more ...
|
#
f8e1f5c7 |
| 26-Jan-2018 |
Martin Probst <martin@probst.io> |
clang-format: [JS] Prevent ASI before [ and (.
Summary: JavaScript automatic semicolon insertion can trigger before [ and (, so avoid breaking before them if the previous token is likely to terminat
clang-format: [JS] Prevent ASI before [ and (.
Summary: JavaScript automatic semicolon insertion can trigger before [ and (, so avoid breaking before them if the previous token is likely to terminate an expression.
Reviewers: djasper
Subscribers: cfe-commits, klimek
Differential Revision: https://reviews.llvm.org/D42570
llvm-svn: 323532
show more ...
|
#
27b6603f |
| 30-Nov-2017 |
Martin Probst <martin@probst.io> |
clang-format: [JS] do not wrap after async/await.
Summary: Otherwise automatic semicolon insertion can trigger, i.e. wrapping produces invalid syntax.
Reviewers: djasper
Subscribers: klimek, cfe-c
clang-format: [JS] do not wrap after async/await.
Summary: Otherwise automatic semicolon insertion can trigger, i.e. wrapping produces invalid syntax.
Reviewers: djasper
Subscribers: klimek, cfe-commits
Differential Revision: https://reviews.llvm.org/D40642
llvm-svn: 319415
show more ...
|
#
c160cfaf |
| 25-Nov-2017 |
Martin Probst <martin@probst.io> |
clang-format: [JS] do not collapse short classes.
Summary: clang-format does not collapse short records, interfaces, unions, etc., but fails to do so if the record is preceded by certain modifiers (
clang-format: [JS] do not collapse short classes.
Summary: clang-format does not collapse short records, interfaces, unions, etc., but fails to do so if the record is preceded by certain modifiers (export, default, abstract, declare). This change skips over all modifiers, and thus handles all record definitions uniformly.
Before: export class Foo { bar: string; } class Baz { bam: string; }
After: export class Foo { bar: string; } class Baz { bam: string; }
Reviewers: djasper
Subscribers: klimek
Differential Revision: https://reviews.llvm.org/D40430
llvm-svn: 318976
show more ...
|
#
e8e27ca8 |
| 25-Nov-2017 |
Martin Probst <martin@probst.io> |
clang-format: [JS] handle semis in generic types.
Summary: TypeScript generic type arguments can contain object (literal) types, which in turn can contain semicolons:
const x: Array<{a: number;
clang-format: [JS] handle semis in generic types.
Summary: TypeScript generic type arguments can contain object (literal) types, which in turn can contain semicolons:
const x: Array<{a: number; b: string;} = [];
Previously, clang-format would incorrectly categorize the braced list as a block and terminate the line at the openening `{`, and then format the entire expression badly.
With this change, clang-format recognizes `<` preceding a `{` as introducing a type expression. In JS, `<` comparison with an object literal can never be true, so the chance of introducing false positives here is very low.
Reviewers: djasper
Subscribers: klimek, cfe-commits
Differential Revision: https://reviews.llvm.org/D40424
llvm-svn: 318975
show more ...
|
#
6c38ef90 |
| 25-Nov-2017 |
Martin Probst <martin@probst.io> |
clang-format: [JS] handle `for` as object label.
Summary: Previously, clang-format would fail formatting `{for: 1}`.
Reviewers: djasper
Subscribers: klimek
Differential Revision: https://reviews.
clang-format: [JS] handle `for` as object label.
Summary: Previously, clang-format would fail formatting `{for: 1}`.
Reviewers: djasper
Subscribers: klimek
Differential Revision: https://reviews.llvm.org/D40441
llvm-svn: 318974
show more ...
|