diff --git a/gen/go_code.py b/gen/go_code.py index 9c5ff9b44..7849c6138 100755 --- a/gen/go_code.py +++ b/gen/go_code.py @@ -530,7 +530,7 @@ def kitten_clis() -> None: for opt in gopts: print(opt.as_option('ans')) od.append(opt.struct_declaration()) - ser.append(opt.as_string_for_commandline()) + ser.append('\n'.join(opt.as_string_for_commandline())) if ac is not None: print(''.join(ac.as_go_code('ans.ArgCompleter', ' = '))) if not kcd: @@ -544,8 +544,10 @@ def kitten_clis() -> None: print('\n'.join(od)) print('}') print('func (opts Options) AsCommandLine() (ans []string) {') - for x in ser: - print('\t' + x) + if ser: + print('\t sval := ""') + for x in ser: + print('\t' + x) print('return') print('}') diff --git a/kitty/cli.py b/kitty/cli.py index 22d06e5c2..68f8d6b8e 100644 --- a/kitty/cli.py +++ b/kitty/cli.py @@ -85,21 +85,29 @@ class GoOption: ans += f'\n\tDefault: "{serialize_as_go_string(self.default)}",\n' return ans + '})' - def as_string_for_commandline(self) -> str: + def as_string_for_commandline(self) -> Iterator[str]: + # }}}}}}}}}}}]]]]]]]]]]]]]]]]] flag = self.flags[0] val = f'opts.{self.go_var_name}' + if self.go_type == '[]string': + yield f'\tfor _, x := range {val} {{ ans = append(ans, `{flag}=` + x) }}' + return match self.go_type: case 'bool': - val = f'fmt.Sprintf(`%#v`, {val})' + yield f'sval = fmt.Sprintf(`%#v`, {val})' + godef = '`true`' if self.type != 'bool-set' else '`false`' case 'int': - val = f'fmt.Sprintf(`%d`, {val})' + yield f'sval = fmt.Sprintf(`%d`, {val})' + godef = f"`{self.default or '0'}`" case 'string': - return f'if {val} != "" {{ ans = append(ans, `{flag}=` + {val}) }}' + yield f'sval = {val}' + godef = f'''"{serialize_as_go_string(self.default or '')}"''' case 'float64': - val = f'fmt.Sprintf(`%f`, {val})' - case '[]string': - return f'for _, x := range {val} {{ ans = append(ans, `{flag}=` + x) }}' - return f'ans = append(ans, `{flag}=` + {val})' + yield f'sval = fmt.Sprintf(`%f`, {val})' + godef = f"`{self.default or '0'}`" + case _: + raise ValueError(f'Unknown type: {self.go_type}') + yield f'\tif (sval != {godef}) {{ ans = append(ans, `{flag}=` + sval)}}' @property def sorted_choices(self) -> list[str]: