Martin Probst
0eb40cfa6f
clang-format: [JS] post-fix non-null assertion operator.
...
Summary:
Do not insert whitespace preceding the "!" postfix operator. This is an
incomplete fix, but should cover common usage.
Reviewers: djasper
Subscribers: cfe-commits, klimek
Differential Revision: http://reviews.llvm.org/D21204
llvm-svn: 272524
2016-06-13 00:49:54 +00:00
Martin Probst
2ec2324f3c
clang-format: [JS] recognized named functions in AnnotatingParser.
...
Summary: This also fixes union type formatting in function parameter types.
Before: function x(path: number| string) {}
After: function x(path: number|string) {}
Reviewers: djasper
Subscribers: klimek, cfe-commits
Differential Revision: http://reviews.llvm.org/D21206
llvm-svn: 272330
2016-06-09 22:49:04 +00:00
Daniel Jasper
2b4d6eae39
clang-format: Fix bug in function ref qualifier identification.
...
.. and simplify it.
Before:
void A::f()&& {}
void f() && {}
After:
void A::f() && {}
void f() && {}
llvm-svn: 272124
2016-06-08 08:23:46 +00:00
Martin Probst
7ea9b6d783
clang-format: [JS] Support shebang lines on the very first line.
...
Summary:
Shebang lines (`#!/bin/blah`) can be used in JavaScript scripts to indicate
they should be run using e.g. node. This change treats # lines on the first line
as line comments.
Reviewers: djasper
Subscribers: klimek, cfe-commits
Differential Revision: http://reviews.llvm.org/D20632
llvm-svn: 271185
2016-05-29 14:41:36 +00:00
Daniel Jasper
99302edd1c
clang-format: Allow splitting the line after /**/-comments.
...
While it might change the meaning of the comment in rare circumstances,
it is better than violating the column limit.
llvm-svn: 270975
2016-05-27 08:59:34 +00:00
Daniel Jasper
997cf2fea8
clang-format: [JS] Treat "for" as a reserved word after a ".".
...
Otherwise, clang-format can get confused with statements like:
x.for = 1;
llvm-svn: 270188
2016-05-20 06:16:01 +00:00
Daniel Jasper
5dbcd3bd07
clang-format: [JS] Fix spacing in destructuring assignments.
...
Before:
const[a, b, c] = [1, 2, 3];
After:
const [a, b, c] = [1, 2, 3];
llvm-svn: 270029
2016-05-19 07:18:07 +00:00
Daniel Jasper
e2fab13313
clang-format: Fix enumerator case ranges.
...
Before:
case a... b: break;
After:
case a ... b: break;
llvm-svn: 270027
2016-05-19 06:19:17 +00:00
Eric Liu
ce5e4bc7ac
Make clang-format cleaner remove redundant commas in list and redundant colon in constructor initializer.
...
Summary: Make clang-format cleaner remove redundant commas/colons in constructor initializer list.
Reviewers: klimek, djasper
Subscribers: cfe-commits, klimek
Differential Revision: http://reviews.llvm.org/D19804
llvm-svn: 269888
2016-05-18 08:02:56 +00:00
Daniel Jasper
2b2c967c1a
clang-format: Fix space after argument comments.
...
Before:
f(/*a=*/a, /*b=*/ ::b);
After:
f(/*a=*/a, /*b=*/::b);
llvm-svn: 268879
2016-05-08 18:14:01 +00:00
Martin Probst
5f8445b32a
clang-format: [JS] generator and async functions.
...
For generators, see:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_generators
async functions are not quite in the spec yet, but stage 3 and already widely used:
http://tc39.github.io/ecmascript-asyncawait/
Reviewers: djasper
Subscribers: klimek
Differential Revision: http://reviews.llvm.org/D19204
llvm-svn: 267368
2016-04-24 22:05:09 +00:00
Daniel Jasper
c3ff0cd8a2
clang-format: Improve heuristics to detect function declarations/definitions.
...
Specifically understand ellipses in parameter lists and treat trailing
reference qualifiers and the "{" as signals.
llvm-svn: 266599
2016-04-18 11:31:21 +00:00
Daniel Jasper
19bc1d007a
clang-format: Fix incorrect function annotation detection.
...
Before:
MACRO(
abc).function() // wrap
<< abc;
After:
MACRO(abc).function() // wrap
<< abc;
llvm-svn: 265540
2016-04-06 13:58:09 +00:00
Daniel Jasper
94b1bdf91a
clang-format: Fix cast detection on "this".
...
Before:
auto x = (X) this;
After:
auto x = (X)this;
This fixes llvm.org/PR27198.
llvm-svn: 265385
2016-04-05 11:46:06 +00:00
Daniel Jasper
8fc7a1e992
clang-format: [JS] do not wrap ES6 imports/exports.
...
"import ... from '...';" and "export ... from '...';" should be treated
the same as goog.require/provide/module/forwardDeclare calls.
Patch by Martin Probst.
llvm-svn: 264055
2016-03-22 14:32:20 +00:00
Daniel Jasper
91b1d1ab6c
clang-format: [JS] no space in union and intersection types.
...
The operators | and & in types, as opposed to the bitwise operators,
should not have whitespace around them (e.g. `Foo<Bar|Baz>`).
Patch by Martin Probst. Thank you.
llvm-svn: 263961
2016-03-21 17:57:31 +00:00
Daniel Jasper
a4607e1b88
clang-format: [JS] Fix incorrect spacing around contextual keywords.
...
Before:
x.of ();
After:
x.of();
llvm-svn: 263710
2016-03-17 12:17:59 +00:00
Daniel Jasper
abd1f57453
clang-format: [JS] Optionally re-quote string literals.
...
Turns "foo" into 'foo' (or vice versa, depending on configuration).
This makes it more convenient to follow the Google JavaScript style
guide:
https://google.github.io/styleguide/javascriptguide.xml?showone=Strings#Strings
This functionality is behind the option "JavaScriptQuotes", which can be:
* "leave" (no re-quoting)
* "single" (change to single quotes)
* "double" (change to double quotes)
This also changes single quoted JavaScript string literals to be treated
as tok::string_literal, not tok::char_literal, which fixes two unrelated
tests.
Patch by Martin Probst. Thank you.
llvm-svn: 262534
2016-03-02 22:44:03 +00:00
Daniel Jasper
56ef6aca2b
[clang-format] Detect constructor initializers preceded by noexcept.
...
Patch by Erik Kessler, thank you.
llvm-svn: 262402
2016-03-01 21:41:58 +00:00
Daniel Jasper
f9168de892
clang-format: Increase the penalty for breaking between array subscripts.
...
Before:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[aaaaaaaaaaaaaaaaaaaaaaa]
[a].aaaaaaaaaaaaaaaaaaaaaa();
After:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[aaaaaaaaaaaaaaaaaaaaaaa][a]
.aaaaaaaaaaaaaaaaaaaaaa();
llvm-svn: 262292
2016-03-01 04:19:55 +00:00
Daniel Jasper
b18425bf96
clang-format: [JS] Support quoted object literal keys.
...
Before:
var x = {
a: a,
b: b, 'c': c,
};
After:
var x = {
a: a,
b: b,
'c': c,
};
llvm-svn: 262291
2016-03-01 04:19:47 +00:00
Daniel Jasper
02cbeb2222
clang-format: [JS] treat forwardDeclare as an import/export statement.
...
Patch by Martin Probst. Thank you.
llvm-svn: 261528
2016-02-22 15:06:53 +00:00
Daniel Jasper
b7fda11572
clang-format: [JS] Support for (.. of ..) loops.
...
Before:
for (var i of[2, 3]) {}
After:
for (var i of [2, 3]) {}
llvm-svn: 260518
2016-02-11 13:24:15 +00:00
Daniel Jasper
88db760e4b
clang-format: Make it more expensive to break template parameters.
...
In particular, make it more expensive than breaking after the return
type of a function definition/declaration.
Before:
template <typename T>
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaa<
T>::aaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa);
After:
template <typename T>
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaa<T>::aaaaaaaaaaaaa(
aaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa);
llvm-svn: 260497
2016-02-11 06:43:01 +00:00
Daniel Jasper
9f4c9d418f
clang-format: [JS] Don't count shortened object literals as blocks.
...
Before:
f({a},
() => {
g(); //
});
After:
f({a}, () => {
g(); //
});
llvm-svn: 260060
2016-02-07 22:17:13 +00:00
Daniel Jasper
0c9772e874
clang-format: Fix corner case in template detection.
...
Before:
f(a.operator() < A > ());
After:
f(a.operator()<A>());
llvm-svn: 259884
2016-02-05 14:17:16 +00:00
Daniel Jasper
d27df3dd3d
clang-format: Fix incorrect pointer detection in lambdas in constructor
...
initializers.
Before:
Constructor() : member([](A *a, B * b) {}) {}
After:
Constructor() : member([](A *a, B *b) {}) {}
llvm-svn: 259353
2016-02-01 11:21:07 +00:00
Daniel Jasper
1ce41112a4
clang-format: [JS] Treat "in" as a proper operator.
...
llvm-svn: 259350
2016-02-01 11:20:47 +00:00
Manuel Klimek
27f278186d
Fix formatting of fully qualified names in array subscripts.
...
Before:
a[ ::b::c];
After:
a[::b::c];
llvm-svn: 258123
2016-01-19 14:05:32 +00:00
Daniel Jasper
11a876533e
clang-format: [JS] Fix incorrect line break leading to semicolon insertion.
...
clang-format only works for JavaScript code, if all the semicolons are
present anyway, so this linebreak can never be desired.
Before (with appropriate statement lengths or column limit):
return
[ aaa ];
After:
return [
aaaa
];
llvm-svn: 257741
2016-01-14 05:37:52 +00:00
Daniel Jasper
df51f2e634
clang-format: Fix overloading "operator," definitions more thoroughly.
...
Before:
aaaaaaaaaaaaaaaaaaaaaa operator,(aaaaaaaaaaaaaaaaaaaaa &
aaaaaaaaaaaaaaaaaaaaaaaaaa) const;
After:
aaaaaaaaaaaaaaaaaaaaaa operator,(
aaaaaaaaaaaaaaaaaaaaa &aaaaaaaaaaaaaaaaaaaaaaaaaa) const;
llvm-svn: 257330
2016-01-11 12:55:33 +00:00
Daniel Jasper
804a276fcf
clang-format: Support definitions/declarations of operator,.
...
Before:
bool operator, ();
After:
bool operator,();
llvm-svn: 257256
2016-01-09 15:56:40 +00:00
Daniel Jasper
f412e26d04
clang-format: [JS] Prefer wrapping before the TypeScript return type
...
over wrapping before parameters.
Before:
function someFunc(
args: string[]): {longReturnValue: string[]} {}
After:
function someFunc(args: string[]):
{longReturnValue: string[]} {}
llvm-svn: 257162
2016-01-08 10:51:24 +00:00
Daniel Jasper
54353dac75
clang-format: Support weird lambda macros.
...
Before:
MACRO((AA & a) { return 1; });
After:
MACRO((AA &a) { return 1; });
llvm-svn: 257062
2016-01-07 14:36:11 +00:00
Daniel Jasper
00492f96bf
clang-format: Improve line wrapping behavior in call sequences.
...
r256750 has been leading to an undesired behavior:
aaaaaaaaaa
.aaaaaaaaaaaaaaaaaaaaaaaa.aaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
This change increases penalty for wrapping before member accesses that aren't
calls. Thus, this is again formatted as (as it has been before r256750):
aaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaa.aaaaaa(
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
llvm-svn: 256830
2016-01-05 13:03:50 +00:00
Daniel Jasper
5e27146df7
clang-format: [JS] Support more ES6 default exports.
...
llvm-svn: 256759
2016-01-04 16:10:36 +00:00
Daniel Jasper
b14f6675da
clang-format: [JS] Support ES6 exports of array literals.
...
Before:
export default[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb];
export default[];
After:
export default [
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
];
export default [];
llvm-svn: 256758
2016-01-04 15:51:56 +00:00
Daniel Jasper
ebcb71fb87
clang-format: [JS] Improve empty array literal detection.
...
Previously, the [] in the following example were recognized as an array
subscript leading to weird indentation.
Before:
var aaaa = aaaaa || // wrap
[];
After:
var aaaa = aaaaa || // wrap
[];
llvm-svn: 256753
2016-01-04 13:11:41 +00:00
Daniel Jasper
42011b2106
clang-format: Fix corner case in builder-type call formatting.
...
Before:
return aaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa,
aaaaaaaaaaaaaaaaa)
.aaaa(aaaaaaaaaaaaaa);
After:
return aaaaaaaaaaaaaaaa
.aaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaa)
.aaaa(aaaaaaaaaaaaaa);
llvm-svn: 256750
2016-01-04 12:41:11 +00:00
Daniel Jasper
9c8a774c48
clang-format: Fix corner case for lambda assignments.
...
Before:
std::function<std::string(const std::string &)> my_lambda = [](
const string &s) { return s; };
After:
std::function<std::string(const std::string &)> my_lambda =
[](const string &s) { return s; };
llvm-svn: 256739
2016-01-04 07:29:40 +00:00
Daniel Jasper
06a269574c
clang-format: Fix corner-case in ObjC method declaration formatting
...
Before:
- (void)shortf:(GTMFoo *)theFoo
longKeyword:(NSRect)theRect
longerKeyword:(float)theInterval
error:(NSError **)theError {
}
After:
- (void)shortf:(GTMFoo *)theFoo
longKeyword:(NSRect)theRect
longerKeyword:(float)theInterval
error:(NSError **)theError {
}
llvm-svn: 256738
2016-01-04 07:29:07 +00:00
Daniel Jasper
ffbad0e8aa
clang-format: [Proto] Basic support for options with <> for repeated fields.
...
llvm-svn: 256737
2016-01-04 07:28:12 +00:00
Daniel Jasper
ccff4d1e60
clang-format: [Proto] Improve wrapping of message field attributes.
...
Before:
optional AAA aaa = 1 [foo =
{
key: "a" //
},
bar = {
key: "a" //
}];
After:
optional AAA aaa = 1 [
foo = {
key: "a" //
},
bar = {
key: "a" //
}
];
llvm-svn: 256736
2016-01-04 07:27:33 +00:00
Daniel Jasper
e1afb9b8ee
clang-format: Slightly row back on r256343 by increasing penalty for
...
breaking between array subscripts.
Before:
if (aaaaaaaaaaaaaaaaaaaaaaaa && aaaaaaaaaaaaaaaaaaa[aaaaaaaaaaaaa]
[aaaaaaaaaaaaa])
After:
if (aaaaaaaaaaaaaaaaaaaaaaaa &&
aaaaaaaaaaaaaaaaaaa[aaaaaaaaaaaaa][aaaaaaaaaaaaa])
llvm-svn: 256640
2015-12-30 12:23:00 +00:00
Daniel Jasper
779c66f3ca
clang-format: [JS] Support TypeScript 1.6 user defined type guards.
...
Before:
function foo(check: Object): check
is{foo: string, bar: string, baz: string, foobar: string} {
return 'bar' in check;
}
After:
function foo(check: Object):
check is {foo: string, bar: string, baz: string, foobar: string} {
return 'bar' in check;
}
llvm-svn: 256631
2015-12-30 08:00:58 +00:00
Daniel Jasper
a85c331e8f
clang-format: Fix incorrect function type detection.
...
Before:
int x = f (&h)();
After:
int x = f(&h)();
llvm-svn: 256488
2015-12-28 07:44:25 +00:00
Daniel Jasper
362a1bfcff
clang-format: Lower penalty for breaking between array subscripts.
...
Before:
aaaaaaaaaaaaaaaaaaaaaaaaa[aaaaaaaaaaa(aaaaaaaaaaaa)][bbbbbbbbbbb(
bbbbbbbbbbbb)]
After:
aaaaaaaaaaaaaaaaaaaaaaaaa[aaaaaaaaaaa(aaaaaaaaaaaa)]
[bbbbbbbbbbb(bbbbbbbbbbbb)]
llvm-svn: 256343
2015-12-23 18:01:43 +00:00
Daniel Jasper
95516cd380
clang-format: Fix incorrect pointer detection.
...
Before:
return * this += 1;
After:
return *this += 1;
llvm-svn: 256342
2015-12-23 18:01:29 +00:00
Zachary Turner
448592eeac
Support AlwaysBreakAfterReturnType
...
This changes the behavior of AlwaysBreakAfterDeclarationReturnType
so that it supports breaking after declarations, definitions, or
both.
Differential Revision: http://reviews.llvm.org/D10370
Reviewed By: Daniel Jasper
llvm-svn: 256046
2015-12-18 22:20:15 +00:00
Daniel Jasper
f901a57cda
clang-format: Make wrapping after "./->" cheaper, even if the element
...
before it is not a closing parenthesis.
Otherwise, this frequently leads to "hanging" indents that users
perceive as "weird".
Before:
return !soooooooooooooome_map.insert(
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
.second;
After:
return !soooooooooooooome_map
.insert(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
.second;
llvm-svn: 254933
2015-12-07 19:50:48 +00:00