summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2015-02-18 17:09:53 +0000
committerDaniel Jasper <djasper@google.com>2015-02-18 17:09:53 +0000
commitb10bdff3377c8ec73c6ed2135b6940fb06fb6abb (patch)
tree0dee0996232abdea82279b642c7e5a4b80f9fccc /clang/lib
parent41ede8e507092a68e1dbc1002be3eacdb7554180 (diff)
downloadbcm5719-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.h1
-rw-r--r--clang/lib/Format/TokenAnnotator.cpp22
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;
OpenPOWER on IntegriCloud