diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 7493f91c0b5..f99b914fa7e 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -3164,7 +3164,7 @@ declare module 'vscode' { */ public readonly tokenModifiers: string[]; - constructor(tokenTypes: string[], tokenModifiers: string[]); + constructor(tokenTypes: string[], tokenModifiers?: string[]); } /** @@ -3184,7 +3184,7 @@ declare module 'vscode' { * @param tokenType The encoded token type. * @param tokenModifiers The encoded token modifiers. */ - push(line: number, char: number, length: number, tokenType: number, tokenModifiers: number): void; + push(line: number, char: number, length: number, tokenType: number, tokenModifiers?: number): void; /** * Add another token. Use only when providing a legend. diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index 5b14380f8aa..f57d386ee87 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -2420,7 +2420,7 @@ export class SemanticTokensLegend { public readonly tokenTypes: string[]; public readonly tokenModifiers: string[]; - constructor(tokenTypes: string[], tokenModifiers: string[]) { + constructor(tokenTypes: string[], tokenModifiers: string[] = []) { this.tokenTypes = tokenTypes; this.tokenModifiers = tokenModifiers; } @@ -2461,10 +2461,13 @@ export class SemanticTokensBuilder { } } - public push(line: number, char: number, length: number, tokenType: number, tokenModifiers: number): void; + public push(line: number, char: number, length: number, tokenType: number, tokenModifiers?: number): void; public push(range: Range, tokenType: string, tokenModifiers?: string[]): void; public push(arg0: any, arg1: any, arg2: any, arg3?: any, arg4?: any): void { - if (typeof arg0 === 'number' && typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'number') { + if (typeof arg0 === 'number' && typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'number' && (typeof arg4 === 'number' || typeof arg4 === 'undefined')) { + if (typeof arg4 === 'undefined') { + arg4 = 0; + } // 1st overload return this._pushEncoded(arg0, arg1, arg2, arg3, arg4); } diff --git a/src/vs/workbench/test/browser/api/extHostTypes.test.ts b/src/vs/workbench/test/browser/api/extHostTypes.test.ts index ea4abb68958..92e9616c1a8 100644 --- a/src/vs/workbench/test/browser/api/extHostTypes.test.ts +++ b/src/vs/workbench/test/browser/api/extHostTypes.test.ts @@ -587,6 +587,18 @@ suite('ExtHostTypes', function () { ]); }); + test('SemanticTokensBuilder no modifier', () => { + const builder = new types.SemanticTokensBuilder(); + builder.push(1, 0, 5, 1); + builder.push(1, 10, 4, 2); + builder.push(2, 2, 3, 2); + assert.deepEqual(toArr(builder.build().data), [ + 1, 0, 5, 1, 0, + 0, 10, 4, 2, 0, + 1, 2, 3, 2, 0 + ]); + }); + test('SemanticTokensBuilder out of order 1', () => { const builder = new types.SemanticTokensBuilder(); builder.push(2, 0, 5, 1, 1);