private static Declaration SelectedDeclarationViaArgument(QualifiedSelection qualifiedSelection, DeclarationFinder finder)
        {
            var members = finder.Members(qualifiedSelection.QualifiedName)
                          .Where(m => (m.DeclarationType.HasFlag(DeclarationType.Procedure) || // includes PropertyLet and PropertySet and LibraryProcedure
                                       m.DeclarationType.HasFlag(DeclarationType.Function)) && // includes PropertyGet and LibraryFunction
                                 !m.DeclarationType.HasFlag(DeclarationType.LibraryFunction) &&
                                 !m.DeclarationType.HasFlag(DeclarationType.LibraryProcedure));
            var enclosingProcedure = members.SingleOrDefault(m => m.Context.GetSelection().Contains(qualifiedSelection.Selection));

            if (enclosingProcedure == null)
            {
                return(null);
            }

            var allArguments = enclosingProcedure.Context.GetDescendents <VBAParser.ArgumentContext>();

            var context = allArguments
                          .Where(arg => arg.missingArgument() == null)
                          .FirstOrDefault(m =>
            {
                var isOnWhitespace = false;
                if (m.TryGetPrecedingContext <VBAParser.WhiteSpaceContext>(out var whitespace))
                {
                    isOnWhitespace = whitespace.GetSelection().ContainsFirstCharacter(qualifiedSelection.Selection);
                }
                return(isOnWhitespace || m.GetSelection().ContainsFirstCharacter(qualifiedSelection.Selection));
            });

            var skippedArg = allArguments
                             .Where(arg => arg.missingArgument() != null)
                             .FirstOrDefault(m =>
            {
                var isOnWhitespace = false;
                if (m.TryGetPrecedingContext <VBAParser.WhiteSpaceContext>(out var whitespace))
                {
                    isOnWhitespace = whitespace.GetSelection().ContainsFirstCharacter(qualifiedSelection.Selection);
                }
                return(isOnWhitespace || m.GetSelection().ContainsFirstCharacter(qualifiedSelection.Selection));
            });

            context = context ?? skippedArg;
            if (context != null)
            {
                return((Declaration)finder.FindParameterOfNonDefaultMemberFromSimpleArgumentNotPassedByValExplicitly(context, enclosingProcedure)
                       ?? finder.FindInvokedMemberFromArgumentContext(context, qualifiedSelection.QualifiedName)); // fallback to the invoked procedure declaration
            }

            return(null);
        }