| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // This file contains fmtCmd which formats a .mojom file and outputs the |
| // formatted mojom file to stdout. |
| // The fmt command is invoked as follows: |
| // |
| // mojom fmt [-w] <mojom_file> |
| // |
| // If -w is specified and the formatted file is different from the original, |
| // the file is overwritten with the formatted version. |
| package main |
| |
| import ( |
| "flag" |
| "fmt" |
| "io/ioutil" |
| "log" |
| "mojom/mojom_tool/formatter" |
| "os" |
| "path/filepath" |
| ) |
| |
| // fmtCmd implements the fmt command for the mojom tool. |
| // The slice of strings |args| is the list of arguments passed on the command |
| // line starting with the program name and followed by the invoked command. |
| func fmtCmd(args []string) { |
| flagSet := flag.NewFlagSet("fmt", flag.ContinueOnError) |
| var overwrite bool |
| flagSet.BoolVar(&overwrite, "w", false, |
| "Overwrite the specified file with the formatted version if it is different from the original.") |
| |
| printUsage := func() { |
| fmt.Fprintf(os.Stderr, "Usage: %s fmt [-w] <mojom_file>\n\n", filepath.Base(args[0])) |
| fmt.Fprintf(os.Stderr, UsageString(flagSet)) |
| } |
| |
| if err := flagSet.Parse(args[2:]); err != nil { |
| if err != flag.ErrHelp { |
| fmt.Fprintln(os.Stderr, err.Error()) |
| } |
| printUsage() |
| os.Exit(1) |
| } |
| |
| inputFileName := flagSet.Arg(0) |
| if inputFileName == "" { |
| fmt.Fprintln(os.Stderr, "No .mojom file given.") |
| printUsage() |
| os.Exit(1) |
| } |
| |
| originalBytes, err := ioutil.ReadFile(inputFileName) |
| if err != nil { |
| log.Fatalln(err.Error()) |
| } |
| |
| original := string(originalBytes[:]) |
| |
| var formatted string |
| formatted, err = formatter.FormatMojom(inputFileName, original) |
| if err != nil { |
| log.Fatalln(err.Error()) |
| } |
| |
| if overwrite { |
| if formatted != original { |
| if err := ioutil.WriteFile(inputFileName, []byte(formatted), 0); err != nil { |
| log.Fatalln(err.Error()) |
| } |
| } |
| } else { |
| fmt.Print(formatted) |
| } |
| } |