volar-service-typescript 0.0.64 → 0.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,8 @@
1
1
  import type * as vscode from '@volar/language-service';
2
+ import type * as ts from 'typescript';
2
3
  import type { TextDocument } from 'vscode-languageserver-textdocument';
3
- import type { SharedContext } from './types';
4
4
  import type { URI } from 'vscode-uri';
5
+ import type { SharedContext } from './types';
5
6
  export declare function register(ts: typeof import('typescript'), ctx: SharedContext): (uri: URI, document: TextDocument, range: vscode.Range, legend: vscode.SemanticTokensLegend) => [number, number, number, number, number][] | undefined;
7
+ export declare function convertClassificationsToSemanticTokens(document: TextDocument, { start, length }: ts.TextSpan, legend: vscode.SemanticTokensLegend, response: ts.Classifications): [number, number, number, number, number][];
6
8
  //# sourceMappingURL=semanticTokens.d.ts.map
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.register = register;
4
+ exports.convertClassificationsToSemanticTokens = convertClassificationsToSemanticTokens;
4
5
  const shared_1 = require("../shared");
5
6
  function register(ts, ctx) {
6
7
  return (uri, document, range, legend) => {
@@ -14,61 +15,64 @@ function register(ts, ctx) {
14
15
  if (!response) {
15
16
  return;
16
17
  }
17
- let tokenModifiersTable = [];
18
- tokenModifiersTable[2 /* TokenModifier.async */] = 1 << legend.tokenModifiers.indexOf('async');
19
- tokenModifiersTable[0 /* TokenModifier.declaration */] = 1 << legend.tokenModifiers.indexOf('declaration');
20
- tokenModifiersTable[3 /* TokenModifier.readonly */] = 1 << legend.tokenModifiers.indexOf('readonly');
21
- tokenModifiersTable[1 /* TokenModifier.static */] = 1 << legend.tokenModifiers.indexOf('static');
22
- tokenModifiersTable[5 /* TokenModifier.local */] = 1 << legend.tokenModifiers.indexOf('local');
23
- tokenModifiersTable[4 /* TokenModifier.defaultLibrary */] = 1 << legend.tokenModifiers.indexOf('defaultLibrary');
24
- tokenModifiersTable = tokenModifiersTable.map(mod => Math.max(mod, 0));
25
- const end = start + length;
26
- const tokenSpan = response.spans;
27
- const tokens = [];
28
- let i = 0;
29
- while (i < tokenSpan.length) {
30
- const offset = tokenSpan[i++];
31
- if (offset >= end) {
32
- break;
33
- }
34
- const length = tokenSpan[i++];
35
- const tsClassification = tokenSpan[i++];
36
- const tokenType = getTokenTypeFromClassification(tsClassification);
37
- if (tokenType === undefined) {
38
- continue;
39
- }
40
- const tokenModifiers = getTokenModifierFromClassification(tsClassification);
41
- // we can use the document's range conversion methods because the result is at the same version as the document
42
- const startPos = document.positionAt(offset);
43
- const endPos = document.positionAt(offset + length);
44
- const serverToken = tsTokenTypeToServerTokenType(tokenType);
45
- if (serverToken === undefined) {
46
- continue;
47
- }
48
- const serverTokenModifiers = tsTokenModifierToServerTokenModifier(tokenModifiers);
49
- for (let line = startPos.line; line <= endPos.line; line++) {
50
- const startCharacter = (line === startPos.line ? startPos.character : 0);
51
- const endCharacter = (line === endPos.line ? endPos.character : docLineLength(document, line));
52
- tokens.push([line, startCharacter, endCharacter - startCharacter, serverToken, serverTokenModifiers]);
53
- }
18
+ return convertClassificationsToSemanticTokens(document, { start, length }, legend, response);
19
+ };
20
+ }
21
+ function convertClassificationsToSemanticTokens(document, { start, length }, legend, response) {
22
+ let tokenModifiersTable = [];
23
+ tokenModifiersTable[2 /* TokenModifier.async */] = 1 << legend.tokenModifiers.indexOf('async');
24
+ tokenModifiersTable[0 /* TokenModifier.declaration */] = 1 << legend.tokenModifiers.indexOf('declaration');
25
+ tokenModifiersTable[3 /* TokenModifier.readonly */] = 1 << legend.tokenModifiers.indexOf('readonly');
26
+ tokenModifiersTable[1 /* TokenModifier.static */] = 1 << legend.tokenModifiers.indexOf('static');
27
+ tokenModifiersTable[5 /* TokenModifier.local */] = 1 << legend.tokenModifiers.indexOf('local');
28
+ tokenModifiersTable[4 /* TokenModifier.defaultLibrary */] = 1 << legend.tokenModifiers.indexOf('defaultLibrary');
29
+ tokenModifiersTable = tokenModifiersTable.map(mod => Math.max(mod, 0));
30
+ const end = start + length;
31
+ const tokenSpan = response.spans;
32
+ const tokens = [];
33
+ let i = 0;
34
+ while (i < tokenSpan.length) {
35
+ const offset = tokenSpan[i++];
36
+ if (offset >= end) {
37
+ break;
54
38
  }
55
- return tokens;
56
- function tsTokenTypeToServerTokenType(tokenType) {
57
- return legend.tokenTypes.indexOf(tokenTypes[tokenType]);
39
+ const length = tokenSpan[i++];
40
+ const tsClassification = tokenSpan[i++];
41
+ const tokenType = getTokenTypeFromClassification(tsClassification);
42
+ if (tokenType === undefined) {
43
+ continue;
58
44
  }
59
- function tsTokenModifierToServerTokenModifier(input) {
60
- let m = 0;
61
- let i = 0;
62
- while (input) {
63
- if (input & 1) {
64
- m |= tokenModifiersTable[i];
65
- }
66
- input = input >> 1;
67
- i++;
45
+ const tokenModifiers = getTokenModifierFromClassification(tsClassification);
46
+ // we can use the document's range conversion methods because the result is at the same version as the document
47
+ const startPos = document.positionAt(offset);
48
+ const endPos = document.positionAt(offset + length);
49
+ const serverToken = tsTokenTypeToServerTokenType(tokenType);
50
+ if (serverToken === undefined) {
51
+ continue;
52
+ }
53
+ const serverTokenModifiers = tsTokenModifierToServerTokenModifier(tokenModifiers);
54
+ for (let line = startPos.line; line <= endPos.line; line++) {
55
+ const startCharacter = (line === startPos.line ? startPos.character : 0);
56
+ const endCharacter = (line === endPos.line ? endPos.character : docLineLength(document, line));
57
+ tokens.push([line, startCharacter, endCharacter - startCharacter, serverToken, serverTokenModifiers]);
58
+ }
59
+ }
60
+ return tokens;
61
+ function tsTokenTypeToServerTokenType(tokenType) {
62
+ return legend.tokenTypes.indexOf(tokenTypes[tokenType]);
63
+ }
64
+ function tsTokenModifierToServerTokenModifier(input) {
65
+ let m = 0;
66
+ let i = 0;
67
+ while (input) {
68
+ if (input & 1) {
69
+ m |= tokenModifiersTable[i];
68
70
  }
69
- return m;
71
+ input = input >> 1;
72
+ i++;
70
73
  }
71
- };
74
+ return m;
75
+ }
72
76
  }
73
77
  function docLineLength(document, line) {
74
78
  const currentLineOffset = document.offsetAt({ line, character: 0 });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "volar-service-typescript",
3
- "version": "0.0.64",
3
+ "version": "0.0.65",
4
4
  "description": "Integrate TypeScript into Volar",
5
5
  "homepage": "https://github.com/volarjs/services/tree/master/packages/typescript",
6
6
  "bugs": "https://github.com/volarjs/services/issues",
@@ -43,5 +43,6 @@
43
43
  "@volar/language-service": {
44
44
  "optional": true
45
45
  }
46
- }
46
+ },
47
+ "gitHead": "f0253f4f3e3b0b0f1a453f99b354eb9feaec38cd"
47
48
  }