setCommands($commands); } /** * {@inheritdoc} */ public function refine(AnalysisResult $analysis): AnalysisResult { if (!$this->supportsRefinement($analysis)) { return $analysis; } if (!\preg_match('/^\s*([^\s]+)(\s+.*)$/s', $analysis->input, $matches)) { return $analysis; } $commandName = $matches[1]; $command = $this->commandMap[$commandName] ?? null; if (!$command instanceof CommandArgumentCompletionAware) { return $analysis; } if (!$command->supportsArgumentCompletion($analysis)) { return $analysis; } return $analysis->withContext(CompletionKind::COMMAND_ARGUMENT, $analysis->prefix, $commandName); } private function supportsRefinement(AnalysisResult $analysis): bool { if (($analysis->kinds & CompletionKind::COMMAND_OPTION) !== 0) { return false; } return ($analysis->kinds & CompletionKind::COMMAND_ELIGIBLE) !== 0; } }