volar-service-typescript 0.0.37 → 0.0.39
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.
- package/lib/configs/getUserPreferences.d.ts +2 -2
- package/lib/configs/getUserPreferences.js +5 -1
- package/lib/plugins/syntactic.d.ts +4 -4
- package/lib/plugins/syntactic.js +33 -15
- package/lib/syntacticLanguageService.d.ts +2 -2
- package/lib/syntacticLanguageService.js +37 -38
- package/package.json +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as ts from 'typescript';
|
|
2
2
|
import type { TextDocument } from 'vscode-languageserver-textdocument';
|
|
3
|
-
import type {
|
|
4
|
-
export declare function getUserPreferences(ctx:
|
|
3
|
+
import type { ServiceContext } from '@volar/language-service';
|
|
4
|
+
export declare function getUserPreferences(ctx: ServiceContext, document: TextDocument): Promise<ts.UserPreferences>;
|
|
5
5
|
//# sourceMappingURL=getUserPreferences.d.ts.map
|
|
@@ -4,6 +4,10 @@ exports.getUserPreferences = void 0;
|
|
|
4
4
|
const path = require("path-browserify");
|
|
5
5
|
const shared_1 = require("../shared");
|
|
6
6
|
async function getUserPreferences(ctx, document) {
|
|
7
|
+
let currentDirectory = '';
|
|
8
|
+
if (ctx.language.typescript) {
|
|
9
|
+
currentDirectory = ctx.language.typescript.languageServiceHost.getCurrentDirectory();
|
|
10
|
+
}
|
|
7
11
|
const config = await ctx.env.getConfiguration?.((0, shared_1.getConfigTitle)(document)) ?? {};
|
|
8
12
|
const preferencesConfig = config?.preferences ?? {};
|
|
9
13
|
const preferences = {
|
|
@@ -22,7 +26,7 @@ async function getUserPreferences(ctx, document) {
|
|
|
22
26
|
includeCompletionsWithSnippetText: config.suggest?.includeCompletionsWithSnippetText ?? true,
|
|
23
27
|
includeCompletionsWithClassMemberSnippets: config.suggest?.classMemberSnippets?.enabled ?? true,
|
|
24
28
|
includeCompletionsWithObjectLiteralMethodSnippets: config.suggest?.objectLiteralMethodSnippets?.enabled ?? true,
|
|
25
|
-
autoImportFileExcludePatterns: getAutoImportFileExcludePatternsPreference(preferencesConfig,
|
|
29
|
+
autoImportFileExcludePatterns: getAutoImportFileExcludePatternsPreference(preferencesConfig, currentDirectory),
|
|
26
30
|
useLabelDetailsInCompletionEntries: true,
|
|
27
31
|
allowIncompleteCompletions: true,
|
|
28
32
|
displayPartsForJSDoc: true,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { ProviderResult, ServiceContext, LanguageServicePlugin } from '@volar/language-service';
|
|
2
2
|
import type { TextDocument } from 'vscode-languageserver-textdocument';
|
|
3
|
-
export declare function create(ts: typeof import('typescript'), { isFormattingEnabled, isAutoClosingTagsEnabled, }?: {
|
|
4
|
-
isFormattingEnabled?(document: TextDocument, context: ServiceContext): ProviderResult<boolean>;
|
|
5
|
-
isAutoClosingTagsEnabled?(document: TextDocument, context: ServiceContext): ProviderResult<boolean>;
|
|
6
|
-
}): LanguageServicePlugin;
|
|
7
3
|
import type * as ts from 'typescript';
|
|
8
4
|
export declare function getLanguageServiceByDocument(ts: typeof import('typescript'), document: TextDocument): {
|
|
9
5
|
languageService: ts.LanguageService;
|
|
10
6
|
fileName: string;
|
|
11
7
|
};
|
|
8
|
+
export declare function create(ts: typeof import('typescript'), { isFormattingEnabled, isAutoClosingTagsEnabled, }?: {
|
|
9
|
+
isFormattingEnabled?(document: TextDocument, context: ServiceContext): ProviderResult<boolean>;
|
|
10
|
+
isAutoClosingTagsEnabled?(document: TextDocument, context: ServiceContext): ProviderResult<boolean>;
|
|
11
|
+
}): LanguageServicePlugin;
|
|
12
12
|
//# sourceMappingURL=syntactic.d.ts.map
|
package/lib/plugins/syntactic.js
CHANGED
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.create = exports.getLanguageServiceByDocument = 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");
|
|
7
7
|
const syntacticLanguageService_1 = require("../syntacticLanguageService");
|
|
8
|
+
const snapshots = new WeakMap();
|
|
9
|
+
let created;
|
|
10
|
+
function getLanguageServiceByDocument(ts, document) {
|
|
11
|
+
if (!created) {
|
|
12
|
+
created = (0, syntacticLanguageService_1.createLanguageService)(ts, true);
|
|
13
|
+
}
|
|
14
|
+
let cache = snapshots.get(document);
|
|
15
|
+
if (!cache || cache[0] !== document.version) {
|
|
16
|
+
const snapshot = ts.ScriptSnapshot.fromString(document.getText());
|
|
17
|
+
cache = [document.version, snapshot];
|
|
18
|
+
snapshots.set(document, cache);
|
|
19
|
+
created.updateFile(document.uri, cache[1], document.languageId === 'javascript'
|
|
20
|
+
? ts.ScriptKind.JS
|
|
21
|
+
: document.languageId === 'javascriptreact'
|
|
22
|
+
? ts.ScriptKind.JSX
|
|
23
|
+
: document.languageId === 'typescriptreact'
|
|
24
|
+
? ts.ScriptKind.TSX
|
|
25
|
+
: ts.ScriptKind.TS);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
languageService: created.languageService,
|
|
29
|
+
fileName: document.uri,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
exports.getLanguageServiceByDocument = getLanguageServiceByDocument;
|
|
8
33
|
function create(ts, { isFormattingEnabled = async (document, context) => {
|
|
9
34
|
return await context.env.getConfiguration?.((0, shared_1.getConfigTitle)(document) + '.format.enable') ?? true;
|
|
10
35
|
}, isAutoClosingTagsEnabled = async (document, context) => {
|
|
@@ -16,12 +41,16 @@ function create(ts, { isFormattingEnabled = async (document, context) => {
|
|
|
16
41
|
autoFormatTriggerCharacters: [';', '}', '\n'],
|
|
17
42
|
create(context) {
|
|
18
43
|
return {
|
|
19
|
-
async provideAutoInsertionEdit(document,
|
|
44
|
+
async provideAutoInsertionEdit(document, selection, change) {
|
|
45
|
+
// selection must at end of change
|
|
46
|
+
if (document.offsetAt(selection) !== change.rangeOffset + change.text.length) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
20
49
|
if ((document.languageId === 'javascriptreact' || document.languageId === 'typescriptreact')
|
|
21
|
-
&&
|
|
50
|
+
&& change.text.endsWith('>')
|
|
22
51
|
&& await isAutoClosingTagsEnabled(document, context)) {
|
|
23
52
|
const { languageService, fileName } = getLanguageServiceByDocument(ts, document);
|
|
24
|
-
const close = languageService.getJsxClosingTagAtPosition(fileName, document.offsetAt(
|
|
53
|
+
const close = languageService.getJsxClosingTagAtPosition(fileName, document.offsetAt(selection));
|
|
25
54
|
if (close) {
|
|
26
55
|
return '$0' + close.newText;
|
|
27
56
|
}
|
|
@@ -96,15 +125,4 @@ function create(ts, { isFormattingEnabled = async (document, context) => {
|
|
|
96
125
|
};
|
|
97
126
|
}
|
|
98
127
|
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;
|
|
110
128
|
//# sourceMappingURL=syntactic.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type * as ts from 'typescript';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function createLanguageService(ts: typeof import('typescript'), syntaxOnly: boolean): {
|
|
3
3
|
languageService: ts.LanguageService;
|
|
4
|
-
fileName: string;
|
|
4
|
+
updateFile: (fileName: string, snapshot: ts.IScriptSnapshot, scriptKind: ts.ScriptKind) => void;
|
|
5
5
|
};
|
|
6
6
|
//# sourceMappingURL=syntacticLanguageService.d.ts.map
|
|
@@ -1,45 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
let
|
|
6
|
-
let
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
3
|
+
exports.createLanguageService = void 0;
|
|
4
|
+
function createLanguageService(ts, syntaxOnly) {
|
|
5
|
+
let currentProjectVersion = -1;
|
|
6
|
+
let fileNames = [];
|
|
7
|
+
const scriptInfos = new Map();
|
|
8
|
+
const host = {
|
|
9
|
+
getProjectVersion: () => currentProjectVersion.toString(),
|
|
10
|
+
getScriptFileNames: () => fileNames,
|
|
11
|
+
getScriptVersion: () => currentProjectVersion.toString(),
|
|
12
|
+
getScriptSnapshot: fileName => scriptInfos.get(fileName)?.snapshot,
|
|
13
|
+
getCompilationSettings: () => ({}),
|
|
14
|
+
getCurrentDirectory: () => '',
|
|
15
|
+
getDefaultLibFileName: () => '',
|
|
16
|
+
readFile: () => undefined,
|
|
17
|
+
fileExists: fileName => scriptInfos.has(fileName),
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
languageService: syntaxOnly
|
|
21
|
+
? ts.createLanguageService(host, undefined, ts.LanguageServiceMode.Syntactic)
|
|
22
|
+
: ts.createLanguageService(host),
|
|
23
|
+
updateFile,
|
|
24
|
+
};
|
|
25
|
+
function updateFile(fileName, snapshot, scriptKind) {
|
|
26
|
+
let scriptInfo = scriptInfos.get(fileName);
|
|
27
|
+
if (scriptInfo?.snapshot === snapshot && scriptInfo.kind === scriptKind) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
27
30
|
currentProjectVersion++;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
languageService: syntaxOnlyLanguageService,
|
|
33
|
-
fileName: currentFileName,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
languageService ??= ts.createLanguageService(host);
|
|
38
|
-
return {
|
|
39
|
-
languageService,
|
|
40
|
-
fileName: currentFileName,
|
|
31
|
+
scriptInfo = {
|
|
32
|
+
snapshot,
|
|
33
|
+
kind: scriptKind,
|
|
34
|
+
version: (scriptInfo?.version ?? 0) + 1,
|
|
41
35
|
};
|
|
36
|
+
const filesChanged = !scriptInfos.has(fileName);
|
|
37
|
+
scriptInfos.set(fileName, scriptInfo);
|
|
38
|
+
if (filesChanged) {
|
|
39
|
+
fileNames = [...scriptInfos.keys()];
|
|
40
|
+
}
|
|
42
41
|
}
|
|
43
42
|
}
|
|
44
|
-
exports.
|
|
43
|
+
exports.createLanguageService = createLanguageService;
|
|
45
44
|
//# 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.39",
|
|
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.4"
|
|
39
39
|
},
|
|
40
40
|
"peerDependenciesMeta": {
|
|
41
41
|
"@volar/language-service": {
|
|
42
42
|
"optional": true
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "69bf117b9fddb1d485396d484948485183c6d40a"
|
|
46
46
|
}
|