@@ -43,7 +43,7 @@ onBeforeUnmount(() => {
43
43
} ) ;
44
44
} ) ;
45
45
46
- export async function setupLs ( modelsMap : Ref < Map < string , monaco . editor . ITextModel > > ) : Promise < LanguageService > {
46
+ export async function setupLs ( editor : monaco . editor . IStandaloneCodeEditor , modelsMap : Ref < Map < string , monaco . editor . ITextModel > > ) : Promise < LanguageService > {
47
47
const libEs5Url = monaco . Uri . parse ( 'file:///lib.es5.d.ts' ) ;
48
48
const libDomUrl = monaco . Uri . parse ( 'file:///lib.dom.d.ts' ) ;
49
49
const libDtsUrl = monaco . Uri . parse ( 'file:///lib.d.ts' ) ;
@@ -215,6 +215,49 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
215
215
const documents = new WeakMap < monaco . editor . ITextModel , vscode . TextDocument > ( ) ;
216
216
217
217
disposables . value . push (
218
+ editor . onDidChangeModelContent ( async e => {
219
+ const model = editor . getModel ( ) ;
220
+ const monacoSelection = editor . getSelection ( ) ;
221
+ if ( model && monacoSelection && e . changes . length === 1 ) {
222
+ const document = documents . get ( model ) ;
223
+ if ( document ) {
224
+ const range = monaco2code . asRange ( monacoSelection ) ;
225
+ const change = e . changes [ 0 ] ;
226
+ // auto-close-tag
227
+ let edit = await ds . doAutoInsert ( document , range . start , {
228
+ lastChange : {
229
+ range : monaco2code . asRange ( change . range ) ,
230
+ rangeOffset : change . rangeOffset ,
231
+ rangeLength : change . rangeLength ,
232
+ text : change . text ,
233
+ } ,
234
+ } ) ;
235
+ if ( ! edit ) {
236
+ // auto .value
237
+ edit = await ls . doAutoInsert ( document . uri , range . start , {
238
+ lastChange : {
239
+ range : monaco2code . asRange ( change . range ) ,
240
+ rangeOffset : change . rangeOffset ,
241
+ rangeLength : change . rangeLength ,
242
+ text : change . text ,
243
+ } ,
244
+ } ) ;
245
+ }
246
+ if ( edit ) {
247
+ if ( typeof edit == 'string' ) {
248
+ model . applyEdits ( [ {
249
+ range : monacoSelection ,
250
+ text : edit ,
251
+ } ] ) ;
252
+ }
253
+ else {
254
+ model . applyEdits ( [ code2monaco . asTextEdit ( edit ) ] ) ;
255
+ }
256
+ }
257
+ }
258
+ }
259
+ } ) ,
260
+
218
261
// TODO: registerTokensProviderFactory
219
262
// TODO: setTokensProvider
220
263
// TODO: setMonarchTokensProvider
0 commit comments