@@ -22,12 +22,16 @@ We assume you already know:
2222// my-lang.worker.ts
2323import * as worker from ' monaco-editor-core/esm/vs/editor/editor.worker' ;
2424import 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' ;
2628
2729self .onmessage = () => {
2830 worker .initialize ((ctx : monaco .worker .IWorkerContext ) => {
29- const env: ServiceEnvironment = {
30- workspaceFolder: ' file:///' ,
31+ const env: LanguageServiceEnvironment = {
32+ workspaceFolders: [
33+ URI .parse (' file:///' ),
34+ ],
3135 };
3236 return createSimpleWorkerLanguageService ({
3337 workerContext: ctx ,
@@ -48,16 +52,19 @@ self.onmessage = () => {
4852``` diff
4953import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
5054import 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';
5661
5762self.onmessage = () => {
5863 worker.initialize((ctx: monaco.worker.IWorkerContext) => {
59- const env: ServiceEnvironment = {
60- workspaceFolder: 'file:///',
64+ const env: LanguageServiceEnvironment = {
65+ workspaceFolders: [
66+ URI.parse('file:///'),
67+ ],
6168 };
6269- return createSimpleWorkerLanguageService({
6370+ return createTypeScriptWorkerLanguageService({
@@ -76,7 +83,7 @@ self.onmessage = () => {
7683 ],
7784 languageServicePlugins: [
7885 // ...
79- + ...createTypeScriptPlugins (ts),
86+ + ...createTypeScriptServicePlugin (ts),
8087 ],
8188 });
8289 });
@@ -88,34 +95,38 @@ self.onmessage = () => {
8895``` diff
8996import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
9097import 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';
92101+ 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';
95104
96105self.onmessage = () => {
97106 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+ ],
104111 };
105112+ env.fs = createNpmFileSystem();
106113 return createTypeScriptWorkerLanguageService({
107114 typescript: ts,
108115 compilerOptions: {
109116 // ...
110117 },
118+ uriConverter: {
119+ asFileName: uri => uri.fsPath,
120+ asUri: fileName => URI.file(fileName),
121+ },
111122 workerContext: ctx,
112123 env,
113124 languagePlugins: [
114125 // ...
115126 ],
116127 languageServicePlugins: [
117128 // ...
118- createTypeScriptService (ts),
129+ createTypeScriptServicePlugin (ts),
119130 ],
120131 });
121132 });
@@ -141,14 +152,14 @@ import myWorker from './my-lang.worker?worker';
141152### Setup Language Features and Diagnostics
142153
143154``` ts
144- import type { LanguageService } from ' @volar/language-service ' ;
155+ import type { WorkerLanguageService } from ' @volar/monaco/worker ' ;
145156import { editor , languages , Uri } from ' monaco-editor-core' ;
146157import { activateMarkers , activateAutoInsertion , registerProviders } from ' @volar/monaco' ;
147158
148159languages .register ({ id: ' my-lang' , extensions: [' .my-lang' ] });
149160
150161languages .onLanguage (' my-lang' , () => {
151- const worker = editor .createWebWorker <LanguageService >({
162+ const worker = editor .createWebWorker <WorkerLanguageService >({
152163 moduleId: ' vs/language/my-lang/myLangWorker' ,
153164 label: ' my-lang' ,
154165 });
@@ -168,7 +179,13 @@ languages.onLanguage('my-lang', () => {
168179 () => [Uri .file (' /Foo.my-lang' ), Uri .file (' /Bar.my-lang' )],
169180 editor
170181 );
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+ )
172189});
173190```
174191
0 commit comments