@@ -43,7 +43,7 @@ onBeforeUnmount(() => {
4343 } ) ;
4444} ) ;
4545
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 > {
4747 const libEs5Url = monaco . Uri . parse ( 'file:///lib.es5.d.ts' ) ;
4848 const libDomUrl = monaco . Uri . parse ( 'file:///lib.dom.d.ts' ) ;
4949 const libDtsUrl = monaco . Uri . parse ( 'file:///lib.d.ts' ) ;
@@ -215,6 +215,49 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
215215 const documents = new WeakMap < monaco . editor . ITextModel , vscode . TextDocument > ( ) ;
216216
217217 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+
218261 // TODO: registerTokensProviderFactory
219262 // TODO: setTokensProvider
220263 // TODO: setMonarchTokensProvider
0 commit comments