diff --git a/actions-languageservice/src/complete.expressions.test.ts b/actions-languageservice/src/complete.expressions.test.ts index e9a0acf..7817beb 100644 --- a/actions-languageservice/src/complete.expressions.test.ts +++ b/actions-languageservice/src/complete.expressions.test.ts @@ -278,6 +278,13 @@ jobs: expect(result.map(x => x.label)).toEqual(["event"]); }); + it("auto-complete complex partial", async () => { + const input = 'run-name: "run ${{ github.ev| }} run"'; + const result = await complete(...getPositionFromCursor(input), undefined, contextProviderConfig); + + expect(result.map(x => x.label)).toEqual(["event"]); + }); + it("using default context provider", async () => { const input = "on: push\njobs:\n build:\n runs-on: ubuntu-latest\n environment:\n url: ${{ runner.| }}\n steps:\n - run: echo"; diff --git a/actions-languageservice/src/complete.ts b/actions-languageservice/src/complete.ts index 8fd5eb6..c12bacd 100644 --- a/actions-languageservice/src/complete.ts +++ b/actions-languageservice/src/complete.ts @@ -217,20 +217,18 @@ function getExpressionCompletionItems( context: DescriptionDictionary, pos: Position ): CompletionItem[] { - let expressionInput = ""; let currentInput = ""; - let relCharOffset: number = 0; if (isBasicExpression(token)) { - expressionInput = currentInput = token.expression; - relCharOffset = getRelCharOffset(token.range!, expressionInput, pos); + currentInput = token.source || token.expression; } else { const stringToken = token.assertString("Expected string token for expression completion"); currentInput = stringToken.source || stringToken.value; - relCharOffset = getRelCharOffset(stringToken.range!, currentInput, pos); - expressionInput = (getExpressionInput(currentInput, relCharOffset) || "").trim(); } + const relCharOffset = getRelCharOffset(token.range!, currentInput, pos); + const expressionInput = (getExpressionInput(currentInput, relCharOffset) || "").trim(); + try { return completeExpression(expressionInput, context, [], validatorFunctions).map(item => mapExpressionCompletionItem(item, currentInput[relCharOffset]) diff --git a/actions-workflow-parser/src/templates/template-reader.ts b/actions-workflow-parser/src/templates/template-reader.ts index cdc3e4c..e44a263 100644 --- a/actions-workflow-parser/src/templates/template-reader.ts +++ b/actions-workflow-parser/src/templates/template-reader.ts @@ -606,9 +606,9 @@ class TemplateReader { this._fileId, token.range, `format('${format.join("")}'${args.join("")})`, - token.definitionInfo, + definitionInfo, expressionTokens, - undefined + raw ); }