feat: add usage key in params and improve messages

This commit is contained in:
Justin Lin committed 2025-07-25 11:34:12 +10:00
1 parent 96f526ac99
commit 8f764548b9
4 files changed
+35 -13

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
*.md
mdsh
+23 -10
View File
@@ -1,32 +1,45 @@
--- ---
output: "reports_{{.from}}.md" output: "reports_{{.b}}.md"
params: params:
from: b:
required: true required: true
to: usage: |
Required.
The begin time of report.
Examples:
2025
2025-07
2025-07-15
Jul
e:
required: true required: true
file: usage: |
Required.
The end time of report.
Same format as -b
f:
default: ~/.hledger.journal default: ~/.hledger.journal
usage: The ledger file to parse
--- ---
# Finance Report from {{.from}} to {{.to}} # Finance Report from {{.b}} to {{.e}}
## Previous status: ## Previous status:
{{ sh "hledger -f $file balancesheet -e $from" }} {{ sh "hledger -f $f balancesheet -e $b" }}
## Expenses: ## Expenses:
### Expense Summary by Category ### Expense Summary by Category
{{ sh "hledger -f $file bal expenses -b $from -e $to --depth 3 --sort amount" }} {{ sh "hledger -f $f bal expenses -b $b -e $e --depth 3 --sort amount" }}
{{ sh "hledger -f $file bal expenses -b $from -e $to --depth 2 --sort amount" }} {{ sh "hledger -f $f bal expenses -b $b -e $e --depth 2 --sort amount" }}
## Net Income: ## Net Income:
{{sh "hledger -f $file income -b $from -e $to --monthly"}} {{sh "hledger -f $f income -b $b -e $e --monthly"}}
## Ending balance: ## Ending balance:
{{sh "hledger -f $file balancesheet -e $to"}} {{sh "hledger -f $f balancesheet -e $e"}}
+9 -3
View File
@@ -1,6 +1,7 @@
package main package main
import ( import (
"errors"
"flag" "flag"
"fmt" "fmt"
"os" "os"
@@ -10,16 +11,21 @@ func parseParams(meta TemplateMeta) (ctx TemplateContext, err error) {
result := make(map[string]*string) result := make(map[string]*string)
fs := flag.NewFlagSet("params", flag.ExitOnError) fs := flag.NewFlagSet("params", flag.ExitOnError)
for key, spec := range meta.Params { for key, spec := range meta.Params {
result[key] = fs.String(key, spec.Default, key) result[key] = fs.String(key, spec.Default, spec.Usage)
} }
fs.Parse(os.Args[2:]) fs.Parse(os.Args[2:])
ctx = make(TemplateContext) ctx = make(TemplateContext)
message := ""
for key, spec := range meta.Params { for key, spec := range meta.Params {
if spec.Required && *result[key] == "" { if spec.Required && *result[key] == "" {
err = fmt.Errorf("parameter '%s' required but not provided", key) message += fmt.Sprintf("parameter '%s' required but not provided\n", key)
return continue
} }
ctx[key] = *result[key] ctx[key] = *result[key]
} }
if message != "" {
message += fmt.Sprintf("Use 'mdsh %s --help' to see usage", os.Args[1])
return nil, errors.New(message)
}
return return
} }
+1
View File
@@ -36,6 +36,7 @@ func (meta TemplateMeta) OutputFile(ctx TemplateContext) (output string, err err
type ParamSpec struct { type ParamSpec struct {
Required bool `yaml:"required"` Required bool `yaml:"required"`
Default string `yaml:"default"` Default string `yaml:"default"`
Usage string `yaml:"usage"`
} }
type TemplateContext map[string]string type TemplateContext map[string]string