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