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);
});