package cmd import ( "github.com/spf13/cobra" ) func init() { // File extension hints for positional args convertCmd.ValidArgsFunction = completeMarkdownFiles embedCmd.ValidArgsFunction = completeMarkdownFiles fmtCmd.ValidArgsFunction = completeXMLFiles extractCmd.ValidArgsFunction = completeXMLFiles pullCmd.ValidArgsFunction = cobra.NoFileCompletions pushCmd.ValidArgsFunction = completePushArgs // Flag file completions _ = convertCmd.RegisterFlagCompletionFunc("output", completeXMLFilesFlag) _ = embedCmd.RegisterFlagCompletionFunc("output", completeXMLFilesFlag) _ = embedCmd.RegisterFlagCompletionFunc("template", completeXMLFilesFlag) _ = extractCmd.RegisterFlagCompletionFunc("output", completeMarkdownFilesFlag) _ = fmtCmd.RegisterFlagCompletionFunc("output", completeXMLFilesFlag) _ = pullCmd.RegisterFlagCompletionFunc("output", completeMarkdownFilesFlag) // Marker flag completions for _, cmd := range []*cobra.Command{embedCmd, extractCmd, pushCmd} { _ = cmd.RegisterFlagCompletionFunc("marker-start", cobra.NoFileCompletions) _ = cmd.RegisterFlagCompletionFunc("marker-end", cobra.NoFileCompletions) } } func completeMarkdownFiles(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return []string{"md"}, cobra.ShellCompDirectiveFilterFileExt } func completeXMLFiles(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return []string{"xml"}, cobra.ShellCompDirectiveFilterFileExt } func completePushArgs(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { if len(args) == 0 { // First arg is URL — no file completion return nil, cobra.ShellCompDirectiveNoFileComp } // Second arg is input file return []string{"md"}, cobra.ShellCompDirectiveFilterFileExt } func completeMarkdownFilesFlag(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return []string{"md"}, cobra.ShellCompDirectiveFilterFileExt } func completeXMLFilesFlag(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return []string{"xml"}, cobra.ShellCompDirectiveFilterFileExt }