@@ -22,12 +22,16 @@ We assume you already know:
22
22
// my-lang.worker.ts
23
23
import * as worker from ' monaco-editor-core/esm/vs/editor/editor.worker' ;
24
24
import type * as monaco from ' monaco-editor-core' ;
25
- import { createSimpleWorkerLanguageService , ServiceEnvironment } from ' @volar/monaco/worker' ;
25
+ import type { LanguageServiceEnvironment } from ' @volar/language-service' ;
26
+ import { createSimpleWorkerLanguageService } from ' @volar/monaco/worker' ;
27
+ import { URI } from ' vscode-uri' ;
26
28
27
29
self .onmessage = () => {
28
30
worker .initialize ((ctx : monaco .worker .IWorkerContext ) => {
29
- const env: ServiceEnvironment = {
30
- workspaceFolder: ' file:///' ,
31
+ const env: LanguageServiceEnvironment = {
32
+ workspaceFolders: [
33
+ URI .parse (' file:///' ),
34
+ ],
31
35
};
32
36
return createSimpleWorkerLanguageService ({
33
37
workerContext: ctx ,
@@ -48,16 +52,19 @@ self.onmessage = () => {
48
52
``` diff
49
53
import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
50
54
import type * as monaco from 'monaco-editor-core';
51
- - import { createSimpleWorkerLanguageService, ServiceEnvironment } from '@volar/monaco/worker';
52
- + import { createTypeScriptWorkerLanguageService, ServiceEnvironment } from '@volar/monaco/worker';
53
- + import * as ts from 'typescript';
54
- + import { create as createTypeScriptPlugins } from 'volar-service-typescript';
55
- + import { URI } from 'vscode-uri';
55
+ import type { LanguageServiceEnvironment } from '@volar/language-service';
56
+ - import { createSimpleWorkerLanguageService } from '@volar/monaco/worker';
57
+ + import { createTypeScriptWorkerLanguageService } from '@volar/monaco/worker';
58
+ import { URI } from 'vscode-uri';
59
+ + import { create as createTypeScriptServicePlugin } from 'volar-service-typescript';
60
+ + import ts from 'typescript';
56
61
57
62
self.onmessage = () => {
58
63
worker.initialize((ctx: monaco.worker.IWorkerContext) => {
59
- const env: ServiceEnvironment = {
60
- workspaceFolder: 'file:///',
64
+ const env: LanguageServiceEnvironment = {
65
+ workspaceFolders: [
66
+ URI.parse('file:///'),
67
+ ],
61
68
};
62
69
- return createSimpleWorkerLanguageService({
63
70
+ return createTypeScriptWorkerLanguageService({
@@ -76,7 +83,7 @@ self.onmessage = () => {
76
83
],
77
84
languageServicePlugins: [
78
85
// ...
79
- + ...createTypeScriptPlugins (ts),
86
+ + ...createTypeScriptServicePlugin (ts),
80
87
],
81
88
});
82
89
});
@@ -88,34 +95,38 @@ self.onmessage = () => {
88
95
``` diff
89
96
import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
90
97
import type * as monaco from 'monaco-editor-core';
91
- import { createTypeScriptWorkerLanguageService, ServiceEnvironment } from '@volar/monaco/worker';
98
+ import type { LanguageServiceEnvironment } from '@volar/language-service';
99
+ import { createTypeScriptWorkerLanguageService } from '@volar/monaco/worker';
100
+ import { URI } from 'vscode-uri';
92
101
+ import { createNpmFileSystem } from '@volar/jsdelivr';
93
- import * as ts from 'typescript';
94
- import { create as createTypeScriptService } from 'volar-service- typescript';
102
+ import { create as createTypeScriptServicePlugin } from 'volar-service- typescript';
103
+ import ts from 'typescript';
95
104
96
105
self.onmessage = () => {
97
106
worker.initialize((ctx: monaco.worker.IWorkerContext) => {
98
- const env: ServiceEnvironment = {
99
- workspaceFolder: 'file:///',
100
- typescript: {
101
- uriToFileName: uri => uri.substring('file://'.length),
102
- fileNameToUri: fileName => 'file://' + fileName,
103
- },
107
+ const env: LanguageServiceEnvironment = {
108
+ workspaceFolders: [
109
+ URI.parse('file:///'),
110
+ ],
104
111
};
105
112
+ env.fs = createNpmFileSystem();
106
113
return createTypeScriptWorkerLanguageService({
107
114
typescript: ts,
108
115
compilerOptions: {
109
116
// ...
110
117
},
118
+ uriConverter: {
119
+ asFileName: uri => uri.fsPath,
120
+ asUri: fileName => URI.file(fileName),
121
+ },
111
122
workerContext: ctx,
112
123
env,
113
124
languagePlugins: [
114
125
// ...
115
126
],
116
127
languageServicePlugins: [
117
128
// ...
118
- createTypeScriptService (ts),
129
+ createTypeScriptServicePlugin (ts),
119
130
],
120
131
});
121
132
});
@@ -141,14 +152,14 @@ import myWorker from './my-lang.worker?worker';
141
152
### Setup Language Features and Diagnostics
142
153
143
154
``` ts
144
- import type { LanguageService } from ' @volar/language-service ' ;
155
+ import type { WorkerLanguageService } from ' @volar/monaco/worker ' ;
145
156
import { editor , languages , Uri } from ' monaco-editor-core' ;
146
157
import { activateMarkers , activateAutoInsertion , registerProviders } from ' @volar/monaco' ;
147
158
148
159
languages .register ({ id: ' my-lang' , extensions: [' .my-lang' ] });
149
160
150
161
languages .onLanguage (' my-lang' , () => {
151
- const worker = editor .createWebWorker <LanguageService >({
162
+ const worker = editor .createWebWorker <WorkerLanguageService >({
152
163
moduleId: ' vs/language/my-lang/myLangWorker' ,
153
164
label: ' my-lang' ,
154
165
});
@@ -168,7 +179,13 @@ languages.onLanguage('my-lang', () => {
168
179
() => [Uri .file (' /Foo.my-lang' ), Uri .file (' /Bar.my-lang' )],
169
180
editor
170
181
);
171
- registerProviders (worker , [' my-lang' ], languages )
182
+ registerProviders (
183
+ worker ,
184
+ [' my-lang' ],
185
+ // sync files
186
+ () => [Uri .file (' /Foo.my-lang' ), Uri .file (' /Bar.my-lang' )],
187
+ languages
188
+ )
172
189
});
173
190
```
174
191
0 commit comments