mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.1 KiB
54 lines
1.1 KiB
// +build ignore |
|
|
|
package main |
|
|
|
import ( |
|
"bytes" |
|
"encoding/json" |
|
"io/ioutil" |
|
"log" |
|
"os" |
|
) |
|
|
|
func init() { |
|
log.SetPrefix("fmtjson: ") |
|
log.SetFlags(0) |
|
} |
|
|
|
func main() { |
|
if len(os.Args) < 1 { |
|
log.Fatal(`usage: go run jsonfmt.go [files...] |
|
|
|
This is a small utility that standardizes the formatting of JSON files. |
|
`) |
|
} |
|
|
|
for _, path := range os.Args[1:] { |
|
data, err := ioutil.ReadFile(path) |
|
if err != nil { |
|
log.Fatalf("reading file %s: %v", path, err) |
|
} |
|
|
|
buff := new(bytes.Buffer) |
|
if err := json.Indent(buff, data, "", " "); err != nil { |
|
if err, ok := err.(*json.SyntaxError); ok { |
|
// Calculate line number and column of error. |
|
data := data[:err.Offset] |
|
lineNum := 1 + bytes.Count(data, []byte{'\n'}) |
|
lastIndex := bytes.LastIndex(data, []byte{'\n'}) |
|
|
|
colNum := err.Offset |
|
if lastIndex > -1 { |
|
colNum = int64(len(data) - lastIndex) |
|
} |
|
log.Fatalf("file %s: invalid json at line %d, column %d: %v", path, lineNum, colNum, err) |
|
} |
|
|
|
log.Fatalf("file %s: invalid json: %v", path, err) |
|
} |
|
|
|
if err := ioutil.WriteFile(path, buff.Bytes(), 0644); err != nil { |
|
log.Fatalf("write file %s: %v", path, err) |
|
} |
|
} |
|
}
|
|
|