Merge pull request #571 from alixander/include-binary-plugins

Include binary plugins
This commit is contained in:
Alexander Wang 2022-12-30 16:28:19 -08:00 committed by GitHub
commit 3e2c5bf18a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 2 deletions

View file

@ -126,7 +126,7 @@ func (p execPlugin) Layout(ctx context.Context, g *d2graph.Graph) error {
args := []string{"layout"} args := []string{"layout"}
for k, v := range p.opts { for k, v := range p.opts {
args = append(args, k, v) args = append(args, fmt.Sprintf("--%s", k), v)
} }
cmd := exec.CommandContext(ctx, p.path, args...) cmd := exec.CommandContext(ctx, p.path, args...)

View file

@ -34,7 +34,15 @@ func (f *PluginSpecificFlag) AddToOpts(opts *xmain.Opts) {
case "string": case "string":
opts.String("", f.Name, "", f.Default.(string), f.Usage) opts.String("", f.Name, "", f.Default.(string), f.Usage)
case "int64": case "int64":
opts.Int64("", f.Name, "", f.Default.(int64), f.Usage) var val int64
switch defaultType := f.Default.(type) {
case int64:
val = defaultType
case float64:
// json unmarshals numbers to float64
val = int64(defaultType)
}
opts.Int64("", f.Name, "", val, f.Usage)
} }
} }
@ -142,5 +150,19 @@ func ListPluginFlags(ctx context.Context) ([]PluginSpecificFlag, error) {
} }
out = append(out, flags...) out = append(out, flags...)
} }
matches, err := xexec.SearchPath(binaryPrefix)
if err != nil {
return nil, err
}
for _, path := range matches {
p := &execPlugin{path: path}
flags, err := p.Flags(ctx)
if err != nil {
return nil, err
}
out = append(out, flags...)
}
return out, nil return out, nil
} }

View file

@ -21,6 +21,13 @@ import (
// Also see execPlugin in exec.go for the d2 binary plugin protocol. // Also see execPlugin in exec.go for the d2 binary plugin protocol.
func Serve(p Plugin) xmain.RunFunc { func Serve(p Plugin) xmain.RunFunc {
return func(ctx context.Context, ms *xmain.State) (err error) { return func(ctx context.Context, ms *xmain.State) (err error) {
fs, err := p.Flags(ctx)
if err != nil {
return err
}
for _, f := range fs {
f.AddToOpts(ms.Opts)
}
err = ms.Opts.Flags.Parse(ms.Opts.Args) err = ms.Opts.Flags.Parse(ms.Opts.Args)
if !errors.Is(err, pflag.ErrHelp) && err != nil { if !errors.Is(err, pflag.ErrHelp) && err != nil {
return xmain.UsageErrorf("failed to parse flags: %v", err) return xmain.UsageErrorf("failed to parse flags: %v", err)