44// │ Licensed under the MIT license. │ \\
55// └─────────────────────────────────┘ \\
66
7- import languageServerWorker from './languageServer.worker?worker' ;
7+
8+ // Import Monaco Language Client components
9+ import * as vscode from 'vscode' ;
810import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker' ;
9- import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders' ;
11+ import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory' ;
12+ import { type EditorAppConfig } from 'monaco-languageclient/editorApp' ;
13+ import { type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper' ;
14+ import { type LanguageClientConfig } from 'monaco-languageclient/lcwrapper' ;
15+ // Import language server
16+ import languageServerWorker from './languageServer.worker?worker' ;
17+ // Import SPARQL config
1018import sparqlTextmateGrammar from './sparql.tmLanguage.json?raw' ;
1119import sparqlLanguageConfig from './sparql.configuration.json?raw' ;
1220import sparqlTheme from './sparql.theme.json?raw' ;
13- import type { WrapperConfig } from 'monaco-editor-wrapper' ;
14- import { LogLevel , Uri } from 'vscode' ;
1521
1622
17- export async function buildWrapperConfig ( container : HTMLElement , initial : string ) : Promise < WrapperConfig > {
23+ export async function buildWrapperConfig ( container : HTMLElement , initial : string ) {
1824 const workerPromise : Promise < Worker > = new Promise ( ( resolve ) => {
1925 const instance : Worker = new languageServerWorker ( { name : 'Language Server' } ) ;
2026 instance . onmessage = ( event ) => {
@@ -30,92 +36,27 @@ export async function buildWrapperConfig(container: HTMLElement, initial: string
3036 extensionFilesOrContents . set ( '/sparql-grammar.json' , sparqlTextmateGrammar ) ;
3137 extensionFilesOrContents . set ( '/sparql-theme.json' , sparqlTheme ) ;
3238
33- const wrapperConfig : WrapperConfig = {
39+ // Monaco VSCode API configuration
40+ const vscodeApiConfig : MonacoVscodeApiConfig = {
3441 $type : 'extended' ,
35- htmlContainer : container ,
36- logLevel : LogLevel . Info ,
37- languageClientConfigs : {
38- configs : {
39- sparql : {
40- name : "Qlue-ls" ,
41- clientOptions : {
42- documentSelector : [ { language : 'sparql' } ] ,
43- workspaceFolder : {
44- index : 0 ,
45- name : "workspace" ,
46- uri : Uri . file ( "/" ) ,
47- } ,
48- progressOnInitialization : true ,
49- diagnosticPullOptions : {
50- onChange : true ,
51- onSave : false
52- } ,
53- } ,
54- connection : {
55- options : {
56- $type : 'WorkerDirect' ,
57- worker : worker
58- }
59-
60- }
61- ,
62- restartOptions : {
63- retries : 5 ,
64- timeout : 1000 ,
65- keepWorker : true
66- }
67- }
68- }
69- } ,
70- editorAppConfig : {
71- codeResources : {
72- modified : {
73- uri : 'query.rq' ,
74- text : initial
75- }
76- } ,
77- monacoWorkerFactory : configureDefaultWorkerFactory ,
78- editorOptions : {
79- tabCompletion : "on" ,
80- suggestOnTriggerCharacters : true ,
81- theme : 'vs' ,
82- fontSize : 16 ,
83- fontFamily : 'Source Code Pro' ,
84- links : false ,
85- minimap : {
86- enabled : false
87- } ,
88- overviewRulerLanes : 0 ,
89- scrollBeyondLastLine : false ,
90- padding : {
91- top : 8 ,
92- bottom : 8
93- } ,
94- lineDecorationsWidth : 0 ,
95- lineNumbersMinChars : 2 ,
96- glyphMargin : true ,
97- contextmenu : false ,
98- folding : true ,
99- foldingImportsByDefault : true
100-
101- }
42+ logLevel : vscode . LogLevel . Info ,
43+ viewsConfig : {
44+ $type : 'EditorService'
10245 } ,
103- vscodeApiConfig : {
104- userConfiguration : {
105- json : JSON . stringify ( {
106- 'workbench.colorTheme' : 'QleverUiTheme' ,
107- 'editor.guides.bracketPairsHorizontal' : 'active' ,
108- 'editor.lightbulb.enabled' : 'On' ,
109- 'editor.wordBasedSuggestions' : 'off' ,
110- 'editor.experimental.asyncTokenization' : true ,
111- 'editor.tabSize' : 2 ,
112- 'editor.insertSpaces' : true ,
113- 'editor.detectIndentation' : false ,
114- 'files.eol' : '\n'
115- } )
116- } ,
46+ userConfiguration : {
47+ json : JSON . stringify ( {
48+ 'workbench.colorTheme' : 'QleverUiTheme' ,
49+ 'editor.guides.bracketPairsHorizontal' : 'active' ,
50+ 'editor.lightbulb.enabled' : 'On' ,
51+ 'editor.wordBasedSuggestions' : 'off' ,
52+ 'editor.experimental.asyncTokenization' : true ,
53+ 'editor.tabSize' : 2 ,
54+ 'editor.insertSpaces' : true ,
55+ 'editor.detectIndentation' : false ,
56+ 'files.eol' : '\n'
57+ } )
11758 } ,
118-
59+ monacoWorkerFactory : configureDefaultWorkerFactory ,
11960 extensions : [ {
12061 config : {
12162 name : 'langium-sparql' ,
@@ -149,6 +90,75 @@ export async function buildWrapperConfig(container: HTMLElement, initial: string
14990 filesOrContents : extensionFilesOrContents
15091 } ]
15192 } ;
152- return wrapperConfig ;
93+
94+ // Language client configuration
95+ const languageClientConfig : LanguageClientConfig = {
96+ languageId : "sparql" ,
97+ clientOptions : {
98+ documentSelector : [ { language : 'sparql' } ] ,
99+ workspaceFolder : {
100+ index : 0 ,
101+ name : "workspace" ,
102+ uri : vscode . Uri . file ( "/" ) ,
103+ } ,
104+ progressOnInitialization : true ,
105+ diagnosticPullOptions : {
106+ onChange : true ,
107+ onSave : false
108+ } ,
109+ } ,
110+ connection : {
111+ options : {
112+ $type : 'WorkerDirect' ,
113+ worker : worker
114+ }
115+ } ,
116+ restartOptions : {
117+ retries : 5 ,
118+ timeout : 1000 ,
119+ keepWorker : true
120+ }
121+ } ;
122+
123+ // editor app / monaco-editor configuration
124+ const editorAppConfig : EditorAppConfig = {
125+ codeResources : {
126+ modified : {
127+ uri : 'query.rq' ,
128+ text : initial
129+ }
130+ } ,
131+ logLevel : vscode . LogLevel . Info ,
132+ editorOptions : {
133+ tabCompletion : "on" ,
134+ suggestOnTriggerCharacters : true ,
135+ theme : 'vs' ,
136+ fontSize : 16 ,
137+ fontFamily : 'Source Code Pro' ,
138+ links : false ,
139+ minimap : {
140+ enabled : false
141+ } ,
142+ overviewRulerLanes : 0 ,
143+ scrollBeyondLastLine : false ,
144+ padding : {
145+ top : 8 ,
146+ bottom : 8
147+ } ,
148+ lineDecorationsWidth : 0 ,
149+ lineNumbersMinChars : 2 ,
150+ glyphMargin : true ,
151+ contextmenu : false ,
152+ folding : true ,
153+ foldingImportsByDefault : true
154+
155+ }
156+ } ;
157+
158+ return {
159+ vscodeApiConfig : vscodeApiConfig ,
160+ languageClientConfig : languageClientConfig ,
161+ editorAppConfig : editorAppConfig
162+ } ;
153163}
154164
0 commit comments