Skip to content

Conversation

@czpilar
Copy link
Contributor

@czpilar czpilar commented Dec 26, 2025

Resolves #1246

@fmbenhassine
Copy link
Contributor

LGTM 👍 Works with multiple options as well:

package org.springframework.shell.samples.helloworld.boot;

import java.util.Collections;
import java.util.stream.Stream;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.shell.core.command.CommandOption;
import org.springframework.shell.core.command.annotation.Command;
import org.springframework.shell.core.command.annotation.Option;
import org.springframework.shell.core.command.completion.CompletionProposal;
import org.springframework.shell.core.command.completion.CompletionProvider;

@SpringBootApplication
public class SpringShellApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringShellApplication.class, args);
	}

	@Command(name = "hello", completionProvider = "helloNameCompletionProvider")
	public void sayHello(@Option(longName = "firstName", shortName = 'f') String firstName,
			@Option(longName = "lastName", shortName = 'l') String lastName) {
		System.out.println("Hello " + firstName + " " + lastName + "!");
	}

	@Bean
	public CompletionProvider helloNameCompletionProvider() {
		return completionContext -> {
			CommandOption option = completionContext.getCommandOption();
			if (option == null) {
				return Collections.emptyList();
			}
			if ("firstName".equals(option.longName()) || 'f' == option.shortName()) {
				return Stream.of("Foo1", "Foo2").map(CompletionProposal::new).toList();
			}
			if ("lastName".equals(option.longName()) || 'l' == option.shortName()) {
				return Stream.of("Bar1", "Bar2").map(CompletionProposal::new).toList();
			}
			return Collections.emptyList();
		};
	}

}

Completion works as expected in this example. Thank you for the PR!

@fmbenhassine
Copy link
Contributor

Rebased, squashed and merged as 1d91365.

Thank you for yet another awesome contribution! 🙏

@czpilar czpilar deleted the 1246-completion-for-particular-option branch December 26, 2025 23:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cannot define completion only for a particular command option

2 participants