Hello, forgive (and correct) me if I misunderstand how this command should be used:

  \DeclareDocumentCommand { \foo }
    { > { \SplitArgument { 2 } { ; } } m }
    { \my_command:nnn #1 }

As the output of '\SplitArgument' is some number of brace groups lumped together into a '#1', it seems like a test for '-NoValue' would need to be moved into '\my_command:nnn', i.e. from the xparse interface, into "programmer code".  As `\IfNoValueTF' is an xparse command, that doesn't feel correct.  If this is a reasonable interpretation/usage, then my personal opinion would be that empty brace groups (or something else) would be preferable to -NoValue-'s.

On Mon, Apr 29, 2013 at 1:54 AM, Joseph Wright <[log in to unmask]> wrote:
Hello all,

I've had a couple of reports recently of an inconsistency in the way
\SplitArgument is documented compared to how it is implemented. In the
current CTAN release, something like

  \DeclareDocumentCommand { \foo }
    { > { \SplitArgument { 2 } { ; } } m }
    { \showtokens {#1} }


    > {bar}{-NoValue-}{-NoValue-}.
    \foo code #1->\showtokens {#1}

i.e. inserts the '-NoValue-' marker, but the documentation says you
should get

    > {bar}{}{}.
    \foo code #1->\showtokens {#1}

i.e. empty groups.

In the SVN, I have altered the behaviour to do what the docs say.
However, this breaks some packages and more importantly may not be the
'best' approach. In particular, returning '-NoValue-' allows
differentiation of

   \foo{bar;;} and \foo{bar}

which is not possible if an empty group is returned.

Conceptually, '-NoValue-' was introduced for flagging omitted optional
arguments. Using it in \SplitArgument is therefore something of an
extension, but at the same time the way this function works makes the
splitting 'optional'. Thus it is quite arguable that the use of the
special marker is entirely correct here.

What do people feel is the best approach?

(Note: There are some other issues related to '-NoValue-' that this
raises, which I'll cover in a separate message.)
Joseph Wright