1namespace ts.projectSystem { 2 describe("unittests:: tsserver:: format settings", () => { 3 it("can be set globally", () => { 4 const f1 = { 5 path: "/a/b/app.ts", 6 content: "let x;" 7 }; 8 const host = createServerHost([f1]); 9 const projectService = createProjectService(host); 10 projectService.openClientFile(f1.path); 11 12 const defaultSettings = projectService.getFormatCodeOptions(f1.path as server.NormalizedPath); 13 14 // set global settings 15 const newGlobalSettings1 = { ...defaultSettings, placeOpenBraceOnNewLineForControlBlocks: !defaultSettings.placeOpenBraceOnNewLineForControlBlocks }; 16 projectService.setHostConfiguration({ formatOptions: newGlobalSettings1 }); 17 18 // get format options for file - should be equal to new global settings 19 const s1 = projectService.getFormatCodeOptions(server.toNormalizedPath(f1.path)); 20 assert.deepEqual(s1, newGlobalSettings1, "file settings should be the same with global settings"); 21 22 // set per file format options 23 const newPerFileSettings = { ...defaultSettings, insertSpaceAfterCommaDelimiter: !defaultSettings.insertSpaceAfterCommaDelimiter }; 24 projectService.setHostConfiguration({ formatOptions: newPerFileSettings, file: f1.path }); 25 26 // get format options for file - should be equal to new per-file settings 27 const s2 = projectService.getFormatCodeOptions(server.toNormalizedPath(f1.path)); 28 assert.deepEqual(s2, newPerFileSettings, "file settings should be the same with per-file settings"); 29 30 // set new global settings - they should not affect ones that were set per-file 31 const newGlobalSettings2 = { ...defaultSettings, insertSpaceAfterSemicolonInForStatements: !defaultSettings.insertSpaceAfterSemicolonInForStatements }; 32 projectService.setHostConfiguration({ formatOptions: newGlobalSettings2 }); 33 34 // get format options for file - should be equal to new per-file settings 35 const s3 = projectService.getFormatCodeOptions(server.toNormalizedPath(f1.path)); 36 assert.deepEqual(s3, newPerFileSettings, "file settings should still be the same with per-file settings"); 37 }); 38 }); 39} 40