public SignatureHelpItems(SIGHLP.SignatureHelpItems signatureHelpItems) { if (signatureHelpItems == null) { throw new ArgumentNullException(nameof(signatureHelpItems)); } ApplicableSpan = signatureHelpItems.ApplicableSpan; ArgumentCount = signatureHelpItems.ArgumentCount; ArgumentIndex = signatureHelpItems.ArgumentIndex; ArgumentName = signatureHelpItems.ArgumentName; SelectedItemIndex = signatureHelpItems.SelectedItemIndex; Items = ToSignatureHelpItem(signatureHelpItems.Items); }
private bool IsBetter(SignatureHelpItems bestItems, TextSpan? currentTextSpan) { // If we have no best text span, then this span is definitely better. if (bestItems == null) { return true; } // Otherwise we want the one that is conceptually the innermost signature. So it's // only better if the distance from it to the caret position is less than the best // one so far. return currentTextSpan.Value.Start > bestItems.ApplicableSpan.Start; }
private static SignatureHelpItem GetSelectedItem(Model currentModel, SignatureHelpItems items, ISignatureHelpProvider provider) { // Try to find the most appropriate item in the list to select by default. // If the provider specified one a selected item, then always stick with that one. if (items.SelectedItemIndex.HasValue) { return items.Items[items.SelectedItemIndex.Value]; } // If the provider did not pick a default, and it's the same provider as the previous // model we have, then try to return the same item that we had before. if (currentModel != null && currentModel.Provider == provider) { return items.Items.FirstOrDefault(i => DisplayPartsMatch(i, currentModel.SelectedItem)) ?? items.Items.First(); } // Otherwise, just pick the first item we have. return items.Items.First(); }