@@ -64,7 +64,6 @@ export class HTMLCompletion {
6464 } ;
6565 const completionParticipants = this . completionParticipants ;
6666 const dataProviders = this . dataManager . getDataProviders ( ) . filter ( p => p . isApplicable ( document . languageId ) && ( ! settings || settings [ p . getId ( ) ] !== false ) ) ;
67- const voidElements = this . dataManager . getVoidElements ( dataProviders ) ;
6867 const doesSupportMarkdown = this . doesSupportMarkdown ( ) ;
6968
7069 const text = document . getText ( ) ;
@@ -78,6 +77,7 @@ export class HTMLCompletion {
7877 const scanner = createScanner ( text , node . start ) ;
7978 let currentTag : string = '' ;
8079 let currentAttributeName : string ;
80+ let voidElements : string [ ] | undefined ;
8181
8282 function getReplaceRange ( replaceStart : number , replaceEnd : number = offset ) : Range {
8383 if ( replaceStart > offset ) {
@@ -169,6 +169,7 @@ export class HTMLCompletion {
169169 if ( settings && settings . hideAutoCompleteProposals ) {
170170 return result ;
171171 }
172+ voidElements ??= this . dataManager . getVoidElements ( dataProviders ) ;
172173 if ( ! this . dataManager . isVoidElement ( tag , voidElements ) ) {
173174 const pos = document . positionAt ( tagCloseEnd ) ;
174175 result . items . push ( {
@@ -534,16 +535,18 @@ export class HTMLCompletion {
534535 }
535536 const char = document . getText ( ) . charAt ( offset - 1 ) ;
536537 if ( char === '>' ) {
537- const voidElements = this . dataManager . getVoidElements ( document . languageId ) ;
538538 const node = htmlDocument . findNodeBefore ( offset ) ;
539- if ( node && node . tag && ! this . dataManager . isVoidElement ( node . tag , voidElements ) && node . start < offset && ( ! node . endTagStart || node . endTagStart > offset ) ) {
540- const scanner = createScanner ( document . getText ( ) , node . start ) ;
541- let token = scanner . scan ( ) ;
542- while ( token !== TokenType . EOS && scanner . getTokenEnd ( ) <= offset ) {
543- if ( token === TokenType . StartTagClose && scanner . getTokenEnd ( ) === offset ) {
544- return `$0</${ node . tag } >` ;
539+ if ( node && node . tag && node . start < offset && ( ! node . endTagStart || node . endTagStart > offset ) ) {
540+ const voidElements = this . dataManager . getVoidElements ( document . languageId ) ;
541+ if ( ! this . dataManager . isVoidElement ( node . tag , voidElements ) ) {
542+ const scanner = createScanner ( document . getText ( ) , node . start ) ;
543+ let token = scanner . scan ( ) ;
544+ while ( token !== TokenType . EOS && scanner . getTokenEnd ( ) <= offset ) {
545+ if ( token === TokenType . StartTagClose && scanner . getTokenEnd ( ) === offset ) {
546+ return `$0</${ node . tag } >` ;
547+ }
548+ token = scanner . scan ( ) ;
545549 }
546- token = scanner . scan ( ) ;
547550 }
548551 }
549552 } else if ( char === '/' ) {
0 commit comments