Include : and new lines where appropriate when auto-completing

This commit is contained in:
Christopher Schleiden
2023-01-05 17:26:08 -08:00
parent a2ee3041df
commit d16aa652f9
5 changed files with 371 additions and 12 deletions
+11 -4
View File
@@ -16,6 +16,7 @@ import {getContext, Mode} from "./context-providers/default";
import {getWorkflowContext, WorkflowContext} from "./context/workflow-context";
import {nullTrace} from "./nulltrace";
import {findToken} from "./utils/find-token";
import {guessIndentation} from "./utils/indentation-guesser";
import {mapRange} from "./utils/range";
import {transform} from "./utils/transform";
import {Value, ValueProviderConfig} from "./value-providers/config";
@@ -94,18 +95,23 @@ export async function complete(
}
}
const values = await getValues(token, keyToken, parent, valueProviderConfig, workflowContext);
const indentation = guessIndentation(newDoc, 2, true); // Use 2 spaces as default and most common for YAML
const indentString = " ".repeat(indentation.tabSize);
const values = await getValues(token, keyToken, parent, valueProviderConfig, workflowContext, indentString);
let replaceRange: Range | undefined;
if (token?.range) {
replaceRange = mapRange(token.range);
}
return values.map(value => {
const newText = value.insertText || value.label;
const item: CompletionItem = {
label: value.label,
detail: value.description,
tags: value.deprecated ? [CompletionItemTag.Deprecated] : undefined,
textEdit: replaceRange ? TextEdit.replace(replaceRange, value.label) : undefined
textEdit: replaceRange ? TextEdit.replace(replaceRange, newText) : TextEdit.insert(position, newText)
};
return item;
@@ -117,7 +123,8 @@ async function getValues(
keyToken: TemplateToken | null,
parent: TemplateToken | null,
valueProviderConfig: ValueProviderConfig | undefined,
workflowContext: WorkflowContext
workflowContext: WorkflowContext,
indentation: string
): Promise<Value[]> {
if (!parent) {
return [];
@@ -150,7 +157,7 @@ async function getValues(
return [];
}
const values = definitionValues(def);
const values = definitionValues(def, indentation);
return filterAndSortCompletionOptions(values, existingValues);
}