diff --git a/expressions/src/completion.ts b/expressions/src/completion.ts index 4ebafc3..b7cb252 100644 --- a/expressions/src/completion.ts +++ b/expressions/src/completion.ts @@ -2,6 +2,7 @@ import {DescriptionPair} from "./completion/descriptionDictionary.js"; import {Dictionary, isDictionary} from "./data/dictionary.js"; import {ExpressionData} from "./data/expressiondata.js"; import {Evaluator} from "./evaluator.js"; +import {FeatureFlags} from "./features.js"; import {wellKnownFunctions} from "./funcs.js"; import {FunctionDefinition, FunctionInfo} from "./funcs/info.js"; import {Lexer, Token, TokenType} from "./lexer.js"; @@ -26,13 +27,16 @@ export type CompletionItem = { * @param context Context available for the expression * @param extensionFunctions List of functions available * @param functions Optional map of functions to use during evaluation + * @param featureFlags Optional feature flags to control which features are enabled * @returns Array of completion items */ export function complete( input: string, context: Dictionary, extensionFunctions: FunctionInfo[], - functions?: Map + functions?: Map, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + featureFlags?: FeatureFlags ): CompletionItem[] { // Lex const lexer = new Lexer(input); diff --git a/languageservice/src/complete.ts b/languageservice/src/complete.ts index f051e5d..32c2e5e 100644 --- a/languageservice/src/complete.ts +++ b/languageservice/src/complete.ts @@ -141,7 +141,7 @@ export async function complete( func.description = getFunctionDescription(func.name); } - return getExpressionCompletionItems(token, context, extensionFunctions, newPos); + return getExpressionCompletionItems(token, context, extensionFunctions, newPos, config?.featureFlags); } const indentation = guessIndentation(newDoc, 2, true); // Use 2 spaces as default and most common for YAML @@ -531,7 +531,8 @@ function getExpressionCompletionItems( token: TemplateToken, context: DescriptionDictionary, extensionFunctions: FunctionInfo[], - pos: Position + pos: Position, + featureFlags?: FeatureFlags ): CompletionItem[] { if (!token.range) { return []; @@ -550,8 +551,8 @@ function getExpressionCompletionItems( const expressionInput = (getExpressionInput(currentInput, cursorOffset) || "").trim(); try { - return completeExpression(expressionInput, context, extensionFunctions, validatorFunctions).map(item => - mapExpressionCompletionItem(item, currentInput[cursorOffset]) + return completeExpression(expressionInput, context, extensionFunctions, validatorFunctions, featureFlags).map( + item => mapExpressionCompletionItem(item, currentInput[cursorOffset]) ); } catch (e) { error(`Error while completing expression: '${(e as Error)?.message || ""}'`);