diff options
| author | Daniel Jasper <djasper@google.com> | 2015-02-18 17:09:53 +0000 |
|---|---|---|
| committer | Daniel Jasper <djasper@google.com> | 2015-02-18 17:09:53 +0000 |
| commit | b10bdff3377c8ec73c6ed2135b6940fb06fb6abb (patch) | |
| tree | 0dee0996232abdea82279b642c7e5a4b80f9fccc /clang/lib | |
| parent | 41ede8e507092a68e1dbc1002be3eacdb7554180 (diff) | |
| download | bcm5719-llvm-b10bdff3377c8ec73c6ed2135b6940fb06fb6abb.tar.gz bcm5719-llvm-b10bdff3377c8ec73c6ed2135b6940fb06fb6abb.zip | |
clang-format: [JS] Support type annotations.
This patch adds support for type annotations that follow TypeScript's,
Flow's, and AtScript's syntax style.
Patch by Martin Probst, thank you.
Review: http://reviews.llvm.org/D7721
llvm-svn: 229700
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Format/FormatToken.h | 1 | ||||
| -rw-r--r-- | clang/lib/Format/TokenAnnotator.cpp | 22 |
2 files changed, 16 insertions, 7 deletions
diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h index 4692c20d75c..41988bf5908 100644 --- a/clang/lib/Format/FormatToken.h +++ b/clang/lib/Format/FormatToken.h @@ -48,6 +48,7 @@ enum TokenType { TT_InheritanceColon, TT_InlineASMColon, TT_JavaAnnotation, + TT_JsTypeColon, TT_LambdaArrow, TT_LambdaLSquare, TT_LeadingJavaAnnotation, diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index dc48d865510..8db48ff1ed5 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -408,10 +408,7 @@ private: if (!Tok->Previous) return false; // Colons from ?: are handled in parseConditional(). - if (Tok->Previous->is(tok::r_paren) && Contexts.size() == 1 && - Line.First->isNot(tok::kw_case)) { - Tok->Type = TT_CtorInitializerColon; - } else if (Contexts.back().ColonIsDictLiteral) { + if (Contexts.back().ColonIsDictLiteral) { Tok->Type = TT_DictLiteral; } else if (Contexts.back().ColonIsObjCMethodExpr || Line.First->is(TT_ObjCMethodSpecifier)) { @@ -424,19 +421,28 @@ private: if (!Contexts.back().FirstObjCSelectorName) Contexts.back().FirstObjCSelectorName = Tok->Previous; } else if (Contexts.back().ColonIsForRangeExpr) { - Tok->Type = TT_RangeBasedForLoopColon; + Tok->Type = Style.Language == FormatStyle::LK_JavaScript + ? TT_JsTypeColon + : TT_RangeBasedForLoopColon; } else if (CurrentToken && CurrentToken->is(tok::numeric_constant)) { Tok->Type = TT_BitFieldColon; } else if (Contexts.size() == 1 && !Line.First->isOneOf(tok::kw_enum, tok::kw_case)) { - Tok->Type = TT_InheritanceColon; + if (Style.Language == FormatStyle::LK_JavaScript) + Tok->Type = TT_JsTypeColon; + else if (Tok->Previous->is(tok::r_paren)) + Tok->Type = TT_CtorInitializerColon; + else + Tok->Type = TT_InheritanceColon; } else if (Tok->Previous->is(tok::identifier) && Tok->Next && Tok->Next->isOneOf(tok::r_paren, tok::comma)) { // This handles a special macro in ObjC code where selectors including // the colon are passed as macro arguments. Tok->Type = TT_ObjCMethodExpr; } else if (Contexts.back().ContextKind == tok::l_paren) { - Tok->Type = TT_InlineASMColon; + Tok->Type = Style.Language == FormatStyle::LK_JavaScript + ? TT_JsTypeColon + : TT_InlineASMColon; } break; case tok::kw_if: @@ -1748,6 +1754,8 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line, } else if (Style.Language == FormatStyle::LK_JavaScript) { if (Left.is(Keywords.kw_var)) return true; + if (Right.is(TT_JsTypeColon)) + return false; } else if (Style.Language == FormatStyle::LK_Java) { if (Left.is(tok::r_square) && Right.is(tok::l_brace)) return true; |

