private IEnumerable <CompletionItem> GetKnownParamValuesCompletionItems(Position position, ScriptFile scriptFile, out bool valuesAreExclusive)
        {
            var callExpressionNode           = scriptFile.Node.GetDescendantNodeOfTypeAtPosition <FunctionCallExpressionNode>(position.ToPosition());
            var callExpressionParameterIndex = callExpressionNode?.GetFunctionParameterIndexAtPosition(position.ToPosition());

            valuesAreExclusive = false;

            var knownParamValues = callExpressionParameterIndex.HasValue && callExpressionParameterIndex != -1 ?
                                   callExpressionNode.GetKnownParameterValueSymbols(callExpressionParameterIndex.Value, out valuesAreExclusive) : null;

            return(knownParamValues != null?
                   knownParamValues.Select(symbol =>
            {
                var displayText = _displayTextEmitter.GetDisplayText(symbol);

                return new CompletionItem()
                {
                    Kind = GetCompletionItemKind(symbol),
                    Label = symbol.Name,
                    InsertText = $"\"{symbol.Name}\"",
                    Detail = displayText.Text,
                    SortText = $"_{symbol.Name}",
                    Documentation = displayText.Documentation
                };
            }).ToArray() : Enumerable.Empty <CompletionItem>());
        }
Example #2
0
 /// <summary>
 ///     Convert the Language Server Protocol <see cref="LspModels.Position"/> to its native equivalent.
 /// </summary>
 /// <param name="position">
 ///     The <see cref="LspModels.Position"/> to convert.
 /// </param>
 /// <returns>
 ///     The equivalent <see cref="Position"/>.
 /// </returns>
 public static Position ToNative(this LspModels.Position position)
 {
     // LSP is zero-based.
     return(Position.FromZeroBased(
                position.Line,
                position.Character
                ).ToOneBased());
 }