protected sealed override SignatureHelpItems GetModel(
            SemanticModel semanticModel,
            TNode node,
            SourceLocation position)
        {
            var functionSymbols = GetFunctionSymbols(semanticModel, node, position).ToList();

            // try to bind to the actual method
            var symbolInfo = semanticModel.GetSymbolInfo(node);

            var selectedItem = symbolInfo.Symbol is FunctionSymbol fs
                ? functionSymbols.IndexOf(fs)
                : (int?)null;

            var signatureHelpItems = functionSymbols
                                     .Select(ConvertFunctionSymbol).ToList();

            var sourceRange = SignatureHelpUtilities.GetSignatureHelpSpan(node.ArgumentListSyntax);
            var textSpan    = semanticModel.SyntaxTree.GetSourceFileSpan(sourceRange);

            var currentState = SignatureHelpUtilities.GetSignatureHelpState(node.ArgumentListSyntax, position);

            return(CreateSignatureHelpItems(
                       signatureHelpItems,
                       textSpan,
                       currentState,
                       selectedItem));
        }
        protected sealed override SignatureHelpItems GetModel(
            SemanticModel semanticModel,
            TNode node,
            SourceLocation position)
        {
            var functionSymbols = GetFunctionSymbols(semanticModel, node, position);

            var signatureHelpItems = functionSymbols
                                     .Select(ConvertFunctionSymbol).ToList();

            var sourceRange = SignatureHelpUtilities.GetSignatureHelpSpan(node.ArgumentListSyntax);
            var textSpan    = semanticModel.SyntaxTree.GetSourceFileSpan(sourceRange);

            var currentState = SignatureHelpUtilities.GetSignatureHelpState(node.ArgumentListSyntax, position);

            return(CreateSignatureHelpItems(
                       signatureHelpItems,
                       textSpan,
                       currentState));
        }