summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2023-09-29 18:42:53 +0200
committerStefan Haller <stefan@haller-berlin.de>2023-09-29 20:38:29 +0200
commit7af371701d44dbde052235522876c1bf75f05c91 (patch)
treeebdebeee596b4202cf50abc0e2d42b10f3bea680
parent5ccc95b76fbaa8d268818159d6ff4d64d23b153c (diff)
Use go:generate for generating cheatsheets
This has several benefits: - it's less code - we're using the same mechanism to generate all our auto-generated files, so if someone wants to add a new one, it's clear which pattern to follow - we can re-generate all generated files with a single command ("go generate ./...", or "make generate") - we only need a single check on CI to check that all files are up to date (see previous commit)
-rw-r--r--.github/workflows/ci.yml3
-rw-r--r--Makefile5
-rw-r--r--docs/keybindings/Keybindings_en.md2
-rw-r--r--docs/keybindings/Keybindings_ja.md2
-rw-r--r--docs/keybindings/Keybindings_ko.md2
-rw-r--r--docs/keybindings/Keybindings_nl.md2
-rw-r--r--docs/keybindings/Keybindings_pl.md2
-rw-r--r--docs/keybindings/Keybindings_ru.md2
-rw-r--r--docs/keybindings/Keybindings_zh-CN.md2
-rw-r--r--docs/keybindings/Keybindings_zh-TW.md2
-rw-r--r--pkg/cheatsheet/check.go77
-rw-r--r--pkg/cheatsheet/generate.go14
-rw-r--r--pkg/cheatsheet/generator.go14
-rw-r--r--scripts/cheatsheet/main.go27
14 files changed, 31 insertions, 125 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bfc67eada..d5d5651ff 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -127,9 +127,6 @@ jobs:
uses: actions/setup-go@v4
with:
go-version: 1.20.x
- - name: Check Cheatsheet
- run: |
- go run scripts/cheatsheet/main.go check
- name: Check Vendor Directory
# ensure our vendor directory matches up with our go modules
run: |
diff --git a/Makefile b/Makefile
index a220b68b3..33e506059 100644
--- a/Makefile
+++ b/Makefile
@@ -29,6 +29,7 @@ unit-test:
.PHONY: test
test: unit-test integration-test-all
+# Generate all our auto-generated files (test list, cheatsheets, maybe other things in the future)
.PHONY: generate
generate:
go generate ./...
@@ -37,10 +38,6 @@ generate:
format:
gofumpt -l -w .
-.PHONY: update-cheatsheet
-update-cheatsheet:
- go run scripts/cheatsheet/main.go generate
-
# For more details about integration test, see https://github.com/jesseduffield/lazygit/blob/master/pkg/integration/README.md.
.PHONY: integration-test-tui
integration-test-tui:
diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md
index 976ea8193..3c57562f2 100644
--- a/docs/keybindings/Keybindings_en.md
+++ b/docs/keybindings/Keybindings_en.md
@@ -1,4 +1,4 @@
-_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go run scripts/cheatsheet/main.go generate` from the project root._
+_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go generate ./...` from the project root._
# Lazygit Keybindings
diff --git a/docs/keybindings/Keybindings_ja.md b/docs/keybindings/Keybindings_ja.md
index 419beb5dd..42a849fe9 100644
--- a/docs/keybindings/Keybindings_ja.md
+++ b/docs/keybindings/Keybindings_ja.md
@@ -1,4 +1,4 @@
-_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go run scripts/cheatsheet/main.go generate` from the project root._
+_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go generate ./...` from the project root._
# Lazygit キーバインド
diff --git a/docs/keybindings/Keybindings_ko.md b/docs/keybindings/Keybindings_ko.md
index 71c57714e..025bb9559 100644
--- a/docs/keybindings/Keybindings_ko.md
+++ b/docs/keybindings/Keybindings_ko.md
@@ -1,4 +1,4 @@
-_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go run scripts/cheatsheet/main.go generate` from the project root._
+_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go generate ./...` from the project root._
# Lazygit 키 바인딩
diff --git a/docs/keybindings/Keybindings_nl.md b/docs/keybindings/Keybindings_nl.md
index 13a868817..23d42e477 100644
--- a/docs/keybindings/Keybindings_nl.md
+++ b/docs/keybindings/Keybindings_nl.md
@@ -1,4 +1,4 @@
-_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go run scripts/cheatsheet/main.go generate` from the project root._
+_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go generate ./...` from the project root._
# Lazygit Sneltoetsen
diff --git a/docs/keybindings/Keybindings_pl.md b/docs/keybindings/Keybindings_pl.md
index eae095115..1c1ce73ae 100644
--- a/docs/keybindings/Keybindings_pl.md
+++ b/docs/keybindings/Keybindings_pl.md
@@ -1,4 +1,4 @@
-_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go run scripts/cheatsheet/main.go generate` from the project root._
+_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go generate ./...` from the project root._
# Lazygit Keybindings
diff --git a/docs/keybindings/Keybindings_ru.md b/docs/keybindings/Keybindings_ru.md
index ff533b605..6e397d0a2 100644
--- a/docs/keybindings/Keybindings_ru.md
+++ b/docs/keybindings/Keybindings_ru.md
@@ -1,4 +1,4 @@
-_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go run scripts/cheatsheet/main.go generate` from the project root._
+_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go generate ./...` from the project root._
# Lazygit Связки клавиш
diff --git a/docs/keybindings/Keybindings_zh-CN.md b/docs/keybindings/Keybindings_zh-CN.md
index 620c77495..ed232d70b 100644
--- a/docs/keybindings/Keybindings_zh-CN.md
+++ b/docs/keybindings/Keybindings_zh-CN.md
@@ -1,4 +1,4 @@
-_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go run scripts/cheatsheet/main.go generate` from the project root._
+_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go generate ./...` from the project root._
# Lazygit 按键绑定
diff --git a/docs/keybindings/Keybindings_zh-TW.md b/docs/keybindings/Keybindings_zh-TW.md
index 186d02864..eff90a5c0 100644
--- a/docs/keybindings/Keybindings_zh-TW.md
+++ b/docs/keybindings/Keybindings_zh-TW.md
@@ -1,4 +1,4 @@
-_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go run scripts/cheatsheet/main.go generate` from the project root._
+_This file is auto-generated. To update, make the changes in the pkg/i18n directory and then run `go generate ./...` from the project root._
# Lazygit 鍵盤快捷鍵
diff --git a/pkg/cheatsheet/check.go b/pkg/cheatsheet/check.go
deleted file mode 100644
index 5c4df97ef..000000000
--- a/pkg/cheatsheet/check.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package cheatsheet
-
-import (
- "fmt"
- "io/fs"
- "log"
- "os"
- "path/filepath"
- "regexp"
-
- "github.com/pmezard/go-difflib/difflib"
-)
-
-func Check() {
- dir := GetKeybindingsDir()
- tmpDir := filepath.Join(os.TempDir(), "lazygit_cheatsheet")
- err := os.RemoveAll(tmpDir)
- if err != nil {
- log.Fatalf("Error occurred while checking if cheatsheets are up to date: %v", err)
- }
- err = os.Mkdir(tmpDir, 0o700)
- if err != nil {
- log.Fatalf("Error occurred while checking if cheatsheets are up to date: %v", err)
- }
-
- generateAtDir(tmpDir)
- defer os.RemoveAll(tmpDir)
-
- actualContent := obtainContent(dir)
- expectedContent := obtainContent(tmpDir)
-
- if expectedContent == "" {
- log.Fatal("empty expected content")
- }
-
- if actualContent != expectedContent {
- err := difflib.WriteUnifiedDiff(os.Stdout, difflib.UnifiedDiff{
- A: difflib.SplitLines(expectedContent),
- B: difflib.SplitLines(actualContent),
- FromFile: "Expected",
- FromDate: "",
- ToFile: "Actual",
- ToDate: "",
- Context: 1,
- })
- if err != nil {
- log.Fatalf("Error occurred while checking if cheatsheets are up to date: %v", err)
- }
- fmt.Printf("\nCheatsheets are out of date. Please run `%s` at the project root and commit the changes. If you run the script and no keybindings files are updated as a result, try rebasing onto master and trying again.\n", CommandToRun())
- os.Exit(1)
- }
-
- fmt.Println("\nCheatsheets are up to date")
-}
-
-func obtainContent(dir string) string {
- re := regexp.MustCompile(`Keybindings_\w+\.md$`)
-
- content := ""
- err := filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
- if re.MatchString(path) {
- bytes, err := os.ReadFile(path)
- if err != nil {
- log.Fatalf("Error occurred while checking if cheatsheets are up to date: %v", err)
- }
- content += fmt.Sprintf("\n%s\n\n", filepath.Base(path))
- content += string(bytes)
- }
-
- return nil
- })
- if err != nil {
- log.Fatalf("Error occurred while checking if cheatsheets are up to date: %v", err)
- }
-
- return content
-}
diff --git a/pkg/cheatsheet/generate.go b/pkg/cheatsheet/generate.go
index 184e84a04..392e9d64d 100644
--- a/pkg/cheatsheet/generate.go
+++ b/pkg/cheatsheet/generate.go
@@ -1,10 +1,12 @@
-// This "script" generates a file called Keybindings_{{.LANG}}.md
-// in current working directory.
+//go:generate go run generator.go
+
+// This "script" generates files called Keybindings_{{.LANG}}.md
+// in the docs/keybindings directory.
//
-// The content of this generated file is a keybindings cheatsheet.
+// The content of these generated files is a keybindings cheatsheet.
//
-// To generate cheatsheet in english run:
-// go run scripts/generate_cheatsheet.go
+// To generate the cheatsheets, run:
+// go generate pkg/cheatsheet/generate.go
package cheatsheet
@@ -42,7 +44,7 @@ type headerWithBindings struct {
}
func CommandToRun() string {
- return "go run scripts/cheatsheet/main.go generate"
+ return "go generate ./..."
}
func GetKeybindingsDir() string {
diff --git a/pkg/cheatsheet/generator.go b/pkg/cheatsheet/generator.go
new file mode 100644
index 000000000..1708a28e8
--- /dev/null
+++ b/pkg/cheatsheet/generator.go
@@ -0,0 +1,14 @@
+//go:build ignore
+
+package main
+
+import (
+ "fmt"
+
+ "github.com/jesseduffield/lazygit/pkg/cheatsheet"
+)
+
+func main() {
+ fmt.Printf("Generating cheatsheets in %s...\n", cheatsheet.GetKeybindingsDir())
+ cheatsheet.Generate()
+}
diff --git a/scripts/cheatsheet/main.go b/scripts/cheatsheet/main.go
deleted file mode 100644
index 742bdc7d7..000000000
--- a/scripts/cheatsheet/main.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package main
-
-import (
- "fmt"
- "log"
- "os"
-
- "github.com/jesseduffield/lazygit/pkg/cheatsheet"
-)
-
-func main() {
- if len(os.Args) < 2 {
- log.Fatal("Please provide a command: one of 'generate', 'check'")
- }
-
- command := os.Args[1]
-
- switch command {
- case "generate":
- cheatsheet.Generate()
- fmt.Printf("\nGenerated cheatsheets in %s\n", cheatsheet.GetKeybindingsDir())
- case "check":
- cheatsheet.Check()
- default:
- log.Fatal("\nUnknown command. Expected one of 'generate', 'check'")
- }
-}