public bool TryGetValidValue(TexlNode argNode, TexlBinding binding, out IExternalDataSource dsInfo)
        {
            Contracts.AssertValue(argNode);
            Contracts.AssertValue(binding);

            dsInfo = null;
            switch (argNode.Kind)
            {
            case NodeKind.FirstName:
                return(TryGetDsInfo(argNode.AsFirstName(), binding, out dsInfo));

            case NodeKind.Call:
                return(TryGetDsInfo(argNode.AsCall(), binding, out dsInfo));

            case NodeKind.DottedName:
                return(TryGetDsInfo(argNode.AsDottedName(), binding, out dsInfo));

            case NodeKind.As:
                return(TryGetValidValue(argNode.AsAsNode().Left, binding, out dsInfo));
            }

            return(false);
        }