private void WriteSignatureParts( IFastJsonWriter writer, SignatureHelpItemData item, SignatureHelpItemsData items, out SignatureHelpParameterData?selectedParameter ) { selectedParameter = null; writer.WritePropertyStartArray("parts"); writer.WriteTaggedTexts(item.PrefixDisplayParts); var parameterIndex = 0; foreach (var parameter in item.Parameters) { if (parameterIndex > 0) { writer.WriteTaggedTexts(item.SeparatorDisplayParts); } var selected = items.ArgumentIndex == parameterIndex; writer.WriteTaggedTexts(parameter.PrefixDisplayParts, selected); writer.WriteTaggedTexts(parameter.DisplayParts, selected); writer.WriteTaggedTexts(parameter.SuffixDisplayParts, selected); if (selected) { selectedParameter = parameter; } parameterIndex += 1; } writer.WriteTaggedTexts(item.SuffixDisplayParts); writer.WriteEndArray(); }
private Task SendSignatureHelpAsync([CanBeNull] SignatureHelpItemsData items, ICommandResultSender sender, CancellationToken cancellationToken) { var writer = sender.StartJsonMessage("signatures"); if (items == null) { return(sender.SendJsonMessageAsync(cancellationToken)); } var selectedItemIndex = items.SelectedItemIndex; writer.WritePropertyName("span"); writer.WriteSpan(items.ApplicableSpan); writer.WritePropertyStartArray("signatures"); var itemIndex = 0; foreach (var item in items.Items) { writer.WriteStartObject(); if (selectedItemIndex == null && items.ArgumentCount <= item.ParameterCount) { selectedItemIndex = itemIndex; } if (itemIndex == selectedItemIndex) { writer.WriteProperty("selected", true); } writer.WritePropertyStartArray("parts"); writer.WriteTaggedTexts(item.PrefixDisplayParts); var parameterIndex = 0; foreach (var parameter in item.Parameters) { if (parameterIndex > 0) { writer.WriteTaggedTexts(item.SeparatorDisplayParts); } var selected = items.ArgumentIndex == parameterIndex; writer.WriteTaggedTexts(parameter.PrefixDisplayParts, selected); writer.WriteTaggedTexts(parameter.DisplayParts, selected); writer.WriteTaggedTexts(parameter.SuffixDisplayParts, selected); parameterIndex += 1; } writer.WriteTaggedTexts(item.SuffixDisplayParts); writer.WriteEndArray(); writer.WriteEndObject(); itemIndex += 1; } writer.WriteEndArray(); return(sender.SendJsonMessageAsync(cancellationToken)); }
public CurrentSignatureHelp(ISignatureHelpProviderWrapper provider, SignatureHelpItemsData items) { Provider = provider; Items = items; }