Commit Graph

686 Commits

Author SHA1 Message Date
Manuel Klimek 20e0af6b62 Remove all computation of structural errors in clang-format's line parser.
We were already ignoring those already.

llvm-svn: 236591
2015-05-06 11:56:29 +00:00
Daniel Jasper e2408e37db clang-format: Fix another assertion discovered by the fuzzer.
In the process, fix an old todo that I don't really know how to write
tests for. The problem is that Clang's lexer creates very strange token
sequences for these. However, the new approach seems generally better
and easier to read so I am submitting it nonetheless.

llvm-svn: 236589
2015-05-06 11:16:43 +00:00
Daniel Jasper 66cb8c503f clang-format: NFC: Delete FormatToken::IsForEachMacro. Use a TokenType instead.
llvm-svn: 236415
2015-05-04 09:22:29 +00:00
Daniel Jasper f69b922e57 clang-format: [JS] Fix calculation of template string width.
OriginalColumn might not be set, so fall back to Location and SourceMgr
in case it is missing. Also initialize end column in case the token is
multi line, but it's the ` token itself that starts the multi line.

Patch by Martin Probst, thank you!

llvm-svn: 236383
2015-05-02 08:05:38 +00:00
Daniel Jasper a4499133b1 clang-format: Add ability to align assignment operators.
In Objective-C some style guides use a style where assignment operators are
aligned, in an effort to increase code readability. This patch adds an option
to the format library which allows this functionality. It is disabled by
default for all the included styles, so it must be explicitly enabled.

The option will change code such as:
  - (void)method {
      NSNumber *one = @1;
      NSNumber *twentyFive = @25;
  }

to:
  - (void)method {
      NSNumber *one        = @1;
      NSNumber *twentyFive = @25;
  }

Patch by Matt Oakes. Thank you!

Accidentally reformatted all the tests...

llvm-svn: 236100
2015-04-29 13:06:49 +00:00
Daniel Jasper 0d6ac27b86 clang-format: [JS] handle comments in template strings.
Patch by Martin Probst. Thank you.

llvm-svn: 235078
2015-04-16 08:20:51 +00:00
Daniel Jasper 1662bfe077 clang-format: [Proto] No alternate operator names.
llvm-svn: 234055
2015-04-03 21:15:46 +00:00
Daniel Jasper e99c72fc2e clang-format: Fix merging of _T macros.
NewlinesBefore and HasUnescapedNewline were not properly propagated
leading to llvm.org/PR23032.

llvm-svn: 233276
2015-03-26 14:47:35 +00:00
Daniel Jasper 8c68a64ec8 clang-format: Recognize the .ts (TypeScript) extension as JavaScript.
Patch by Martin Probst. Thank you.

llvm-svn: 231926
2015-03-11 14:58:38 +00:00
Benjamin Kramer 28b45ce151 Make constant static variables const so they can go into a read-only section
NFC.

llvm-svn: 231597
2015-03-08 16:06:46 +00:00
Jacques Pienaar 411b251cea clang-format: Change location of stashed token
Commit of patch in http://reviews.llvm.org/D7871

llvm-svn: 230395
2015-02-24 23:23:24 +00:00
Jacques Pienaar 68a7dbf86d Fix merging of << at end of input.
Commit of review http://reviews.llvm.org/D7766

llvm-svn: 230061
2015-02-20 21:09:01 +00:00
Daniel Jasper a0ef4f36c8 clang-format: [js] Support template strings.
Merge template strings (marked by backticks ``).
Do not format any contents of template strings.

Patch by Martin Probst. Thank you.

llvm-svn: 230011
2015-02-20 13:47:38 +00:00
Jacques Pienaar fc27511223 clang-format: Space and triple angle braces.
Committing patch http://reviews.llvm.org/D6800.

llvm-svn: 229783
2015-02-18 23:48:37 +00:00
Daniel Jasper 30029c6b58 clang-format: Fix assert triggering on carriage returns.
llvm-svn: 228288
2015-02-05 11:05:31 +00:00
Nico Weber fac2371be3 clang-format: Add support for SEH __try / __except / __finally blocks.
This lets clang-format format

    __try {
    } __except(0) {
    }

and

    __try {
    } __finally {
    }

correctly. __try and __finally are keywords if `LangOpts.MicrosoftExt` is set,
so this turns this on.  This also enables a few other keywords, but it
shouldn't overly perturb regular clang-format operation.  __except is a
context-sensitive keyword, so `AdditionalKeywords` needs to be passed around to
a few more places.

Fixes PR22321.

llvm-svn: 228148
2015-02-04 15:26:27 +00:00
Daniel Jasper 0955cb41eb clang-format: FIXME that led to access of uninitialized memory.
I have so far not succeeded in finding a nicely reduced test case or an
observable difference which could help me create a test failure without
msan.

Committing without test to unblock kcc's further fuzzing progress.

llvm-svn: 227433
2015-01-29 13:11:47 +00:00
Daniel Jasper 1cd3c71c01 clang-format: Disable flag for Google's Java and Javascript styles.
Disable AlwaysBreakBeforeMultilineString, as the style guides don't
really say to do so.

llvm-svn: 225982
2015-01-14 12:24:59 +00:00
Nico Weber ece3d3c26e clang-format: Let Chromium use the Google default for AlignTrailingComments.
r225141 changed the defaults of AllowShortIfStatementsOnASingleLine and
AlignTrailingComments for Google style and added explicit overrides for
Chromium style to undo these changes.  For AllowShortIfStatementsOnASingleLine
that's good as the Android style guide (which Chromium uses for Java) explicitly
permits single-line ifs. But it's silent on trailing comments, to it makes
sense for Chromium style to just follow Google style.

llvm-svn: 225363
2015-01-07 18:41:10 +00:00
Daniel Jasper fd4ed18402 clang-format: [Java] Change a few flags for Google's Java style.
No tests added as all of these are already tested separately.

llvm-svn: 225141
2015-01-04 20:40:45 +00:00
Daniel Jasper 0580ff0ec6 clang-format: Fix incorrect calculation of token lenghts.
This led, e.g. to break JavaScript regex literals too early.

llvm-svn: 224419
2014-12-17 09:11:08 +00:00
Daniel Jasper 0df50938be clang-format: Factor out UnwrappedLineFormatter into a separate file.
No functional changes intended.

llvm-svn: 223936
2014-12-10 19:00:42 +00:00
Daniel Jasper 55aed6777f clang-format: Don't merge lines with comments.
Before:
  int f() { // comment return 42; }

After:
  int f() { // comment
    return 42;
  }

This fixes llvm.org/PR21769.

llvm-svn: 223609
2014-12-07 16:44:49 +00:00
Daniel Jasper 3219e43c94 clang-format: Add option to suppress operator alignment.
With alignment:
  int aaaaaa = aa
               + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
                     * cccccccccccccccccccccccccccccccc;

Without alignment:
  int aaaaaa = aa
      + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
          * cccccccccccccccccccccccccccccccc;

This fixes llvm.org/PR21666.

llvm-svn: 223117
2014-12-02 13:24:51 +00:00
Nico Weber 450425c980 clang-format: Tweak -style=Chromium for Java files.
For Java, don't do any of the deviations from Google Style that Chromium style
does for C++.

Chromium's Java follows Android Java style [1], which is roughly Google Java
style with an indent of 4 and a continuation indent of 8.

1: https://source.android.com/source/code-style.html
llvm-svn: 222839
2014-11-26 16:43:18 +00:00
Daniel Jasper 9e709351c5 clang-format: Add SFS_Empty to only empty functions on a single line.
Activated for and tested by Google's Java style.

This fixes llvm.org/PR21667.

llvm-svn: 222819
2014-11-26 10:43:58 +00:00
Daniel Jasper a98b7b01be clang-format: Refactoring.
Re-apply r222638 and r222641 without variadic templates.

llvm-svn: 222747
2014-11-25 10:05:17 +00:00
Aaron Ballman 484ee9b404 Reverting r222638; it broke the MSVC build bots because Visual Studio 2012 does not support variadic templates. Also reverting r222641 because it was relying on 222638.
llvm-svn: 222656
2014-11-24 15:42:34 +00:00
Daniel Jasper 79f226e780 clang-format: Make short case labels work with #ifs
Before:
  switch (a) {
  #if FOO
  case 0: return 0; #endif
  }

After:
  switch (a) {
  #if FOO
  case 0: return 0;
  #endif
  }

This fixed llvm.org/PR21544.

llvm-svn: 222642
2014-11-23 21:45:03 +00:00
Daniel Jasper 7198b0c778 clang-format: Refactoring.
Provide more overloads to simplify testing the type of a token. No
functional changes intended.

llvm-svn: 222638
2014-11-23 19:03:25 +00:00
Daniel Jasper 616de864da clang-format: [JS] Support Closure's module statements.
These are like import statements and should not be line-wrapped. Minor
restructuring of the handling of other import statements.

llvm-svn: 222637
2014-11-23 16:46:28 +00:00
Daniel Jasper 4b444495ed clang-format: Use nested block special case for all languages.
Previously this was only used for JavaScript.

Before:
  functionCall({
                 int i;
                 int j;
               },
               aaaa, bbbb, cccc);

After:
  functionCall({
    int i;
    int j;
  }, aaaa, bbbb, cccc);

llvm-svn: 222531
2014-11-21 13:38:53 +00:00
Daniel Jasper d081e88e79 clang-format: Handle comments in short case labels.
With AllowShortCaseLabelsOnASingleLine set to true:
This gets now left unchanged:
  case 1:
    // comment
    return;

Whereas before it was changed into:
  case 1: // comment return;

This fixes llvm.org/PR21630.

llvm-svn: 222529
2014-11-21 12:36:25 +00:00
Daniel Jasper fe2cf6673a clang-format: [Java] Ignore C++-specific keywords
Before:
  public void union
  (Object o);
  public void struct
  (Object o);
  public void delete (Object o);

After:
  public void union(Object o);
  public void struct(Object o);
  public void delete(Object o);

Patch by Harry Terkelsen, thank you!

llvm-svn: 222357
2014-11-19 14:11:11 +00:00
Daniel Jasper 3aa9a6a126 clang-format: Add option to disable alignment after opening brackets
Before:
  SomeFunction(parameter,
               parameter);

After:
  SomeFunction(parameter,
      parameter);

Patch by Harry Terkelsen, thank you!

llvm-svn: 222284
2014-11-18 23:55:27 +00:00
Daniel Jasper 30a2406e65 clang-format: [Java] No altnerative operator names in Java.
Before:
  someObject.and ();

After:
  someObject.and();

llvm-svn: 221978
2014-11-14 09:02:28 +00:00
Daniel Jasper 61d81973c1 clang-format: [Java] Improve formatting of generics.
Before:
  Function < F, ? extends T > function;

After:
  Function<F, ? extends T> function;

llvm-svn: 221976
2014-11-14 08:22:46 +00:00
Nico Weber 34272657de clang-format: Format extern "C" blocks like namespace blocks.
namespace blocks act as if KeepEmptyLinesAtTheStartOfBlocks is always true,
and aren't collapsed to a single line even if they would fit. Do the same
for extern "C" blocks.

Before,

  extern "C" {

  void ExternCFunction();

  }

was collapsed into `extern "C" { void ExternCFunction(); }`. Now it stays like
it was.

Fixes http://crbug.com/432640 and part of PR21419.

llvm-svn: 221897
2014-11-13 16:25:37 +00:00
Daniel Jasper e551bb70a3 Revert "clang-format: [js] Updates to Google's JavaScript style."
This reverts commit eefd2eaad43c5c2b17953ae7ed1e72b28e696f7b.

Apparently, this change was a bit premature.

llvm-svn: 221365
2014-11-05 17:22:31 +00:00
Daniel Jasper d0ec0d62d6 clang-format: Use identifier table for keywords in other languages.
Slightly easier to write, more efficient and prevents bugs by
misspelling them.

No functional changes intended.

llvm-svn: 221259
2014-11-04 12:41:02 +00:00
Daniel Jasper f739b0dbfa clang-format: [js] Updates to Google's JavaScript style.
The style guide is changing..

llvm-svn: 220977
2014-10-31 17:50:40 +00:00
Daniel Jasper ac29eaccd2 clang-format: Format line if invoked on the trailing newline.
llvm-svn: 220883
2014-10-29 23:40:50 +00:00
Daniel Jasper 49a9a2833b clang-format: [JS] Support more regex literals.
Previously a regex-literal containing "/*" would through clang-format
off, e.g.:
  var regex = /\/*$/;

Would lead to none of the following code to be formatted.

llvm-svn: 220860
2014-10-29 16:51:38 +00:00
Daniel Jasper 50d634b343 clang-format: [ObjC] Add separate flag to control indentation in blocks
Apparently, people are very much divided on what the "correct"
indentation is. So, best to give them a choice.

The new flag is called ObjCBlockIndentWidth and the default is now set
to the same value as IndentWidth for the pre-defined styles.

llvm-svn: 220784
2014-10-28 16:53:38 +00:00
Daniel Jasper b89fbe60e3 clang-format: Don't put functions on a single line in Google's Java
style.

llvm-svn: 220778
2014-10-28 16:15:52 +00:00
Daniel Jasper 5634619389 clang-format: Fix bad merging of lines in nested blocks.
Before:
  SomeFunction([]() {
  #define A a
    return 43; });

After:
  SomeFunction([]() {
  #define A a
    return 43;
  });

llvm-svn: 220684
2014-10-27 16:31:46 +00:00
Daniel Jasper 18210d7d2f clang-format: Add option to control call argument bin-packing separately
This is desirable for the Chromium style guide:
http://www.chromium.org/developers/coding-style

llvm-svn: 219400
2014-10-09 09:52:05 +00:00
Benjamin Kramer d0eed3a006 Format: ArrayRefize some implicit copies away.
NFC.

llvm-svn: 219000
2014-10-03 18:52:48 +00:00
Daniel Jasper 67f8ad258f clang-format: [JS] Support AllowShortFunctionsOnASingleLine.
Specifically, this also counts for stuff like (with style "inline"):
  var x = function() {
    return 1;
  };

llvm-svn: 218689
2014-09-30 17:57:06 +00:00
Nico Weber 7533b4dada clang-format: Don't let -style=Chromium imply c++03 template formatting.
Chromium's now using some c++11 language features, so it's now fine that
clang-format produces vector<vector<int>>.

llvm-svn: 218392
2014-09-24 17:17:32 +00:00
Daniel Jasper c58c70e2f3 clang-format: Basic support for Java.
llvm-svn: 217759
2014-09-15 11:21:46 +00:00
Daniel Jasper ac043c900c clang-format: Add option to break before non-assignment operators.
This will allow:
  int aaaaaaaaaaaaaa =
      bbbbbbbbbbbbbb
      + ccccccccccccccc;

llvm-svn: 217757
2014-09-15 11:11:00 +00:00
Roman Kashitsyn 650ecb53ca Fix bug 20892 - clang-format does not handle C-style comments
Summary:
http://llvm.org/bugs/show_bug.cgi?id=20892

Add support of C-style formatting enabling/disabling directives. Now the following two styles are supported:

  // clang-format on
  /* clang-format on */

The flexibility in comments (support of extra spaces and/or slashes, etc.) is deliberately avoided to simplify search in large code bases.

Reviewers: djasper

Reviewed By: djasper

Subscribers: cfe-commits, curdeius, klimek

Differential Revision: http://reviews.llvm.org/D5309

llvm-svn: 217588
2014-09-11 14:47:20 +00:00
Daniel Jasper b87899b567 clang-format: Add option to allow short case labels on a single line.
On a single line:
  switch (a) {
  case 1: x = 1; return;
  case 2: x = 2; return;
  default: break;
  }

Not on a single line:
  switch (a) {
  case 1:
    x = 1;
    return;
  case 2:
    x = 2;
    return;
  default:
    break;
  }

This partly addresses llvm.org/PR16535. In the long run, we probably want to
lay these out in columns.

llvm-svn: 217501
2014-09-10 13:11:45 +00:00
Daniel Jasper 23376259c0 clang-format: [JS] Support regex literals with trailing escaped slash.
Before:
  var regex = / a\//; int i;

After:
  var regex = /a\//;
  int i;

This required pushing the Lexer into its wrapper class and generating a
new one in this specific case. Otherwise, the sequence get lexed as a
//-comment. This is hacky, but I don't know a better way (short of
supporting regex literals in the Lexer).

Pushing the Lexer down seems to make all the call sites simpler.

llvm-svn: 217444
2014-09-09 14:37:39 +00:00
Daniel Jasper 4db69bd542 clang-format: [JS] Support alternative operator names as identifiers.
Before:
  not. and . or . not_eq = 1;

After:
  not.and.or.not_eq = 1;

llvm-svn: 217179
2014-09-04 18:23:42 +00:00
Daniel Jasper db986eb6bb clang-format: Add an option 'SpaceAfterCStyleCast'.
This permits to add a space after closing parenthesis of a C-style cast.
Defaults to false to preserve old behavior.

Fixes llvm.org/PR19982.

Before:
  (int)i;

After:
  (int) i;

Patch by Marek Kurdej.

llvm-svn: 217022
2014-09-03 07:37:29 +00:00
David Blaikie 49cc3181a2 Overload SourceManager::overrideFileContents so that unconditionally passing ownership is explicitly done using unique_ptr.
Only those callers who are dynamically passing ownership should need the
3 argument form. Those accepting the default ("do pass ownership")
should do so explicitly with a unique_ptr now.

llvm-svn: 216614
2014-08-27 20:54:45 +00:00
Rafael Espindola d87f8d76e0 Update for LLVM api change.
llvm-svn: 216585
2014-08-27 20:03:29 +00:00
Daniel Jasper ad981f888a clang-format: New option SpacesInSquareBrackets.
Before:
  int a[5];
  a[3] += 42;

After:
  int a[ 5 ];
  a[ 3 ] += 42;

Fixes LLVM bug #17887 (http://llvm.org/bugs/show_bug.cgi?id=17887).

Patch by Marek Kurdej, thank you!

llvm-svn: 216449
2014-08-26 11:41:14 +00:00
Aaron Ballman dd69ef38db C++1y is now C++14!
Changes diagnostic options, language standard options, diagnostic identifiers, diagnostic wording to use c++14 instead of c++1y. It also modifies related test cases to use the updated diagnostic wording.

llvm-svn: 215982
2014-08-19 15:55:55 +00:00
NAKAMURA Takumi 7160c4d22f FormatTokenLexer: Avoid non-static member initializer.
llvm-svn: 214976
2014-08-06 16:53:13 +00:00
Daniel Jasper 4718944399 clang-format: Add special comments to disable formatting.
With this patch:
  int ThisWillBeFormatted;
  // clang-format off
  int   ThisWontBeFormatted;
  // clang-format on
  int Formatted;

This is for regions where a significantly nicer code layout can be found
knowing the content of the code.

This fixes llvm.org/PR20463.

llvm-svn: 214966
2014-08-06 13:40:26 +00:00
Daniel Jasper ca4ea1ce59 clang-format: Add option to always break after a function's return type.
This is required for GNU coding style, among others.

Also update the configuration documentation.

Modified from an original patch by Jarkko Hietaniemi, thank you!

llvm-svn: 214858
2014-08-05 12:16:31 +00:00
Alp Toker 958027b698 Fix typos
Also consolidate 'backward compatibility'

llvm-svn: 212974
2014-07-14 19:42:55 +00:00
Daniel Jasper c75e1effed clang-format: Add new option to indent wrapped function declarations.
Though not completely identical, make former
IndentFunctionDeclarationAfterType change this flag for backwards
compatibility (it is somewhat close in meaning and better the err'ing on
an unknown config flag).

llvm-svn: 212597
2014-07-09 08:42:42 +00:00
Daniel Jasper 4355e7f0ef clang-format: Revamp function declaration/definition indentation.
Key changes:
- Correctly (well ...) distinguish function declarations and variable
  declarations with ()-initialization.
- Don't indent when breaking function declarations/definitions after the
  return type.
- Indent variable declarations and typedefs when breaking after the
  type.

This fixes llvm.org/PR17999.

llvm-svn: 212591
2014-07-09 07:50:33 +00:00
Rafael Espindola 2d2b420ab9 Update for llvm api change.
llvm-svn: 212408
2014-07-06 17:43:24 +00:00
Daniel Jasper 553d4878da clang-format: Introduce style with spaces on both sides of */&.
Patch by Janusz Sobczak (slightly extended).
This fixes llvm.org/19929.

llvm-svn: 211098
2014-06-17 12:40:34 +00:00
Saleem Abdulrasool fbfbaf6a93 Permit -Wswitch coverage for enumerations.
Thanks to David Blakie and Richard Smith for pointing out that we can retain the
-Wswitch coverage while avoiding the warning from GCC by pushing the unreachable
outside of the switch!

llvm-svn: 210812
2014-06-12 19:33:26 +00:00
Saleem Abdulrasool c9340d2575 Basic: fix warnings from GCC
tools/clang/lib/Basic/DiagnosticIDs.cpp: In function ‘clang::DiagnosticIDs::Level toLevel(clang::diag::Severity)’:
tools/clang/lib/Basic/DiagnosticIDs.cpp:382:1: warning: control reaches end of non-void function [-Wreturn-type]

tools/clang/lib/Format/Format.cpp: In member function ‘virtual std::string clang::format::ParseErrorCategory::message(int) const’:
tools/clang/lib/Format/Format.cpp:282:1: warning: control reaches end of non-void function [-Wreturn-type]

Add a default cases that asserts that we handle the severity, parse error.

llvm-svn: 210804
2014-06-12 17:43:37 +00:00
Rafael Espindola c080917ec2 Replace llvm::error_code with std::error_code.
llvm-svn: 210780
2014-06-12 14:02:15 +00:00
Rafael Espindola 6d0d89b49c Fix typo.
Thanks to Alp Toker for noticing.

llvm-svn: 210744
2014-06-12 03:31:26 +00:00
Rafael Espindola d0136707a9 Give clang-format its own error category.
The posix errno values are probably to the best thing to use for
describing parse errors.

This should also fix the mingw build.

llvm-svn: 210739
2014-06-12 02:50:04 +00:00
Rafael Espindola 96b033006d Use std::error_code instead of llvm::error_code.
This is an update for a llvm api change.

llvm-svn: 210688
2014-06-11 19:05:55 +00:00
Daniel Jasper 58cb2edd69 clang-format: Fix incorrect indentation.
Before (JavaScript example, but can extend to other languages):
  return {
    a: 'E',
    b: function() {
      return function() {
      f();  // This is wrong.
      };
    }
  };

After:
  return {
    a: 'E',
    b: function() {
      return function() {
        f();  // This is better.
      };
    }
  };

llvm-svn: 210334
2014-06-06 13:49:04 +00:00
Rafael Espindola cb82dfb11c Use error_code() instead of error_code::succes()
There is no std::error_code::success, so this removes much of the noise
in transitioning to std::error_code.

llvm-svn: 209949
2014-05-31 01:26:30 +00:00
Alexander Kornienko 0a0d6b4bb1 Use error_code::success() instead of make_error_code(llvm::errc::success).
llvm-svn: 209477
2014-05-22 22:06:08 +00:00
Daniel Jasper c64b09acc3 clang-format: Introduce DisableFormat that prevents formatting.
And "none" pseudo-style indicating that formatting should be not
applied.

(1) Using .clang-format with "DisableFormat: true" effectively prevents
formatting for all files within the folder containing such .clang-format
file.

(2) Using -fallback-style=none together with -style=file prevents
formatting when .clang-format is not found, which can be used in on-save
callback.

Patch by Adam Strzelecki. Thank you!

llvm-svn: 209446
2014-05-22 15:12:22 +00:00
Daniel Jasper bd630737bd clang-format: Fix corner case in AllowShortBlocksOnASingleLine.
Before:
  template <int> struct A4 { A4() { }
  };

After:
  template <int i> struct A4 {
    A4() {}
  };

This fixes llvm.org/PR19813 (at least the part that isn't working as
intended).

llvm-svn: 209438
2014-05-22 13:25:26 +00:00
Daniel Jasper 1f6c7e9358 clang-format: Store pointers to seen formatting states.
As the memory ownership is handled by the SpecificBumpPtrAllocator
anyway, there is no need to duplicate states when inserting them into
the Seen-set. This leads to an improvement of ~10% on the benchmark
formatting file.

No functional changes intended.

llvm-svn: 209422
2014-05-22 11:47:01 +00:00
Daniel Jasper 3948516a03 clang-format: Correctly identify multiplications in braces init lists.
Before:
  int i{a *b};

After:
  int i{a * b};

Also fix unrelated issue where braced init lists were counted as blocks
and prevented single-line functions.

llvm-svn: 209412
2014-05-22 09:00:33 +00:00
Daniel Jasper 5f3ea477cf clang-format: Correctly calculate line lenghts for nest blocks.
If simple (one-statement) blocks can be inlined, the length needs to be
calculated correctly.

Before (in JavaScript but this also affects lambdas, etc.):
  var x = {
    valueOf: function() { return 1; }
  };

After:
  var x = {valueOf: function() { return 1; }};

llvm-svn: 209410
2014-05-22 08:36:53 +00:00
Daniel Jasper b16b969d7c clang-format: [JS] Support different function literal style.
Before:
  goog.array.forEach(array, function() {
                              doSomething();
                              doSomething();
                            },
                     this);

After:
  goog.array.forEach(array, function() {
    doSomething();
    doSomething();
  }, this);

llvm-svn: 209291
2014-05-21 12:51:23 +00:00
Daniel Jasper 78214397a3 clang-format: [JS] Support for EC6 arrow functions.
Before:
  var b = a.map((x) = > x + 1);

After:
  var b = a.map((x) => x + 1);

llvm-svn: 209112
2014-05-19 07:27:02 +00:00
Alp Toker c3f36af8d0 Fix typos
llvm-svn: 208838
2014-05-15 01:35:53 +00:00
Daniel Jasper 17605d3961 clang-format: Add option to allow short blocks on a single line.
With AllowShortBlocksOnASingleLine, clang-format allows:
  if (a) { return; }

Based on patch by Gonzalo BG, thank you!

llvm-svn: 208765
2014-05-14 09:33:35 +00:00
Daniel Jasper fb4333b093 clang-format: [JS] Basic support for escape sequences in regex literals.
Before:
  var regex = /\\/ g; // This isn't even recognized as regex.

After:
  var regex = /\\/g; // It now is.

llvm-svn: 208539
2014-05-12 11:29:50 +00:00
Benjamin Kramer f3ca269839 Decouple ExprCXX.h and DeclCXX.h and clean up includes a bit.
Required pulling LambdaExpr::Capture into its own header.
No functionality change.

llvm-svn: 208470
2014-05-10 16:31:55 +00:00
Daniel Jasper b05a81debb clang-format: Fix bug introduced by r208392.
Also run clang-format over clang-format's files.

llvm-svn: 208409
2014-05-09 13:11:16 +00:00
Daniel Jasper 8f83a9072d clang-format: [JS] Allow up to 3 empty lines in Google's JS style.
llvm-svn: 208404
2014-05-09 10:28:58 +00:00
Craig Topper 2145bc0229 [C++11] Use 'nullptr'.
llvm-svn: 208392
2014-05-09 08:15:10 +00:00
Daniel Jasper f7405c129e clang-format: [JS] Support regex literals after 'return'.
llvm-svn: 208285
2014-05-08 07:45:18 +00:00
Daniel Jasper f9ae312fc0 clang-format: [JS] Initial support for regex literals.
llvm-svn: 208281
2014-05-08 07:01:45 +00:00
Nikola Smiljanic e08a91ecd2 Enable alternative tokens by default for clang-format.
Patch by Bobby Moretti.

llvm-svn: 208269
2014-05-08 00:05:13 +00:00
Daniel Jasper 79dffb4128 clang-format: Be slightly more aggressive on single-line functions.
So that JS functions can also be merged into a single line.

Before:
  var func = function() {
    return 1;
  };

After:
  var func = function() { return 1; };

llvm-svn: 208176
2014-05-07 09:48:30 +00:00
Dinesh Dwivedi afe6fb6f05 Fix bug in clang-format while merging short function
Before:
    #ifdef _DEBUG
    int foo( int i = 0 )
    #else
    int foo( int i = 5 )
    #endif { return i; }

After:
    #ifdef _DEBUG
    int foo( int i = 0 )
    #else
    int foo( int i = 5 )
    #endif
    {
    	return i;
    }

llvm-svn: 207958
2014-05-05 11:36:35 +00:00
Daniel Jasper c282e54eb6 clang-format: Remove accidentally added debug output.
llvm-svn: 207533
2014-04-29 15:35:28 +00:00
Daniel Jasper 35995679c6 clang-format: Allow single-line function in WebKit style.
Before:
  void f() {
      return; }

After:
  void f() { return; }

llvm-svn: 207527
2014-04-29 14:05:20 +00:00
Chandler Carruth 1034666777 [Modules] Fix potential ODR violations by sinking the DEBUG_TYPE
definition below all of the header #include lines, clang edition.

If you want more details about this, you can see some of the commits to
Debug.h in LLVM recently. This is just the clang section of a cleanup
I've done for all uses of DEBUG_TYPE in LLVM.

llvm-svn: 206849
2014-04-22 03:17:02 +00:00
NAKAMURA Takumi 2205952150 Format.cpp: Don't use initializer list.
llvm-svn: 206339
2014-04-15 23:29:04 +00:00
Daniel Jasper 783bac6bba clang-format: Understand proto text format without commas.
Also removed spaces before colons as they don't seem to be used
frequently.

Before:
optional int32 b = 2
    [(foo_options) = {aaaaaaaaaaaaaaaaaaa : 123 bbbbbbbbbbbbbbbbbbbbbbbb :
                          "baz"}];

After:
optional int32 b = 2 [(foo_options) = {aaaaaaaaaaaaaaaaaaa: 123,
                                       bbbbbbbbbbbbbbbbbbbbbbbb:"baz"}];

llvm-svn: 206269
2014-04-15 09:54:30 +00:00
Daniel Jasper 20fd3c6ff7 clang-format: Basic support for C++1y.
Before:
  int bi{1 '000' 000};
After:
  int bi{1'000'000};

This fixes llvm.org/PR19342.

llvm-svn: 206263
2014-04-15 08:49:21 +00:00
Daniel Jasper 98583d522f clang-format: Early cut-off for inlining nested blocks.
Specifically, for a nested block or lambda, don't try to put the single
statement body inline, if it exceeds the column limit.

This should not change any observable behavior (as those would never
have led to the 'best' solution), but significantly speeds up formatting
time.

This fixes llvm.org/PR18761. Formatting time goes down from ~100s to a
few ms.

llvm-svn: 206260
2014-04-15 08:28:06 +00:00
Daniel Jasper c359ad00a6 clang-format: Cache results of formatting nested blocks.
This somewhat improves the performance problem reported in
llvm.org/PR18761. No other behavior changes intended.

llvm-svn: 206258
2014-04-15 08:13:47 +00:00
Manuel Klimek 68b03049e0 Format code around VCS conflict markers.
Now correctly formats:
  {
    int a;
    void f() {
      callme(some(parameter1,
  <<<<<<< text by the vcs
                  parameter2),
  ||||||| text by the vcs
                  parameter2),
             parameter3,
  ======= text by the vcs
                  parameter2, parameter3),
  >>>>>>> text by the vcs
             otherparameter);
    }
  }

llvm-svn: 206157
2014-04-14 09:14:11 +00:00
Manuel Klimek 1fcbe675fa Correctly handle escaped newlines when the next token starts without a space.
We will need this to correctly handle conflict markers inside macro
definitions.

llvm-svn: 206029
2014-04-11 12:27:47 +00:00
Daniel Jasper 21397a3232 clang-format: Fix bug where clang-format would break the code.
Before, it would turn:
  SomeFunction([]() { // Cool function..
    return 43;
  });

Into this:
  SomeFunction([]() { // Cool function.. return 43; });

llvm-svn: 205849
2014-04-09 12:21:48 +00:00
Daniel Jasper d74cf40386 clang-format: Extend AllowShortFunctions.. to only merge inline functions.
Before AllowShortFunctionsOnASingleLine could either be true, merging
all functions, or false, merging no functions. This patch adds a third
value "Inline", which can be used to only merge short functions defined
inline in a class, i.e.:

  void f() {
    return 42;
  }

  class C {
    void f() { return 42; }
  };

llvm-svn: 205760
2014-04-08 12:46:38 +00:00
Daniel Jasper 922349cdba clang-format: Don't merge simple blocks in case statements.
Before:
  switch (a) {
  case 1: { return 'a'; }
  }

After:
  switch (a) {
  case 1: {
    return 'a';
  }
  }

llvm-svn: 205611
2014-04-04 06:46:23 +00:00
Daniel Jasper e1e4319ab7 clang-format: Support configurable list of foreach-macros.
This fixes llvm.org/PR17242.

Patch by Brian Green, thank you!

llvm-svn: 205307
2014-04-01 12:55:11 +00:00
Daniel Jasper a26fc5c9db clang-format: Add flag for removing empty lines at the start of blocks.
This unbreaks polly-formatting-tests and we can make a decision for
LLVM style independently.

llvm-svn: 204467
2014-03-21 13:43:14 +00:00
Daniel Jasper 01b35482e5 clang-format: Don't remove empty lines at the start of namespaces.
llvm-svn: 204462
2014-03-21 13:03:33 +00:00
Daniel Jasper 11164bdaf5 clang-format: Remove empty lines at the beginning of blocks.
They very rarely aid readability.

Formatting:
  void f() {

    if (a) {

      f();

    }

  }

Now leads to:
  void f() {
    if (a) {
      f();
    }
  }

llvm-svn: 204460
2014-03-21 12:58:53 +00:00
Craig Topper fb6b25b5e4 [C++11] Add 'override' keyword to virtual methods that override their base class.
llvm-svn: 203999
2014-03-15 04:29:04 +00:00
Ahmed Charles b89843299a Replace OwningPtr with std::unique_ptr.
This compiles cleanly with lldb/lld/clang-tools-extra/llvm.

llvm-svn: 203279
2014-03-07 20:03:18 +00:00
Chandler Carruth f8b7266d57 [C++11] Switch the clang-format LLVM style to use C++11 style braced
init list formatting. This suggestion has now gone into the LLVM coding
standards, and is particularly relevant now that we're using C++11.

Updated a really ridiculous number of tests to reflect this change.

llvm-svn: 202637
2014-03-02 12:37:31 +00:00
Daniel Jasper a0407740c3 clang-format: Fix alignment of comments inside statements.
Before:
  auto result = SomeObject
                // Calling someFunction on SomeObject
                    .someFunction();

After:
  auto result = SomeObject
                    // Calling someFunction on SomeObject
                    .someFunction();

llvm-svn: 201138
2014-02-11 10:08:11 +00:00
Daniel Jasper 649899685b clang-format: Fix column limit violation for merged lines in macros.
Before (81 columns):
  #define A                                                                       \
    void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa() { return aaaaaaaa; } \
    int i;

After:
  #define A                                                    \
    void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa() { \
      return aaaaaaaa;                                         \
    }                                                          \
    int i;

llvm-svn: 200974
2014-02-07 13:45:27 +00:00
Nico Weber 514ecc8ce8 clang-format: Let chromium style inherit google style's javascript tweaks.
llvm-svn: 200652
2014-02-02 20:50:45 +00:00
Daniel Jasper 86fee2fa3d clang-format: (JavaScript) Don't crash on empty string literals.
Before, this would lead to a crash:
  f('', true);

llvm-svn: 200540
2014-01-31 12:49:42 +00:00
Daniel Jasper e9beea24ef clang-format: Add support for a space after @property
Mozilla and WebKit seem to use a space after @property (verified by
grepping their codebases) so we turn this on there as well.

Change by Christian Legnitto. Thank you!

llvm-svn: 200320
2014-01-28 15:20:33 +00:00
Daniel Jasper a55544a658 clang-format: Leave 2 empty lines in Google's JavaScript style.
As per the style guide, two lines are required between top-level
elements.

llvm-svn: 199660
2014-01-20 14:10:30 +00:00
Daniel Jasper 7052ce6d8b clang-format: Better support and testing for protocol buffers.
With this patch, there is dedicated testing for protocol buffers
(https://developers.google.com/protocol-buffers/).

Also some minor tweaks formatting tweaks.

llvm-svn: 199580
2014-01-19 09:04:08 +00:00
Daniel Jasper b2e10a5459 clang-format: Fixed formatting of JavaScript container literals
Before:
  var arr = [ 1, 2, 3 ];
  var obj = {a : 1, b : 2, c : 3};

After:
  var arr = [1, 2, 3];
  var obj = {a: 1, b: 2, c: 3};

llvm-svn: 199317
2014-01-15 15:09:08 +00:00
Chandler Carruth 5553d0d4ca Sort all the #include lines with LLVM's utils/sort_includes.py which
encodes the canonical rules for LLVM's style. I noticed this had drifted
quite a bit when cleaning up LLVM, so wanted to clean up Clang as well.

llvm-svn: 198686
2014-01-07 11:51:46 +00:00
Alexander Kornienko ce9161a557 Added an option to avoid splitting certain kinds of comments into lines.
Summary: Added CommentPragmas option for this.

Reviewers: djasper, klimek

Reviewed By: klimek

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2460

llvm-svn: 198310
2014-01-02 15:13:14 +00:00
Alp Toker ba5b4dc60c Fix and reword some typos
llvm-svn: 198191
2013-12-30 02:06:29 +00:00
Daniel Jasper 234379fbf6 clang-format: (WebKit) Disallow 1-line constructors with initializers.
Before:
  Constructor() : a(a) {}

After:
  Constructor()
      : a(a)
  {
  }

This style guide is pretty precise about this.

llvm-svn: 197980
2013-12-24 13:31:25 +00:00
Daniel Jasper 19a541eff0 clang-format: Increase penalty for breaking comments.
Unexpectedly, it seems that people commonly know what they were doing
when writing a comment.

Also, being more conservative about comment breaking has the advantage
of giving more flexibility. If a linebreak within the comment can
improve formatting, the author can add it (after which clang-format
won't undo it). There is no way to override clang-format's behavior if
it breaks a comment.

llvm-svn: 197698
2013-12-19 16:45:34 +00:00
Daniel Jasper bad63ae2a5 clang-format: Don't adapt local format to macros.
Formatting this:
   void f() { // 1 space initial indent.
      int i;
  #define A   \
      int i;  \
     int j;
        int k; // Format this line.
   }
   void f() {
       #define A 1 // Format this line.
   }

Before:
   void f() { // 1 space initial indent.
      int i;
  #define A   \
      int i;  \
     int j;
     int k;  // Format this line.
   }
   void f() {
   #define A 1  // Format this line.
   }

After:
   void f() { // 1 space initial indent.
      int i;
  #define A   \
      int i;  \
     int j;
      int k;  // Format this line.
   }
   void f() {
  #define A 1  // Format this line.
   }

llvm-svn: 197494
2013-12-17 12:38:55 +00:00
Alexander Kornienko a594ba8a76 Always break before the colon in constructor initializers, when
BreakConstructorInitializersBeforeComma is true.

This option is used in WebKit style, so this also ensures initializer lists are
not put on a single line, as per the WebKit coding guidelines.

Patch by Florian Sowade!

llvm-svn: 197386
2013-12-16 14:35:51 +00:00
Alexander Kornienko 3a33f0292b Implemented GNU-style formatting for compound statements.
Summary:
Added BraceBreakingStyle::BS_GNU. I'm not sure about the correctness of
static initializer formatting, but compound statements should be fine.

Reviewers: djasper

Reviewed By: djasper

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2372

llvm-svn: 197138
2013-12-12 09:49:52 +00:00
Alexander Kornienko 763ec2ba45 Remove IndentBlocks, which sneaked winto the previous commit
llvm-svn: 196929
2013-12-10 15:46:42 +00:00
Alexander Kornienko fe7a57fa78 Early attempts to format in GNU style.
Summary:
This still misses a few important features, so there's no mention of
this style in the help message, but a few style rules are implemented.

Reviewers: djasper

Reviewed By: djasper

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2371

llvm-svn: 196928
2013-12-10 15:42:15 +00:00
Alexander Kornienko c1637f167c Allow predefined styles to define different options for different languages.
Summary:
Allow predefined styles to define different options for different
languages so that one can run:
  clang-format -style=google file1.cpp file2.js

or use a single .clang-format file with "BasedOnStyle: Google" for both c++ and
JS files.

Added Google style for JavaScript with "BreakBeforeTernaryOperators" set to
false.

Reviewers: djasper

Reviewed By: djasper

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2364

llvm-svn: 196909
2013-12-10 11:28:13 +00:00
Alexander Kornienko 6d2c88eafd Trivial change: added 'using clang::format::FormatStyle;'
llvm-svn: 196903
2013-12-10 10:30:34 +00:00
Alexander Kornienko fdca83d487 Support GNU style rule to put a space before opening parenthesis.
Summary:
The rule from the GNU style states:
"We find it easier to read a program when it has spaces before the open-parentheses and after the commas."

http://www.gnu.org/prep/standards/standards.html#index-spaces-before-open_002dparen

This patch makes clang-format adds an option to put spaces before almost all open parentheses, except the cases, where different behavior is dictated by the style rules or language syntax:
  * preprocessor:
    ** function-like macro definitions can't have a space between the macro name and the parenthesis;
    ** `#if defined(...)` can have a space, but it seems, that it's more frequently used without a space in GCC, for example;
  * never add spaces after unary operators;
  * adding spaces between two opening parentheses is controlled with the `SpacesInParentheses` option;
  * never add spaces between `[` and `(` (there's no option yet).

Reviewers: djasper

Reviewed By: djasper

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2326

llvm-svn: 196901
2013-12-10 10:18:34 +00:00
Alexander Kornienko ecc232d521 Fix the regression caused by r196378
llvm-svn: 196380
2013-12-04 13:25:26 +00:00
Alexander Kornienko 31e9554024 Leave constructor initializer lists on one line in styles with no column limit.
Summary:
Allow tryFitMultipleLinesInOne join unwrapped lines when
ContinuationIndenter::mustBreak doesn't agree. But don't merge any lines, that
are separate in the input.

Reviewers: djasper

Reviewed By: djasper

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2321

llvm-svn: 196378
2013-12-04 12:21:08 +00:00
Alexander Kornienko bc4ae44928 Added an option to specify fallback style.
Summary:
Added -fallback-style option. Changed clang-format to stop searching
for .clang-format when an invalid file is found.

Reviewers: djasper, klimek

Reviewed By: djasper

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2292

llvm-svn: 196108
2013-12-02 15:21:38 +00:00
Daniel Jasper 0e81f1ad43 clang-format: Fix excessive formatting caused by r195954.
Due to a bug in the patch, clang-format would more or less simply format
all multi-line comments.

llvm-svn: 196080
2013-12-02 09:19:27 +00:00
Alexander Kornienko cabdd738fc Added LanguageStandard::LS_JavaScript to gate all JS-specific parsing.
Summary:
Use LS_JavaScript for files ending with ".js". Added support for ">>>="
operator.

Reviewers: djasper, klimek

Reviewed By: djasper

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2242

llvm-svn: 195961
2013-11-29 15:19:43 +00:00
Daniel Jasper 38c82408a7 clang-format: Extends formatted ranges to subsequent lines comments.
Before:
  int aaaa;     // This line is formatted.
                // The comment continues ..
                // .. here.

Before:
  int aaaa; // This line is formatted.
            // The comment continues ..
            // .. here.

This fixes llvm.org/PR17914.

llvm-svn: 195954
2013-11-29 09:27:43 +00:00
Daniel Jasper 9c19956845 clang-format: Improve selective formatting of nested statements.
Previously, clang-format could create quite corrupt formattings if
individual lines of nested blocks (e.g. in "DEBUG({})" or lambdas) were
used. With this patch, it tries to extend the formatted regions to leave
around some reasonable format without always formatting the entire
surrounding statement.

llvm-svn: 195925
2013-11-28 15:58:55 +00:00
Daniel Jasper 5877bf1b7c clang-format: Fix formatting of empty files (fixes c-index-tests).
llvm-svn: 195638
2013-11-25 11:53:05 +00:00
Daniel Jasper 5500f6163f clang-format: Refactor calculation of lines intersecting with -lines.
No functional changes intended. However, it seems to have found a buggy
behavior in one of the tests. I think this structure is generally
desirable and it will make a planned bugfix significantly easier.

llvm-svn: 195634
2013-11-25 11:08:59 +00:00
Alexander Kornienko 9aa62407f6 Better implementation of JavaScript === and !== operators.
Summary:
Now based on token merging. Now they are not only prevented from being
split, but are actually formatted as comparison operators.

Reviewers: djasper, klimek

Reviewed By: klimek

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2240

llvm-svn: 195354
2013-11-21 12:43:57 +00:00
Alexander Kornienko 3cfa973978 Added an option to allow short function bodies be placed on a single line.
Summary:
The AllowShortFunctionsOnASingleLine option now controls short function
body placement on a single line independent of the BreakBeforeBraces option.
Updated tests using BreakBeforeBraces other than BS_Attach.

Addresses http://llvm.org/PR17888

Reviewers: klimek, djasper

Reviewed By: klimek

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2230

llvm-svn: 195256
2013-11-20 16:33:05 +00:00
Alexander Kornienko c302161f70 Refactoring: replaced (*(I + x)) with I[x].
Summary: Pure refactoring, no semantic changes intended.

Reviewers: klimek

Reviewed By: klimek

CC: cfe-commits, klimek

Differential Revision: http://llvm-reviews.chandlerc.com/D2220

llvm-svn: 195128
2013-11-19 14:30:44 +00:00