From 519f9845dade9a19cffae4242569d1a3fa3e9a6b Mon Sep 17 00:00:00 2001 From: Petr Spacek Date: Tue, 11 Jul 2023 12:17:29 +0200 Subject: [PATCH] fix: suggest hyphen in array --- .../services/yamlCompletion.ts | 9 ++--- test/autoCompletion.test.ts | 36 ++++++++++++++++++- test/defaultSnippets.test.ts | 13 +++++-- 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/languageservice/services/yamlCompletion.ts b/src/languageservice/services/yamlCompletion.ts index 99e061f0b..c8ce3eea3 100644 --- a/src/languageservice/services/yamlCompletion.ts +++ b/src/languageservice/services/yamlCompletion.ts @@ -910,13 +910,8 @@ export class YamlCompletion { if (index < s.schema.items.length) { this.addSchemaValueCompletions(s.schema.items[index], separatorAfter, collector, types, 'value'); } - } else if ( - typeof s.schema.items === 'object' && - (s.schema.items.type === 'object' || isAnyOfAllOfOneOfType(s.schema.items)) - ) { - this.addSchemaValueCompletions(s.schema.items, separatorAfter, collector, types, 'value', true); } else { - this.addSchemaValueCompletions(s.schema.items, separatorAfter, collector, types, 'value'); + this.addSchemaValueCompletions(s.schema.items, separatorAfter, collector, types, 'value', true); } } } @@ -958,7 +953,7 @@ export class YamlCompletion { ); collector.add({ kind: this.getSuggestionKind(schema.type), - label: '- (array item) ' + (schemaType || index), + label: '- (array item) ' + ((schemaType || index) ?? ''), documentation: documentation, insertText: insertText, insertTextFormat: InsertTextFormat.Snippet, diff --git a/test/autoCompletion.test.ts b/test/autoCompletion.test.ts index 78b14996d..f26901435 100644 --- a/test/autoCompletion.test.ts +++ b/test/autoCompletion.test.ts @@ -1488,6 +1488,39 @@ describe('Auto Completion Tests', () => { .then(done, done); }); + it('Array of enum autocomplete on 2nd position without `-`', (done) => { + languageService.addSchema(SCHEMA_ID, { + type: 'object', + properties: { + references: { + type: 'array', + items: { + enum: ['Test'], + }, + }, + }, + }); + const content = 'references:\n - Test\n |\n|'; + const completion = parseSetup(content); + completion + .then(function (result) { + assert.deepEqual( + result.items.map((i) => ({ label: i.label, insertText: i.insertText })), + [ + { + insertText: 'Test', + label: 'Test', + }, + { + insertText: '- $1\n', + label: '- (array item) ', + }, + ] + ); + }) + .then(done, done); + }); + it('Array of objects autocomplete with 4 space indentation check', async () => { const languageSettingsSetup = new ServiceSetup().withCompletion().withIndentation(' '); languageService.configure(languageSettingsSetup.languageSettings); @@ -1926,7 +1959,8 @@ describe('Auto Completion Tests', () => { assert.equal(result.items.length, 3, `Expecting 3 items in completion but found ${result.items.length}`); const resultDoc2 = await parseSetup(content, content.length); - assert.equal(resultDoc2.items.length, 0, `Expecting no items in completion but found ${resultDoc2.items.length}`); + assert.equal(resultDoc2.items.length, 1, `Expecting 1 item in completion but found ${resultDoc2.items.length}`); + assert.equal(resultDoc2.items[0].label, '- (array item) '); }); it('should handle absolute path', async () => { diff --git a/test/defaultSnippets.test.ts b/test/defaultSnippets.test.ts index 76fa569ad..8358f40d5 100644 --- a/test/defaultSnippets.test.ts +++ b/test/defaultSnippets.test.ts @@ -91,9 +91,16 @@ describe('Default Snippet Tests', () => { const completion = parseSetup(content, content.length); completion .then(function (result) { - assert.equal(result.items.length, 1); - assert.equal(result.items[0].insertText, '- item1: $1\n item2: $2'); - assert.equal(result.items[0].label, 'My array item'); + assert.deepEqual( + result.items.map((i) => ({ insertText: i.insertText, label: i.label })), + [ + { insertText: '- item1: $1\n item2: $2', label: 'My array item' }, + { + insertText: '- $1\n', + label: '- (array item) ', + }, + ] + ); }) .then(done, done); });