diff --git a/src/vs/base/common/json.ts b/src/vs/base/common/json.ts index 300eae4eb7e..98a6a6f68c9 100644 --- a/src/vs/base/common/json.ts +++ b/src/vs/base/common/json.ts @@ -629,7 +629,7 @@ export type JSONPath = Segment[]; export interface ParseOptions { disallowComments?: boolean; - allowTrailingComma?: boolean; + disallowTrailingComma?: boolean; } /** @@ -818,7 +818,7 @@ export function visit(text: string, visitor: JSONVisitor, options?: ParseOptions onError = toOneArgVisit(visitor.onError); let disallowComments = options && options.disallowComments; - let allowTrailingComma = options && options.allowTrailingComma; + let disallowTrailingComma = options && options.disallowTrailingComma; function scanNext(): SyntaxKind { while (true) { let token = _scanner.scan(); @@ -930,7 +930,7 @@ export function visit(text: string, visitor: JSONVisitor, options?: ParseOptions } onSeparator(','); scanNext(); // consume comma - if (_scanner.getToken() === SyntaxKind.CloseBraceToken && allowTrailingComma) { + if (_scanner.getToken() === SyntaxKind.CloseBraceToken && !disallowTrailingComma) { break; } } else if (needsComma) { @@ -962,7 +962,7 @@ export function visit(text: string, visitor: JSONVisitor, options?: ParseOptions } onSeparator(','); scanNext(); // consume comma - if (_scanner.getToken() === SyntaxKind.CloseBracketToken && allowTrailingComma) { + if (_scanner.getToken() === SyntaxKind.CloseBracketToken && !disallowTrailingComma) { break; } } else if (needsComma) { diff --git a/src/vs/base/test/common/json.test.ts b/src/vs/base/test/common/json.test.ts index 2551f00fde3..3606713aa3b 100644 --- a/src/vs/base/test/common/json.test.ts +++ b/src/vs/base/test/common/json.test.ts @@ -229,15 +229,19 @@ suite('JSON', () => { }); test('parse: trailing comma', () => { - let options = { allowTrailingComma: true }; + // default is allow + assertValidParse('{ "hello": [], }', { hello: [] }); + + let options = { disallowTrailingComma: false }; assertValidParse('{ "hello": [], }', { hello: [] }, options); assertValidParse('{ "hello": [] }', { hello: [] }, options); assertValidParse('{ "hello": [], "world": {}, }', { hello: [], world: {} }, options); assertValidParse('{ "hello": [], "world": {} }', { hello: [], world: {} }, options); assertValidParse('{ "hello": [1,] }', { hello: [1] }, options); - assertInvalidParse('{ "hello": [], }', { hello: [] }); - assertInvalidParse('{ "hello": [], "world": {}, }', { hello: [], world: {} }); + options = { disallowTrailingComma: true }; + assertInvalidParse('{ "hello": [], }', { hello: [] }, options); + assertInvalidParse('{ "hello": [], "world": {}, }', { hello: [], world: {} }, options); }); test('tree: literals', () => { diff --git a/src/vs/workbench/services/configuration/node/configurationEditingService.ts b/src/vs/workbench/services/configuration/node/configurationEditingService.ts index ffea6529bbf..cc274bdbdb2 100644 --- a/src/vs/workbench/services/configuration/node/configurationEditingService.ts +++ b/src/vs/workbench/services/configuration/node/configurationEditingService.ts @@ -371,7 +371,7 @@ export class ConfigurationEditingService { return false; } const parseErrors: json.ParseError[] = []; - json.parse(model.getValue(), parseErrors, { allowTrailingComma: true }); + json.parse(model.getValue(), parseErrors); return parseErrors.length > 0; } diff --git a/src/vs/workbench/services/configuration/node/jsonEditingService.ts b/src/vs/workbench/services/configuration/node/jsonEditingService.ts index 2c47d99e7c6..13f2fe32f22 100644 --- a/src/vs/workbench/services/configuration/node/jsonEditingService.ts +++ b/src/vs/workbench/services/configuration/node/jsonEditingService.ts @@ -95,7 +95,7 @@ export class JSONEditingService implements IJSONEditingService { private hasParseErrors(model: ITextModel): boolean { const parseErrors: json.ParseError[] = []; - json.parse(model.getValue(), parseErrors, { allowTrailingComma: true }); + json.parse(model.getValue(), parseErrors); return parseErrors.length > 0; } diff --git a/src/vs/workbench/services/keybinding/common/keybindingEditing.ts b/src/vs/workbench/services/keybinding/common/keybindingEditing.ts index 98b80945993..49bfd52bada 100644 --- a/src/vs/workbench/services/keybinding/common/keybindingEditing.ts +++ b/src/vs/workbench/services/keybinding/common/keybindingEditing.ts @@ -255,7 +255,7 @@ export class KeybindingsEditingService extends Disposable implements IKeybinding private parse(model: ITextModel): { result: IUserFriendlyKeybinding[], parseErrors: json.ParseError[] } { const parseErrors: json.ParseError[] = []; - const result = json.parse(model.getValue(), parseErrors, { allowTrailingComma: true }); + const result = json.parse(model.getValue(), parseErrors); return { result, parseErrors }; }