From e1df6b5702224bbbdc4ed555ecc90620ba9b0e40 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 21 Sep 2016 00:48:05 +0200 Subject: [PATCH] Full support for autocomplete of app:* Signed-off-by: Joas Schilling --- core/Command/App/CheckCode.php | 28 +++++++++++++++++++++++++++- core/Command/App/Disable.php | 25 ++++++++++++++++++++++++- core/Command/App/Enable.php | 32 +++++++++++++++++++++++++++++++- core/Command/App/GetPath.php | 13 +++++++++++++ core/Command/App/ListApps.php | 22 ++++++++++++++++++++++ 5 files changed, 117 insertions(+), 3 deletions(-) diff --git a/core/Command/App/CheckCode.php b/core/Command/App/CheckCode.php index 9c9485254d..bd1bac247a 100644 --- a/core/Command/App/CheckCode.php +++ b/core/Command/App/CheckCode.php @@ -29,13 +29,15 @@ use OC\App\CodeChecker\CodeChecker; use OC\App\CodeChecker\EmptyCheck; use OC\App\CodeChecker\InfoChecker; use OC\App\InfoParser; +use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface; +use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; -class CheckCode extends Command { +class CheckCode extends Command implements CompletionAwareInterface { /** @var InfoParser */ private $infoParser; @@ -197,4 +199,28 @@ class CheckCode extends Command { $output->writeln("Deprecated file found: $updatePhp - please use repair steps"); } } + + /** + * @param string $optionName + * @param CompletionContext $context + * @return string[] + */ + public function completeOptionValues($optionName, CompletionContext $context) { + if ($optionName === 'checker') { + return ['private', 'deprecation', 'strong-comparison']; + } + return []; + } + + /** + * @param string $argumentName + * @param CompletionContext $context + * @return string[] + */ + public function completeArgumentValues($argumentName, CompletionContext $context) { + if ($argumentName === 'app-id') { + return \OC_App::getAllApps(); + } + return []; + } } diff --git a/core/Command/App/Disable.php b/core/Command/App/Disable.php index 07e752ee83..b64e309bd9 100644 --- a/core/Command/App/Disable.php +++ b/core/Command/App/Disable.php @@ -26,12 +26,14 @@ namespace OC\Core\Command\App; use OCP\App\IAppManager; +use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface; +use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -class Disable extends Command { +class Disable extends Command implements CompletionAwareInterface { /** @var IAppManager */ protected $manager; @@ -69,4 +71,25 @@ class Disable extends Command { $output->writeln('No such app enabled: ' . $appId); } } + + /** + * @param string $optionName + * @param CompletionContext $context + * @return string[] + */ + public function completeOptionValues($optionName, CompletionContext $context) { + return []; + } + + /** + * @param string $argumentName + * @param CompletionContext $context + * @return string[] + */ + public function completeArgumentValues($argumentName, CompletionContext $context) { + if ($argumentName === 'app-id') { + return array_diff(\OC_App::getEnabledApps(true, true), $this->manager->getAlwaysEnabledApps()); + } + return []; + } } diff --git a/core/Command/App/Enable.php b/core/Command/App/Enable.php index d5b161f8ea..19f24d82e4 100644 --- a/core/Command/App/Enable.php +++ b/core/Command/App/Enable.php @@ -26,13 +26,16 @@ namespace OC\Core\Command\App; use OCP\App\IAppManager; +use OCP\IGroup; +use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface; +use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; -class Enable extends Command { +class Enable extends Command implements CompletionAwareInterface { /** @var IAppManager */ protected $manager; @@ -81,4 +84,31 @@ class Enable extends Command { } return 0; } + + /** + * @param string $optionName + * @param CompletionContext $context + * @return string[] + */ + public function completeOptionValues($optionName, CompletionContext $context) { + if ($optionName === 'groups') { + return array_map(function(IGroup $group) { + return $group->getGID(); + }, \OC::$server->getGroupManager()->search($context->getCurrentWord())); + } + return []; + } + + /** + * @param string $argumentName + * @param CompletionContext $context + * @return string[] + */ + public function completeArgumentValues($argumentName, CompletionContext $context) { + if ($argumentName === 'app-id') { + $allApps = \OC_App::getAllApps(); + return array_diff($allApps, \OC_App::getEnabledApps(true, true)); + } + return []; + } } diff --git a/core/Command/App/GetPath.php b/core/Command/App/GetPath.php index 3eeee5c2c4..33a812c674 100644 --- a/core/Command/App/GetPath.php +++ b/core/Command/App/GetPath.php @@ -23,6 +23,7 @@ namespace OC\Core\Command\App; use OC\Core\Command\Base; +use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -60,4 +61,16 @@ class GetPath extends Base { // App not found, exit with non-zero return 1; } + + /** + * @param string $argumentName + * @param CompletionContext $context + * @return string[] + */ + public function completeArgumentValues($argumentName, CompletionContext $context) { + if ($argumentName === 'app') { + return \OC_App::getAllApps(); + } + return []; + } } diff --git a/core/Command/App/ListApps.php b/core/Command/App/ListApps.php index 08449dd8dc..e03e3ce8f5 100644 --- a/core/Command/App/ListApps.php +++ b/core/Command/App/ListApps.php @@ -27,6 +27,7 @@ namespace OC\Core\Command\App; use OC\Core\Command\Base; use OCP\App\IAppManager; +use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -117,4 +118,25 @@ class ListApps extends Base { break; } } + + /** + * @param string $optionName + * @param CompletionContext $completionContext + * @return array + */ + public function completeOptionValues($optionName, CompletionContext $completionContext) { + if ($optionName === 'shipped') { + return ['true', 'false']; + } + return []; + } + + /** + * @param string $argumentName + * @param CompletionContext $context + * @return string[] + */ + public function completeArgumentValues($argumentName, CompletionContext $context) { + return []; + } }