veged / coa

Command-Option-Argument: Get more from defining your command line interface
MIT License
144 stars 22 forks source link

Subcommands don't work at all #7

Closed arikon closed 13 years ago

arikon commented 13 years ago

Минимальный пример, показывающий, что команды совсем не работают:

require('../lib/coa').Cmd()
    .name('cmd')
    .title('Command test')
    .helpful()
    .cmd()
        .name('command')
        .title('Do command work')
        .helpful()
        .act(function() {
            console.log('Doing command work...');
        })
        .end()
    .run(['command', '--help'])
    .run(['command']);
arikon commented 13 years ago

Думаю проблема в следующем. Мы начинаем выполнение в _do корневой команды. Затем парсим параметры в _parseArr корневой команды. Потом передаём управление в _parseArr подкоманд по цепочке, при этом результат _parseArr никак не используем. Экшены запускаем в корневой команде (мы же в неё возвращаем управление).

Можно попробовать решить такими способами:

  1. Передавать управление в _do или даже run подкоманд, когда в командной строке об них спотыкаемся
  2. Возвращать из _parseArr корневой команды помимо opts и args ещё и объект команды, которая в итоге должна поработать, и брать в обработку cmd._act вместо @_act в _do

Мне нравится второй вариант, сделаю патч.

arikon commented 13 years ago

Надо в cmd._parseArr() передавать ссылки на opts и args из родительского cmd._parseArr()