volar-service-typescript 0.0.35 → 0.0.37
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.
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.create = void 0;
|
|
4
4
|
const nls = require("vscode-nls");
|
|
5
5
|
const shared_1 = require("../shared");
|
|
6
|
-
const syntacticLanguageService_1 = require("../syntacticLanguageService");
|
|
7
6
|
const lspConverters_1 = require("../utils/lspConverters");
|
|
7
|
+
const syntactic_1 = require("./syntactic");
|
|
8
8
|
const localize = nls.loadMessageBundle(); // TODO: not working
|
|
9
9
|
const defaultJsDoc = `/**\n * $0\n */`;
|
|
10
10
|
function create(ts) {
|
|
@@ -20,7 +20,7 @@ function create(ts) {
|
|
|
20
20
|
if (!isPotentiallyValidDocCompletionPosition(document, position)) {
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
|
-
const { languageService, fileName } = (0,
|
|
23
|
+
const { languageService, fileName } = (0, syntactic_1.getLanguageServiceByDocument)(ts, document);
|
|
24
24
|
const offset = document.offsetAt(position);
|
|
25
25
|
const docCommentTemplate = languageService.getDocCommentTemplateAtPosition(fileName, offset);
|
|
26
26
|
if (!docCommentTemplate) {
|
|
@@ -4,4 +4,9 @@ export declare function create(ts: typeof import('typescript'), { isFormattingEn
|
|
|
4
4
|
isFormattingEnabled?(document: TextDocument, context: ServiceContext): ProviderResult<boolean>;
|
|
5
5
|
isAutoClosingTagsEnabled?(document: TextDocument, context: ServiceContext): ProviderResult<boolean>;
|
|
6
6
|
}): LanguageServicePlugin;
|
|
7
|
+
import type * as ts from 'typescript';
|
|
8
|
+
export declare function getLanguageServiceByDocument(ts: typeof import('typescript'), document: TextDocument): {
|
|
9
|
+
languageService: ts.LanguageService;
|
|
10
|
+
fileName: string;
|
|
11
|
+
};
|
|
7
12
|
//# sourceMappingURL=syntactic.d.ts.map
|
package/lib/plugins/syntactic.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.create = void 0;
|
|
3
|
+
exports.getLanguageServiceByDocument = exports.create = void 0;
|
|
4
4
|
const getFormatCodeSettings_1 = require("../configs/getFormatCodeSettings");
|
|
5
5
|
const shared_1 = require("../shared");
|
|
6
6
|
const lspConverters_1 = require("../utils/lspConverters");
|
|
@@ -20,7 +20,7 @@ function create(ts, { isFormattingEnabled = async (document, context) => {
|
|
|
20
20
|
if ((document.languageId === 'javascriptreact' || document.languageId === 'typescriptreact')
|
|
21
21
|
&& lastChange.text.endsWith('>')
|
|
22
22
|
&& await isAutoClosingTagsEnabled(document, context)) {
|
|
23
|
-
const { languageService, fileName } = (
|
|
23
|
+
const { languageService, fileName } = getLanguageServiceByDocument(ts, document);
|
|
24
24
|
const close = languageService.getJsxClosingTagAtPosition(fileName, document.offsetAt(position));
|
|
25
25
|
if (close) {
|
|
26
26
|
return '$0' + close.newText;
|
|
@@ -31,7 +31,7 @@ function create(ts, { isFormattingEnabled = async (document, context) => {
|
|
|
31
31
|
if (!(0, shared_1.isTsDocument)(document)) {
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
const { languageService, fileName } = (
|
|
34
|
+
const { languageService, fileName } = getLanguageServiceByDocument(ts, document);
|
|
35
35
|
const outliningSpans = (0, shared_1.safeCall)(() => languageService.getOutliningSpans(fileName));
|
|
36
36
|
if (!outliningSpans) {
|
|
37
37
|
return [];
|
|
@@ -42,7 +42,7 @@ function create(ts, { isFormattingEnabled = async (document, context) => {
|
|
|
42
42
|
if (!(0, shared_1.isTsDocument)(document)) {
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
|
-
const { languageService, fileName } = (
|
|
45
|
+
const { languageService, fileName } = getLanguageServiceByDocument(ts, document);
|
|
46
46
|
const barItems = (0, shared_1.safeCall)(() => languageService.getNavigationTree(fileName));
|
|
47
47
|
if (!barItems) {
|
|
48
48
|
return [];
|
|
@@ -64,7 +64,7 @@ function create(ts, { isFormattingEnabled = async (document, context) => {
|
|
|
64
64
|
if (codeOptions) {
|
|
65
65
|
tsOptions.baseIndentSize = codeOptions.initialIndentLevel * options.tabSize;
|
|
66
66
|
}
|
|
67
|
-
const { languageService, fileName } = (
|
|
67
|
+
const { languageService, fileName } = getLanguageServiceByDocument(ts, document);
|
|
68
68
|
const scriptEdits = range
|
|
69
69
|
? (0, shared_1.safeCall)(() => languageService.getFormattingEditsForRange(fileName, document.offsetAt(range.start), document.offsetAt(range.end), tsOptions))
|
|
70
70
|
: (0, shared_1.safeCall)(() => languageService.getFormattingEditsForDocument(fileName, tsOptions));
|
|
@@ -84,7 +84,7 @@ function create(ts, { isFormattingEnabled = async (document, context) => {
|
|
|
84
84
|
if (codeOptions) {
|
|
85
85
|
tsOptions.baseIndentSize = codeOptions.initialIndentLevel * options.tabSize;
|
|
86
86
|
}
|
|
87
|
-
const { languageService, fileName } = (
|
|
87
|
+
const { languageService, fileName } = getLanguageServiceByDocument(ts, document);
|
|
88
88
|
const scriptEdits = (0, shared_1.safeCall)(() => languageService.getFormattingEditsAfterKeystroke(fileName, document.offsetAt(position), key, tsOptions));
|
|
89
89
|
if (!scriptEdits) {
|
|
90
90
|
return [];
|
|
@@ -96,4 +96,15 @@ function create(ts, { isFormattingEnabled = async (document, context) => {
|
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
98
|
exports.create = create;
|
|
99
|
+
const snapshots = new WeakMap();
|
|
100
|
+
function getLanguageServiceByDocument(ts, document) {
|
|
101
|
+
let cache = snapshots.get(document);
|
|
102
|
+
if (!cache || cache[0] !== document.version) {
|
|
103
|
+
const snapshot = ts.ScriptSnapshot.fromString(document.getText());
|
|
104
|
+
cache = [document.version, snapshot];
|
|
105
|
+
snapshots.set(document, cache);
|
|
106
|
+
}
|
|
107
|
+
return (0, syntacticLanguageService_1.getLanguageService)(ts, cache[1], document.languageId, true);
|
|
108
|
+
}
|
|
109
|
+
exports.getLanguageServiceByDocument = getLanguageServiceByDocument;
|
|
99
110
|
//# sourceMappingURL=syntactic.js.map
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type * as ts from 'typescript';
|
|
2
|
-
import
|
|
3
|
-
export declare function getLanguageService(ts: typeof import('typescript'), document: TextDocument): {
|
|
2
|
+
export declare function getLanguageService(ts: typeof import('typescript'), snapshot: ts.IScriptSnapshot, languageId: string, syntaxOnly: boolean): {
|
|
4
3
|
languageService: ts.LanguageService;
|
|
5
4
|
fileName: string;
|
|
6
5
|
};
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getLanguageService = void 0;
|
|
4
4
|
let currentProjectVersion = -1;
|
|
5
|
-
let currentDocument;
|
|
6
|
-
let currentDocumentVersion;
|
|
7
5
|
let currentFileName = '';
|
|
8
6
|
let currentSnapshot;
|
|
9
7
|
let languageService;
|
|
8
|
+
let syntaxOnlyLanguageService;
|
|
10
9
|
const host = {
|
|
11
10
|
getProjectVersion: () => currentProjectVersion.toString(),
|
|
12
11
|
getScriptFileNames: () => [currentFileName],
|
|
@@ -18,21 +17,29 @@ const host = {
|
|
|
18
17
|
readFile: () => undefined,
|
|
19
18
|
fileExists: fileName => fileName === currentFileName,
|
|
20
19
|
};
|
|
21
|
-
function getLanguageService(ts,
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
currentFileName = '/tmp.' + (
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
function getLanguageService(ts, snapshot, languageId, syntaxOnly) {
|
|
21
|
+
if (currentSnapshot !== snapshot) {
|
|
22
|
+
currentSnapshot = snapshot;
|
|
23
|
+
currentFileName = '/tmp.' + (languageId === 'javascript' ? 'js' :
|
|
24
|
+
languageId === 'typescriptreact' ? 'tsx' :
|
|
25
|
+
languageId === 'javascriptreact' ? 'jsx' :
|
|
27
26
|
'ts');
|
|
28
|
-
currentSnapshot = ts.ScriptSnapshot.fromString(document.getText());
|
|
29
27
|
currentProjectVersion++;
|
|
30
28
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
if (syntaxOnly) {
|
|
30
|
+
syntaxOnlyLanguageService ??= ts.createLanguageService(host, undefined, ts.LanguageServiceMode.Syntactic);
|
|
31
|
+
return {
|
|
32
|
+
languageService: syntaxOnlyLanguageService,
|
|
33
|
+
fileName: currentFileName,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
languageService ??= ts.createLanguageService(host);
|
|
38
|
+
return {
|
|
39
|
+
languageService,
|
|
40
|
+
fileName: currentFileName,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
36
43
|
}
|
|
37
44
|
exports.getLanguageService = getLanguageService;
|
|
38
45
|
//# sourceMappingURL=syntacticLanguageService.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "volar-service-typescript",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.37",
|
|
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",
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
"vscode-nls": "^5.2.0"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@volar/language-service": "~2.2.0-alpha.
|
|
38
|
+
"@volar/language-service": "~2.2.0-alpha.1"
|
|
39
39
|
},
|
|
40
40
|
"peerDependenciesMeta": {
|
|
41
41
|
"@volar/language-service": {
|
|
42
42
|
"optional": true
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "ee14afba19f419a31c4b70e5a34f88cefb59ac49"
|
|
46
46
|
}
|