@@ -258,12 +258,29 @@ export class YamlCompletion {
258258 }
259259 }
260260
261- // trim $1 from end of completion
262- if ( completionItem . insertText . endsWith ( '$1' ) && ! isForParentCompletion ) {
263- completionItem . insertText = completionItem . insertText . substr ( 0 , completionItem . insertText . length - 2 ) ;
264- }
265- if ( overwriteRange && overwriteRange . start . line === overwriteRange . end . line ) {
266- completionItem . textEdit = TextEdit . replace ( overwriteRange , completionItem . insertText ) ;
261+ if ( completionItem . label . toLowerCase ( ) === 'regular expression' ) {
262+ const docObject = completionItem . documentation as MarkupContent ;
263+ const splitValues = docObject . value . split ( ':' ) ;
264+ label =
265+ splitValues . length > 0 ? `${ this . getQuote ( ) } \\${ JSON . parse ( splitValues [ 1 ] ) } ${ this . getQuote ( ) } ` : completionItem . label ;
266+ completionItem . insertText = label ;
267+ completionItem . textEdit = TextEdit . replace ( overwriteRange , label ) ;
268+ } else {
269+ let mdText = completionItem . insertText . replace ( / \$ { [ 0 - 9 ] + [: | ] ( .* ) } / g, ( s , arg ) => arg ) . replace ( / \$ ( [ 0 - 9 ] + ) / g, '' ) ;
270+ const splitMDText = mdText . split ( ':' ) ;
271+ let value = splitMDText . length > 1 ? splitMDText [ 1 ] . trim ( ) : mdText ;
272+ if ( value && / ^ ( [ ' \\ " \\ ] ) $ / . test ( value ) ) {
273+ value = `${ this . getQuote ( ) } \\${ value } ${ this . getQuote ( ) } ` ;
274+ mdText = splitMDText . length > 1 ? splitMDText [ 0 ] + ': ' + value : value ;
275+ completionItem . insertText = mdText ;
276+ }
277+ // trim $1 from end of completion
278+ if ( completionItem . insertText . endsWith ( '$1' ) && ! isForParentCompletion ) {
279+ completionItem . insertText = completionItem . insertText . substr ( 0 , completionItem . insertText . length - 2 ) ;
280+ }
281+ if ( overwriteRange && overwriteRange . start . line === overwriteRange . end . line ) {
282+ completionItem . textEdit = TextEdit . replace ( overwriteRange , completionItem . insertText ) ;
283+ }
267284 }
268285
269286 completionItem . label = label ;
@@ -1755,8 +1772,9 @@ export class YamlCompletion {
17551772 let value : string ;
17561773 if ( typeof param === 'string' ) {
17571774 //support YAML spec 1.1 boolean values
1758- const quote = this . isSingleQuote ? `'` : `"` ;
1759- value = [ 'on' , 'off' , 'true' , 'false' , 'yes' , 'no' ] . includes ( param . toLowerCase ( ) ) ? `${ quote } ${ param } ${ quote } ` : param ;
1775+ value = [ 'on' , 'off' , 'true' , 'false' , 'yes' , 'no' ] . includes ( param . toLowerCase ( ) )
1776+ ? `${ this . getQuote ( ) } ${ param } ${ this . getQuote ( ) } `
1777+ : param ;
17601778 } else {
17611779 value = '' + param ;
17621780 }
@@ -1802,6 +1820,10 @@ export class YamlCompletion {
18021820 return value ;
18031821 }
18041822
1823+ getQuote ( ) : string {
1824+ return this . isSingleQuote ? `'` : `"` ;
1825+ }
1826+
18051827 /**
18061828 * simplify `{$1:value}` to `value`
18071829 */
0 commit comments