/**
  * Show help for modules, commands and actions [default]
  *
  * The help command shows help for a given command, module and also for a
  * given module's command or a specific command's action.
  *
  * Usage: icingacli help [<module>] [<command> [<action>]]
  */
 public function showAction()
 {
     $module = null;
     $command = null;
     $action = null;
     $loader = new Loader($this->app);
     $loader->parseParams();
     echo $this->docs()->usage($loader->getModuleName(), $loader->getCommandName(), $loader->getActionName());
 }
 /**
  * Show help for modules, commands and actions [default]
  *
  * The help command shows help for a given command, module and also for a
  * given module's command or a specific command's action.
  *
  * Usage: icingacli autocomplete [<module>] [<command> [<action>]]
  */
 public function completeAction()
 {
     $module = null;
     $command = null;
     $action = null;
     $loader = new Loader($this->app);
     $params = $this->params;
     $bare_params = $GLOBALS['argv'];
     $cword = (int) $params->shift('autoindex');
     $search_word = $bare_params[$cword];
     if ($search_word === '--') {
         // TODO: Unfinished, completion missing
         return $this->suggest(array('--verbose', '--help', '--debug'));
     }
     $search = $params->shift();
     if (!$search) {
         return $this->suggest(array_merge($loader->listCommands(), $loader->listModules()));
     }
     $found = $loader->resolveName($search);
     if ($found) {
         // Do not return suggestions if we are already on the next word:
         if ($bare_params[$cword] === $search) {
             return $this->suggest(array($found));
         }
     } else {
         return $this->suggest($loader->getLastSuggestions());
     }
     $obj = null;
     if ($loader->hasCommand($found)) {
         $command = $found;
         $obj = $loader->getCommandInstance($command);
     } elseif ($loader->hasModule($found)) {
         $module = $found;
         $search = $params->shift();
         if (!$search) {
             return $this->suggest($loader->listModuleCommands($module));
         }
         $command = $loader->resolveModuleCommandName($found, $search);
         if ($command) {
             // Do not return suggestions if we are already on the next word:
             if ($bare_params[$cword] === $search) {
                 return $this->suggest(array($command));
             }
             $obj = $loader->getModuleCommandInstance($module, $command);
         } else {
             return $this->suggest($loader->getLastSuggestions());
         }
     }
     if ($obj !== null) {
         $search = $params->shift();
         if (!$search) {
             return $this->suggest($obj->listActions());
         }
         $action = $loader->resolveObjectActionName($obj, $search);
         if ($action) {
             if ($bare_params[$cword] === $search) {
                 return $this->suggest(array($action));
             }
         } else {
             return $this->suggest($loader->getLastSuggestions());
         }
     }
 }