Skip to content

Commit e2d85eb

Browse files
authored
Merge branch 'main' into feat/property-snippets
2 parents c1c1d54 + 4602af7 commit e2d85eb

2 files changed

Lines changed: 52 additions & 8 deletions

File tree

src/languageservice/services/yamlCompletion.ts

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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
*/

test/autoCompletionFix.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,4 +1380,26 @@ test1:
13801380
expect(completion.items[0].insertText).to.be.equal('"YES"');
13811381
expect(completion.items[1].insertText).to.be.equal('"NO"');
13821382
});
1383+
it('should suggest quotes with escapeChars', async () => {
1384+
const schema: JSONSchema = {
1385+
type: 'object',
1386+
additionalProperties: false,
1387+
properties: {
1388+
begin: {
1389+
type: 'string',
1390+
default: '\\"',
1391+
},
1392+
},
1393+
};
1394+
schemaProvider.addSchema(SCHEMA_ID, schema);
1395+
let content = 'be';
1396+
let completion = await parseSetup(content, 0, content.length);
1397+
expect(completion.items.length).equal(1);
1398+
expect(completion.items[0].insertText).to.be.equal('begin: "\\""');
1399+
1400+
content = 'begin: ';
1401+
completion = await parseSetup(content, 0, content.length);
1402+
expect(completion.items.length).equal(1);
1403+
expect(completion.items[0].insertText).to.be.equal('"\\""');
1404+
});
13831405
});

0 commit comments

Comments
 (0)