main.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package main
  2. import (
  3. "log"
  4. "os"
  5. "path/filepath"
  6. "strings"
  7. )
  8. func main() {
  9. for _, goFile := range os.Args[1:] {
  10. bs, err := os.ReadFile(goFile)
  11. handleErr("read file:", err)
  12. var goLines, elvLines []string
  13. lines := strings.Split(string(bs), "\n")
  14. for i := 0; i < len(lines); i++ {
  15. if !strings.HasPrefix(lines[i], "//elvdoc:") {
  16. goLines = append(goLines, lines[i])
  17. continue
  18. }
  19. if len(elvLines) > 0 {
  20. elvLines = append(elvLines, "")
  21. }
  22. elvLines = append(elvLines, "#"+lines[i][2:])
  23. i++
  24. for i < len(lines) && strings.HasPrefix(lines[i], "//") {
  25. elvLines = append(elvLines, "#"+lines[i][2:])
  26. i++
  27. }
  28. i--
  29. }
  30. os.WriteFile(goFile, []byte(strings.Join(goLines, "\n")), 0o644)
  31. if len(elvLines) > 0 {
  32. elvFile := goFile[:len(goFile)-len(filepath.Ext(goFile))] + ".d.elv"
  33. elvLines = append(elvLines, "")
  34. os.WriteFile(elvFile, []byte(strings.Join(elvLines, "\n")), 0o644)
  35. }
  36. }
  37. }
  38. func handleErr(s string, err error) {
  39. if err != nil {
  40. log.Fatalln(s, err)
  41. }
  42. }