mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2026-01-15 12:44:42 +08:00
# Issue We're using github.com/urfave/cli/v2 # Resolution Upgrade to github.com/urfave/cli/v3
106 lines
2.2 KiB
Go
106 lines
2.2 KiB
Go
package commands
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/ditashi/jsbeautifier-go/jsbeautifier"
|
|
"github.com/urfave/cli/v3"
|
|
)
|
|
|
|
var _ = cmd(catUtils, func() *cli.Command {
|
|
var args FmtArgs
|
|
return &cli.Command{
|
|
Name: "fmt",
|
|
Usage: "[BETA] Format and prettify a given file",
|
|
Action: func(ctx context.Context, c *cli.Command) error {
|
|
return exit(FmtFile(args))
|
|
},
|
|
Flags: args.flags(),
|
|
}
|
|
}())
|
|
|
|
// FmtArgs stores arguments related to the fmt subcommand.
|
|
type FmtArgs struct {
|
|
InputFile string
|
|
OutputFile string
|
|
Verbose bool
|
|
}
|
|
|
|
func (args *FmtArgs) flags() []cli.Flag {
|
|
var flags []cli.Flag
|
|
flags = append(flags, &cli.StringFlag{
|
|
Name: "input",
|
|
Aliases: []string{"i"},
|
|
Value: "dnsconfig.js",
|
|
Usage: "Input file",
|
|
Destination: &args.InputFile,
|
|
})
|
|
flags = append(flags, &cli.StringFlag{
|
|
Name: "output",
|
|
Aliases: []string{"o"},
|
|
Value: "dnsconfig.js",
|
|
Usage: "Output file",
|
|
Destination: &args.OutputFile,
|
|
})
|
|
flags = append(flags, &cli.BoolFlag{
|
|
Name: "verbose",
|
|
Aliases: []string{"v"},
|
|
Value: false,
|
|
Usage: "Enable verbose output",
|
|
Destination: &args.Verbose,
|
|
})
|
|
return flags
|
|
}
|
|
|
|
// FmtFile reads and formats a file.
|
|
func FmtFile(args FmtArgs) error {
|
|
var fileBytes []byte
|
|
if args.InputFile == "" {
|
|
var err error
|
|
fileBytes, err = io.ReadAll(os.Stdin)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
var err error
|
|
fileBytes, err = os.ReadFile(args.InputFile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
original := string(fileBytes)
|
|
|
|
opts := jsbeautifier.DefaultOptions()
|
|
beautified, beautifyErr := jsbeautifier.Beautify(&original, opts)
|
|
if beautifyErr != nil {
|
|
return beautifyErr
|
|
}
|
|
|
|
beautified = strings.TrimSpace(beautified)
|
|
if len(beautified) != 0 {
|
|
beautified = beautified + "\n"
|
|
}
|
|
|
|
if args.OutputFile == "" {
|
|
fmt.Print(beautified)
|
|
} else {
|
|
changed := original != beautified
|
|
if changed {
|
|
if err := os.WriteFile(args.OutputFile, []byte(beautified), 0o744); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if args.Verbose || changed {
|
|
if changed {
|
|
fmt.Fprintf(os.Stderr, "%s (formatted)\n", args.OutputFile)
|
|
} else {
|
|
fmt.Fprintf(os.Stderr, "%s (unchanged)\n", args.OutputFile)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|