Index: cfe/trunk/lib/Format/TokenAnnotator.cpp =================================================================== --- cfe/trunk/lib/Format/TokenAnnotator.cpp +++ cfe/trunk/lib/Format/TokenAnnotator.cpp @@ -2373,6 +2373,8 @@ return Style.BreakBeforeBinaryOperators == FormatStyle::BOS_None; if (Right.is(Keywords.kw_in)) return Style.BreakBeforeBinaryOperators != FormatStyle::BOS_None; + if (Right.is(Keywords.kw_as)) + return false; // must not break before as in 'x as type' casts } if (Left.is(tok::at)) Index: cfe/trunk/unittests/Format/FormatTestJS.cpp =================================================================== --- cfe/trunk/unittests/Format/FormatTestJS.cpp +++ cfe/trunk/unittests/Format/FormatTestJS.cpp @@ -1051,8 +1051,8 @@ // ... but not if from is just an identifier. verifyFormat("export {\n" " from as from,\n" - " someSurprisinglyLongVariable\n" - " as from\n" + " someSurprisinglyLongVariable as\n" + " from\n" "};", getGoogleJSStyleWithColumns(20)); verifyFormat("export class C {\n" @@ -1205,6 +1205,9 @@ TEST_F(FormatTestJS, CastSyntax) { verifyFormat("var x = foo;"); verifyFormat("var x = foo as type;"); + verifyFormat("let x = (a + b) as\n" + " LongTypeIsLong;", + getGoogleJSStyleWithColumns(20)); verifyFormat("foo = [\n" " 1, //\n" " 2\n"