From 5c2fe4ffcbfb1f11af2b898a818795484c6d7ce2 Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Thu, 3 Oct 2024 05:20:34 -0400 Subject: [PATCH] feat: hint valid scopes --- cmd/joj3/conf.go | 29 +++++++++++++++++++++++++++++ cmd/joj3/main.go | 7 +++++++ 2 files changed, 36 insertions(+) diff --git a/cmd/joj3/conf.go b/cmd/joj3/conf.go index 8f54337..9af1972 100644 --- a/cmd/joj3/conf.go +++ b/cmd/joj3/conf.go @@ -3,6 +3,7 @@ package main import ( "fmt" "log/slog" + "os" "path/filepath" "regexp" "strings" @@ -140,3 +141,31 @@ func parseMsg(confRoot, confName, msg string) (conf Conf, group string, err erro slog.Debug("conf loaded", "conf", conf) return } + +func listValidScopes(confRoot, confName, msg string) ([]string, error) { + conventionalCommit, err := parseConventionalCommit(msg) + if err != nil { + return []string{}, err + } + slog.Info("conventional commit", "commit", conventionalCommit) + confRoot = filepath.Clean(confRoot) + validScopes := []string{} + err = filepath.Walk(confRoot, func(path string, info os.FileInfo, err error) error { + if err != nil { + slog.Error("list valid scopes", "error", err) + return err + } + if info.IsDir() { + confPath := filepath.Join(path, confName) + if _, err := os.Stat(confPath); err == nil { + relPath, err := filepath.Rel(confRoot, path) + if err != nil { + return err + } + validScopes = append(validScopes, relPath) + } + } + return nil + }) + return validScopes, err +} diff --git a/cmd/joj3/main.go b/cmd/joj3/main.go index 1e48ffb..1308ae2 100644 --- a/cmd/joj3/main.go +++ b/cmd/joj3/main.go @@ -122,6 +122,13 @@ func mainImpl() error { conf, group, err := parseMsg(confRoot, confName, msg) if err != nil { slog.Error("parse msg", "error", err) + validScopes, scopeErr := listValidScopes( + confRoot, confName, msg) + if scopeErr != nil { + slog.Error("list valid scopes", "error", scopeErr) + return scopeErr + } + slog.Info("hint: valid scopes in commit message", "scopes", validScopes) return err } if err := setupSlog(conf.LogPath); err != nil { // after conf is loaded