From 43394dee801ea2b5ea433ffffcaf20cb8da176ab Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Wed, 18 Dec 2019 17:07:09 +0100 Subject: [PATCH] more tests --- .../src/modes/javascriptSemanticTokens.ts | 11 +++++--- .../server/src/test/semanticTokens.test.ts | 27 ++++++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/extensions/html-language-features/server/src/modes/javascriptSemanticTokens.ts b/extensions/html-language-features/server/src/modes/javascriptSemanticTokens.ts index 382e6fe19eb..e3015f40e89 100644 --- a/extensions/html-language-features/server/src/modes/javascriptSemanticTokens.ts +++ b/extensions/html-language-features/server/src/modes/javascriptSemanticTokens.ts @@ -30,8 +30,11 @@ export function getSemanticTokens(jsLanguageService: ts.LanguageService, current if (symbol) { let typeIdx = tokenFromDeclarationMapping[symbol.valueDeclaration.kind]; let modifierSet = 0; - if (node.parent && (node.parent).name === node) { - modifierSet = TokenModifier.declaration; + if (node.parent) { + const parentTypeIdx = tokenFromDeclarationMapping[node.parent.kind]; + if (parentTypeIdx === typeIdx && (node.parent).name === node) { + modifierSet = TokenModifier.declaration; + } } if (typeIdx !== undefined) { resultTokens.push({ offset: node.getStart(), length: node.getWidth(), typeIdx, modifierSet }); @@ -130,5 +133,7 @@ const tokenFromDeclarationMapping: { [name: string]: TokenType } = { [ts.SyntaxKind.EnumDeclaration]: TokenType.enum, [ts.SyntaxKind.EnumMember]: TokenType.property, [ts.SyntaxKind.ClassDeclaration]: TokenType.property, - [ts.SyntaxKind.MethodDeclaration]: TokenType.function + [ts.SyntaxKind.MethodDeclaration]: TokenType.member, + [ts.SyntaxKind.FunctionDeclaration]: TokenType.function, + [ts.SyntaxKind.MethodSignature]: TokenType.member, }; diff --git a/extensions/html-language-features/server/src/test/semanticTokens.test.ts b/extensions/html-language-features/server/src/test/semanticTokens.test.ts index aeb9c672896..0bc0e934e9c 100644 --- a/extensions/html-language-features/server/src/test/semanticTokens.test.ts +++ b/extensions/html-language-features/server/src/test/semanticTokens.test.ts @@ -83,9 +83,34 @@ suite('JavaScript Semantic Tokens', () => { ]; assertTokens(input, [ t(3, 11, 3, 'function.declaration'), t(3, 15, 2, 'parameter.declaration'), - t(4, 11, 3, 'function'), t(4, 15, 3, 'namespace'), t(4, 20, 3, 'member'), t(4, 24, 2, 'parameter') + t(4, 11, 3, 'function'), t(4, 15, 4, 'variable'), t(4, 20, 3, 'member'), t(4, 24, 2, 'parameter') + ]); + }); + + test('members', () => { + const input = [ + /*0*/'', + /*1*/'', + /*2*/'', + /*10*/'', + /*11*/'', + ]; + assertTokens(input, [ + t(3, 8, 1, 'class.declaration'), + t(4, 11, 1, 'member.declaration'), + t(5, 4, 1, 'property.declaration'), + t(6, 4, 1, 'member.declaration'), t(6, 17, 1, 'class'), t(6, 19, 1, 'property'), + t(7, 8, 1, 'member.declaration'), ]); }); + });