fix: nil-close bug, stale docs, dead code, and tracked binaries
All checks were successful
CI / Build and Test (push) Successful in 38s
CI / Build and Test (pull_request) Successful in 33s

- Fix potential nil file.Close() panic in devModePersist/devModeRemovePersisted
  by extracting loadDevModeMap/saveDevModeMap helpers with proper defer
- Remove tracked binaries (pathparams 10.8 MB, shake.db 22 MB) and consolidate
  .gitignore with a wildcard pattern covering all 19 examples
- Remove stale reaper reference in README (removed in dc56261), update example
  count from 14 to 19, fix OnChange debounce claim in docs
- Fix typos: "percist"→"persist", "percisted"→"persisted", "tmplates"→"templates"
- Remove dead code: commented import in signal_test.go, unnecessary fmt.Sprintf
  in computed.go, commented picocss imports and no-op Config calls in examples
- Replace go fmt with gofmt -l check in ci-check.sh to fail on unformatted code
  instead of silently reformatting
This commit is contained in:
Ryan Hamamura
2026-02-20 09:58:46 -10:00
parent f833498b65
commit 50e368f47b
15 changed files with 44 additions and 81 deletions

65
via.go
View File

@@ -439,36 +439,39 @@ func (v *V) ensureDatastarHandler() {
})
}
func loadDevModeMap(path string) map[string]string {
m := make(map[string]string)
file, err := os.Open(path)
if err != nil {
return m
}
defer file.Close()
json.NewDecoder(file).Decode(&m)
return m
}
func saveDevModeMap(path string, m map[string]string) error {
file, err := os.Create(path)
if err != nil {
return err
}
defer file.Close()
return json.NewEncoder(file).Encode(m)
}
func (v *V) devModePersist(c *Context) {
p := filepath.Join(".via", "devmode", "ctx.json")
if err := os.MkdirAll(filepath.Dir(p), 0755); err != nil {
v.logFatal("failed to create directory for devmode files: %v", err)
}
// load persisted list from file, or empty list if file not found
file, err := os.Open(p)
ctxRegMap := make(map[string]string)
if err == nil {
json.NewDecoder(file).Decode(&ctxRegMap)
}
file.Close()
// add ctx to persisted list
ctxRegMap := loadDevModeMap(p)
if _, ok := ctxRegMap[c.id]; !ok {
ctxRegMap[c.id] = c.route
}
// write persisted list to file
file, err = os.Create(p)
if err != nil {
v.logErr(c, "devmode failed to percist ctx: %v", err)
}
defer file.Close()
encoder := json.NewEncoder(file)
if err := encoder.Encode(ctxRegMap); err != nil {
v.logErr(c, "devmode failed to persist ctx")
if err := saveDevModeMap(p, ctxRegMap); err != nil {
v.logErr(c, "devmode failed to persist ctx: %v", err)
}
v.logDebug(c, "devmode persisted ctx to file")
}
@@ -476,27 +479,11 @@ func (v *V) devModePersist(c *Context) {
func (v *V) devModeRemovePersisted(c *Context) {
p := filepath.Join(".via", "devmode", "ctx.json")
// load persisted list from file, or empty list if file not found
file, err := os.Open(p)
ctxRegMap := make(map[string]string)
if err == nil {
json.NewDecoder(file).Decode(&ctxRegMap)
}
file.Close()
ctxRegMap := loadDevModeMap(p)
delete(ctxRegMap, c.id)
// write persisted list to file
file, err = os.Create(p)
if err != nil {
v.logErr(c, "devmode failed to remove percisted ctx: %v", err)
}
defer file.Close()
encoder := json.NewEncoder(file)
if err := encoder.Encode(ctxRegMap); err != nil {
v.logErr(c, "devmode failed to remove persisted ctx")
if err := saveDevModeMap(p, ctxRegMap); err != nil {
v.logErr(c, "devmode failed to remove persisted ctx: %v", err)
}
v.logDebug(c, "devmode removed persisted ctx from file")
}