Index: lib/Format/TokenAnnotator.cpp =================================================================== --- lib/Format/TokenAnnotator.cpp +++ lib/Format/TokenAnnotator.cpp @@ -1960,7 +1960,13 @@ Left.Previous->is(tok::char_constant)) return true; if (Left.is(TT_DictLiteral) && Left.is(tok::l_brace) && - Left.NestingLevel == 0) + Left.NestingLevel == 0 && Left.Previous && + Left.Previous->is(tok::equal) && + Line.First->isOneOf(tok::identifier, Keywords.kw_import, + tok::kw_export) && + // kw_var is a pseudo-token that's a tok::identifier, so matches above. + !Line.First->is(Keywords.kw_var)) + // Enum style object literal. return true; } else if (Style.Language == FormatStyle::LK_Java) { if (Right.is(tok::plus) && Left.is(tok::string_literal) && Right.Next && Index: unittests/Format/FormatTestJS.cpp =================================================================== --- unittests/Format/FormatTestJS.cpp +++ unittests/Format/FormatTestJS.cpp @@ -94,10 +94,7 @@ TEST_F(FormatTestJS, ES6DestructuringAssignment) { verifyFormat("var [a, b, c] = [1, 2, 3];"); - verifyFormat("var {a, b} = {\n" - " a: 1,\n" - " b: 2\n" - "};"); + verifyFormat("var {a, b} = {a: 1, b: 2};"); } TEST_F(FormatTestJS, ContainerLiterals) { @@ -139,6 +136,12 @@ " return x.zIsTooLongForOneLineWithTheDeclarationLine();\n" " }\n" "};"); + // Simple object literal, as opposed to enum style below. + verifyFormat("var obj = {a: 123};"); + // Enum style top level assignment. + verifyFormat("X = {\n a: 123\n};"); + verifyFormat("X.Y = {\n a: 123\n};"); + verifyFormat("x = foo && {a: 123};"); } TEST_F(FormatTestJS, SpacesInContainerLiterals) { @@ -545,7 +548,7 @@ getGoogleJSStyleWithColumns(20)); verifyFormat("import {X as myLocalX, Y as myLocalY} from 'some/module.js';"); verifyFormat("import * as lib from 'some/module.js';"); - verifyFormat("var x = {\n import: 1\n};\nx.import = 2;"); + verifyFormat("var x = {import: 1};\nx.import = 2;"); verifyFormat("export function fn() {\n" " return 'fn';\n"