From 998375ae4f27da9b6da452fddc9a930ff8c66957 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Tue, 16 Jan 2024 14:54:38 +0100 Subject: [PATCH 1/2] Use clang-format for .c and .h files Because clang-format is not used universally, this change adds a check so that we only run clang-format if a .clang-format file can be found higher up in the directory tree. --- acme/acmego/main.go | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/acme/acmego/main.go b/acme/acmego/main.go index 95bd2a1b..90a7bf99 100644 --- a/acme/acmego/main.go +++ b/acme/acmego/main.go @@ -22,7 +22,6 @@ // // .rs - rustfmt // .py - yapf -// package main import ( @@ -33,6 +32,7 @@ import ( "log" "os" "os/exec" + "path/filepath" "strconv" "strings" "unicode/utf8" @@ -42,14 +42,37 @@ import ( var gofmt = flag.Bool("f", false, "format the entire file after Put") -var formatters = map[string][]string{ - ".go": []string{"goimports"}, +type formatter struct { + cmd []string + enabled func(string) bool +} + +func enabledAlways(string) bool { return true } + +var formatters = map[string]formatter{ + ".go": {[]string{"goimports"}, enabledAlways}, +} + +func findClangFormatFile(path string) bool { + for { + newpath := filepath.Clean(filepath.Join(path, "..")) + if path == newpath { + break + } + path = newpath + if fi, err := os.Stat(filepath.Join(path, ".clang-format")); err == nil { + return !fi.IsDir() + } + } + return false } // Non-Go formatters (only loaded with -f option). -var otherFormatters = map[string][]string{ - ".rs": []string{"rustfmt", "--emit", "stdout"}, - ".py": []string{"yapf"}, +var otherFormatters = map[string]formatter{ + ".py": {[]string{"yapf"}, enabledAlways}, + ".rs": {[]string{"rustfmt", "--emit", "stdout"}, enabledAlways}, + ".c": {[]string{"clang-format"}, findClangFormatFile}, + ".h": {[]string{"clang-format"}, findClangFormatFile}, } func main() { @@ -73,8 +96,8 @@ func main() { continue } for suffix, formatter := range formatters { - if strings.HasSuffix(event.Name, suffix) { - reformat(event.ID, event.Name, formatter) + if strings.HasSuffix(event.Name, suffix) && formatter.enabled(event.Name) { + reformat(event.ID, event.Name, formatter.cmd) break } } From e2df5eb0cc8d2b44b269ace0159976ddd36c710c Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Wed, 25 Jun 2025 19:34:00 +0200 Subject: [PATCH 2/2] acmego: also process .cpp --- acme/acmego/main.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/acme/acmego/main.go b/acme/acmego/main.go index 90a7bf99..314ec294 100644 --- a/acme/acmego/main.go +++ b/acme/acmego/main.go @@ -69,10 +69,11 @@ func findClangFormatFile(path string) bool { // Non-Go formatters (only loaded with -f option). var otherFormatters = map[string]formatter{ - ".py": {[]string{"yapf"}, enabledAlways}, - ".rs": {[]string{"rustfmt", "--emit", "stdout"}, enabledAlways}, - ".c": {[]string{"clang-format"}, findClangFormatFile}, - ".h": {[]string{"clang-format"}, findClangFormatFile}, + ".py": {[]string{"yapf"}, enabledAlways}, + ".rs": {[]string{"rustfmt", "--emit", "stdout"}, enabledAlways}, + ".c": {[]string{"clang-format"}, findClangFormatFile}, + ".h": {[]string{"clang-format"}, findClangFormatFile}, + ".cpp": {[]string{"clang-format"}, findClangFormatFile}, } func main() {