@@ -205,12 +205,8 @@ _${this.config.bin}
205205 const cflags = this . commands . find ( c => c . id === id ) ?. flags
206206
207207 if ( cflags ) {
208- valuesBlock += ' \\'
209- this . genZshFlagArguments ( cflags )
210- . split ( '\n' )
211- . forEach ( f => {
212- valuesBlock += `\n ${ f } `
213- } )
208+ // eslint-disable-next-line no-template-curly-in-string
209+ valuesBlock += ' \\\n "${flags[@]}"'
214210 }
215211 }
216212
@@ -234,7 +230,7 @@ _${this.config.bin}
234230 summary : t . description ,
235231 } )
236232
237- argsBlock += util . format ( '"%s")\n %s\n ;;' , subArg , `_${ this . config . bin } _${ underscoreSepId } _${ subArg } ` )
233+ argsBlock += util . format ( '\n "%s")\n %s\n ;;' , subArg , `_${ this . config . bin } _${ underscoreSepId } _${ subArg } ` )
238234 } )
239235
240236 for ( const c of this . commands . filter ( c => c . id . startsWith ( id + ':' ) && c . id . split ( ':' ) . length === depth + 1 ) ) {
@@ -246,30 +242,50 @@ _${this.config.bin}
246242 summary : c . summary ,
247243 } )
248244
249- argsBlock += util . format ( '"%s")\n %s\n ;;' , subArg , this . genZshFlagArgumentsBlock ( c . flags ) )
245+ const block = this . genZshFlagArgumentsBlock ( c . flags )
246+ argsBlock += util . format ( '\n "%s")\n %s\n ;;' , subArg , block )
250247 }
251248 }
252249
253- const topicCompFunc =
254- `_${ this . config . bin } _${ underscoreSepId } () {
250+ let flags = ''
251+
252+ if ( id ) {
253+ const cflags = this . commands . find ( c => c . id === id ) ?. flags
254+
255+ if ( cflags ) {
256+ flags += '\n' ;
257+ ( this . genZshFlagArguments ( cflags ) ) . split ( '\n' ) . forEach ( f => {
258+ flags += ` ${ f } \n`
259+ } )
260+ flags += ' '
261+ }
262+ }
263+
264+ const topicCompFunc = `_${ this . config . bin } _${ underscoreSepId } () {
255265 local context state state_descr line
256266 typeset -A opt_args
257267
258268 _arguments -C "1: :->cmds" "*::arg:->args"
259269
270+ local -a flags=(%s)
271+
260272 case "$state" in
261273 cmds)
262274 %s
263275 ;;
264276 args)
265- case $line[1] in
266- %s
277+ case $line[1] in%s
278+ *)
279+ _arguments -S \\
280+ "\${flags[@]}"
281+ ;;
267282 esac
268283 ;;
269284 esac
270285}
271286`
272- return util . format ( topicCompFunc , this . genZshValuesBlock ( { id, subArgs} ) , argsBlock )
287+
288+ return util . format ( topicCompFunc , flags , this . genZshValuesBlock ( { id, subArgs} ) , argsBlock )
273289 }
274290
275291 private getCoTopics ( ) : string [ ] {
@@ -287,7 +303,8 @@ _${this.config.bin}
287303 }
288304
289305 private getTopics ( ) : Topic [ ] {
290- const topics = this . config . topics . filter ( ( topic : Interfaces . Topic ) => {
306+ const topics = this . config . topics
307+ . filter ( ( topic : Interfaces . Topic ) => {
291308 // it is assumed a topic has a child if it has children
292309 const hasChild = this . config . topics . some ( subTopic => subTopic . name . includes ( `${ topic . name } :` ) )
293310 return hasChild
@@ -359,4 +376,3 @@ _${this.config.bin}
359376 return cmds
360377 }
361378}
362-
0 commit comments