diff --git a/cmd/d2/help.go b/cmd/d2/help.go index 2d1224829..35ce3420f 100644 --- a/cmd/d2/help.go +++ b/cmd/d2/help.go @@ -37,7 +37,7 @@ func layoutHelp(ctx context.Context, ms *xmain.State) error { } else if len(ms.FlagSet.Args()) == 2 { return longLayoutHelp(ctx, ms) } else { - return xmain.UsageErrorf("too many arguments passed") + return pluginSubcommand(ctx, ms) } } @@ -85,10 +85,12 @@ func longLayoutHelp(ctx context.Context, ms *xmain.State) error { return err } + if !strings.HasSuffix(pluginInfo.LongHelp, "\n") { + pluginInfo.LongHelp += "\n" + } fmt.Fprintf(ms.Stdout, `%s (%s): -%s -`, pluginInfo.Name, pluginLocation, pluginInfo.LongHelp) +%s`, pluginInfo.Name, pluginLocation, pluginInfo.LongHelp) return nil } @@ -110,6 +112,17 @@ For more information on setup, please visit https://github.com/terrastruct/d2.`, layout, strings.Join(names, ", ")) } +func pluginSubcommand(ctx context.Context, ms *xmain.State) error { + layout := ms.FlagSet.Arg(1) + plugin, _, err := d2plugin.FindPlugin(ctx, layout) + if errors.Is(err, exec.ErrNotFound) { + return layoutNotFound(ctx, layout) + } + + ms.Args = ms.FlagSet.Args()[2:] + return d2plugin.Serve(plugin)(ctx, ms) +} + func humanPath(fp string) string { if strings.HasPrefix(fp, os.Getenv("HOME")) { return filepath.Join("~", strings.TrimPrefix(fp, os.Getenv("HOME"))) diff --git a/cmd/d2/main.go b/cmd/d2/main.go index 19c11c942..6ce4d5459 100644 --- a/cmd/d2/main.go +++ b/cmd/d2/main.go @@ -40,7 +40,7 @@ func run(ctx context.Context, ms *xmain.State) (err error) { err = ms.FlagSet.Parse(ms.Args) if !errors.Is(err, pflag.ErrHelp) && err != nil { - return fmt.Errorf("failed to parse flags: %w", err) + return xmain.UsageErrorf("failed to parse flags: %v", err) } if len(ms.FlagSet.Args()) > 0 {