def separate_names(names):
    """
    Split a set of names for an option into configuration names,
    positional argument names, and optional argument names.

    An argument is optional if it starts with '-',
    configuration if it contains ':',
    and positional otherwise
    """
    configs = []
    args = []
    options = []

    for name in names:
        if name.startswith('-'):
            options.append(name)
        elif ':' in name:
            configs.append(name.split(':'))
        else:
            args.append(name)

    return configs, args, options