/script/regis-controller

http://github.com/sut-go/gon · #! · 71 lines · 62 code · 9 blank · 0 comment · 0 complexity · c50cc5cafcae1b8220cc950ad4f0b3ac MD5 · raw file

  1. package main
  2. import (
  3. // "os"
  4. "fmt"
  5. "flag"
  6. "go/ast"
  7. "go/parser"
  8. "go/token"
  9. //"go/printer"
  10. //"container/vector"
  11. )
  12. var c = map[string]string{}
  13. var a = map[string]string{}
  14. func parseFile(filename string) {
  15. var fset = token.NewFileSet()
  16. astf, error := parser.ParseFile(fset, filename, nil, 0)
  17. if error != nil {
  18. return
  19. }
  20. pname := astf.Name
  21. c[filename[0:len(filename)-3]] = pname.String()
  22. //fmt.Printf("%s\n", pname)
  23. for _, d:= range astf.Decls {
  24. if fd, ok:= d.(*ast.FuncDecl); ok {
  25. name := fd.Name.String()
  26. action := fmt.Sprintf("%s/%c%s", pname, 'a'+(name[0]-'A'),name[1:len(name)])
  27. a[action] = pname.String() + "." + name
  28. }
  29. }
  30. }
  31. func genInit() {
  32. fmt.Printf("package controller\n\n")
  33. fmt.Printf("import \"reflect\"\n")
  34. for k,_ := range c {
  35. fmt.Printf("import \"%s\"\n", k)
  36. }
  37. fmt.Printf(`
  38. var Controllers = map[string]*reflect.FuncValue{}
  39. func register(s string, c interface{}) {
  40. v := reflect.NewValue(c).(*reflect.FuncValue)
  41. Controllers[s] = v
  42. }
  43. func init() {
  44. `)
  45. for k,v := range a {
  46. fmt.Printf(" register(\"%s\", %s)\n", k, v)
  47. }
  48. fmt.Printf("}\n",)
  49. }
  50. func main() {
  51. flag.Parse()
  52. narg := flag.NArg()
  53. if narg != 1 {
  54. fmt.Printf("-\n")
  55. return
  56. }
  57. filename := flag.Arg(0)
  58. parseFile(filename)
  59. // fmt.Printf("%s\n", c)
  60. // fmt.Printf("%s\n", a)
  61. genInit()
  62. }