diff options
author | Martin Probst <martin@probst.io> | 2017-05-04 15:04:04 +0000 |
---|---|---|
committer | Martin Probst <martin@probst.io> | 2017-05-04 15:04:04 +0000 |
commit | 4ef0370e6dbd6fb995eb89ad943a93e0995aed44 (patch) | |
tree | eed6af0a1d0cd401f58223da98aa1c7048de46a6 | |
parent | 808f2d3c620f922b6bab2b5275b6a83d6eb69221 (diff) | |
download | bcm5719-llvm-4ef0370e6dbd6fb995eb89ad943a93e0995aed44.tar.gz bcm5719-llvm-4ef0370e6dbd6fb995eb89ad943a93e0995aed44.zip |
clang-format: [JS] exponentiation operator
Summary: While its precedence should be higher than multiplicative, LLVM does not have a level for that, so for the time being just treat it as multiplicative.
Reviewers: djasper
Subscribers: cfe-commits, klimek
Differential Revision: https://reviews.llvm.org/D32864
llvm-svn: 302156
-rw-r--r-- | clang/lib/Format/FormatToken.h | 2 | ||||
-rw-r--r-- | clang/lib/Format/FormatTokenLexer.cpp | 10 | ||||
-rw-r--r-- | clang/unittests/Format/FormatTestJS.cpp | 6 |
3 files changed, 18 insertions, 0 deletions
diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h index 3b3600fede9..0c5a5284627 100644 --- a/clang/lib/Format/FormatToken.h +++ b/clang/lib/Format/FormatToken.h @@ -53,6 +53,8 @@ namespace format { TYPE(InlineASMColon) \ TYPE(JavaAnnotation) \ TYPE(JsComputedPropertyName) \ + TYPE(JsExponentiation) \ + TYPE(JsExponentiationEqual) \ TYPE(JsFatArrow) \ TYPE(JsNonNullAssertion) \ TYPE(JsTypeColon) \ diff --git a/clang/lib/Format/FormatTokenLexer.cpp b/clang/lib/Format/FormatTokenLexer.cpp index 1acc0c30651..45c3ae1afe5 100644 --- a/clang/lib/Format/FormatTokenLexer.cpp +++ b/clang/lib/Format/FormatTokenLexer.cpp @@ -74,6 +74,10 @@ void FormatTokenLexer::tryMergePreviousTokens() { static const tok::TokenKind JSShiftEqual[] = {tok::greater, tok::greater, tok::greaterequal}; static const tok::TokenKind JSRightArrow[] = {tok::equal, tok::greater}; + static const tok::TokenKind JSExponentiation[] = {tok::star, tok::star}; + static const tok::TokenKind JSExponentiationEqual[] = {tok::star, + tok::starequal}; + // FIXME: Investigate what token type gives the correct operator priority. if (tryMergeTokens(JSIdentity, TT_BinaryOperator)) return; @@ -83,6 +87,12 @@ void FormatTokenLexer::tryMergePreviousTokens() { return; if (tryMergeTokens(JSRightArrow, TT_JsFatArrow)) return; + if (tryMergeTokens(JSExponentiation, TT_JsExponentiation)) + return; + if (tryMergeTokens(JSExponentiationEqual, TT_JsExponentiationEqual)) { + Tokens.back()->Tok.setKind(tok::starequal); + return; + } } if (Style.Language == FormatStyle::LK_Java) { diff --git a/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp index eda9e0a31da..9144fe17e9e 100644 --- a/clang/unittests/Format/FormatTestJS.cpp +++ b/clang/unittests/Format/FormatTestJS.cpp @@ -1786,5 +1786,11 @@ TEST_F(FormatTestJS, ImportComments) { getGoogleJSStyleWithColumns(25)); verifyFormat("// taze: x from 'location'", getGoogleJSStyleWithColumns(10)); } + +TEST_F(FormatTestJS, Exponentiation) { + verifyFormat("squared = x ** 2;"); + verifyFormat("squared **= 2;"); +} + } // end namespace tooling } // end namespace clang |