diff --git a/hatmill.go b/hatmill.go
index a80e0f7..e1afa08 100644
--- a/hatmill.go
+++ b/hatmill.go
@@ -1,6 +1,5 @@
package hatmill
-
//go:generate go run internal/codegen/codegen.go -input defs.json -elemfile element/generated.go -elempkg element -attribfile attribute/generated.go -attribpkg attribute
import "io"
diff --git a/hatmill_test.go b/hatmill_test.go
index 598ba20..f18e605 100644
--- a/hatmill_test.go
+++ b/hatmill_test.go
@@ -179,9 +179,9 @@ func TestParentElement(t *testing.T) {
}
func Example() {
- userInput := ""
+ userInput := ""
- document := he.Html()(
+ document := he.Html()(
he.Head()(
he.Meta(ha.HttpEquiv("refresh"), ha.Content("5")),
),
@@ -194,5 +194,5 @@ func Example() {
),
)
hatmill.WriteDocument(os.Stdout, document)
- // Output:
<script>launchMissiles();</script>
+ // Output: <script>launchMissiles();</script>
}
diff --git a/internal/codegen/codegen.go b/internal/codegen/codegen.go
index 7f7400b..c4161fa 100644
--- a/internal/codegen/codegen.go
+++ b/internal/codegen/codegen.go
@@ -2,8 +2,8 @@ package main
import (
"bytes"
- "encoding/json"
- "flag"
+ "encoding/json"
+ "flag"
"fmt"
"go/format"
"io/ioutil"
@@ -28,44 +28,44 @@ func identifier(s string) string {
}
func fileHeader(packageName string) string {
- return fmt.Sprintf(headerFmt, packageName)
+ return fmt.Sprintf(headerFmt, packageName)
}
type AttribType int
const (
- String AttribType = iota
- Bool
+ String AttribType = iota
+ Bool
)
func (t *AttribType) UnmarshalJSON(data []byte) error {
- if string(data) == "null" {
- return nil
- }
+ if string(data) == "null" {
+ return nil
+ }
- var typeName string
- err := json.Unmarshal(data, &typeName)
- if err != nil {
- return fmt.Errorf("type property must be a string")
- }
- switch typeName {
- case "bool":
- *t = Bool
- case "string":
- *t = String
- default:
- return fmt.Errorf("unrecognized attribute type %s", typeName)
- }
- return nil
+ var typeName string
+ err := json.Unmarshal(data, &typeName)
+ if err != nil {
+ return fmt.Errorf("type property must be a string")
+ }
+ switch typeName {
+ case "bool":
+ *t = Bool
+ case "string":
+ *t = String
+ default:
+ return fmt.Errorf("unrecognized attribute type %s", typeName)
+ }
+ return nil
}
type AttribDef struct {
- Name string `json:"name"`
- Type AttribType `json:"type"`
+ Name string `json:"name"`
+ Type AttribType `json:"type"`
}
func (def AttribDef) Generate() string {
- const (
+ const (
boolType = "bool"
stringType = "string"
@@ -86,27 +86,27 @@ func (def AttribDef) Generate() string {
`
)
- var template string
- switch def.Type {
- case Bool:
- template = boolTemplate
- case String:
- template = stringTemplate
- default:
- panic(fmt.Errorf("unknown attribute type: %v", def.Type))
- }
+ var template string
+ switch def.Type {
+ case Bool:
+ template = boolTemplate
+ case String:
+ template = stringTemplate
+ default:
+ panic(fmt.Errorf("unknown attribute type: %v", def.Type))
+ }
- return fmt.Sprintf(template, identifier(def.Name), def.Name)
+ return fmt.Sprintf(template, identifier(def.Name), def.Name)
}
type ElemDef struct {
- Name string `json:"name"`
- Void bool `json:"void"`
+ Name string `json:"name"`
+ Void bool `json:"void"`
}
func (def ElemDef) Generate() string {
- const (
- parentTemplate = `// %[1]s creates a <%[2]s> element.
+ const (
+ parentTemplate = `// %[1]s creates a <%[2]s> element.
func %[1]s(attribs ...hatmill.Attrib) func(children ...hatmill.Term) hatmill.ParentElement {
return func(children ...hatmill.Term) hatmill.ParentElement {
return hatmill.ParentElement{
@@ -119,7 +119,7 @@ func (def ElemDef) Generate() string {
}
}
`
- voidTemplate = `// %[1]s creates a <%[2]s> element.
+ voidTemplate = `// %[1]s creates a <%[2]s> element.
func %[1]s(attribs ...hatmill.Attrib) hatmill.VoidElement {
return hatmill.VoidElement{
TagName: "%[2]s",
@@ -127,18 +127,18 @@ func (def ElemDef) Generate() string {
}
}
`
- )
+ )
- template := parentTemplate
- if def.Void {
- template = voidTemplate
- }
- return fmt.Sprintf(template, identifier(def.Name), def.Name)
+ template := parentTemplate
+ if def.Void {
+ template = voidTemplate
+ }
+ return fmt.Sprintf(template, identifier(def.Name), def.Name)
}
type Defs struct {
- Attributes []AttribDef `json:"attributes"`
- Elements []ElemDef `json:"elements"`
+ Attributes []AttribDef `json:"attributes"`
+ Elements []ElemDef `json:"elements"`
}
func writeFormatted(fileName, packageName string, writeDefs func(*bytes.Buffer)) error {
@@ -153,28 +153,28 @@ func writeFormatted(fileName, packageName string, writeDefs func(*bytes.Buffer))
}
func main() {
- inputPath := flag.String("input", "", "JSON input file")
+ inputPath := flag.String("input", "", "JSON input file")
elemPath := flag.String("elemfile", "", "generated element .go file")
elemPkg := flag.String("elempkg", "", "generated element package name")
attribPath := flag.String("attribfile", "", "generated attribute .go file")
attribPkg := flag.String("attribpkg", "", "generated attribute package name")
- flag.Parse()
+ flag.Parse()
- input, err := ioutil.ReadFile(*inputPath)
- if err != nil {
- log.Fatal(err)
- }
+ input, err := ioutil.ReadFile(*inputPath)
+ if err != nil {
+ log.Fatal(err)
+ }
- var defs Defs
- err = json.Unmarshal(input, &defs)
- if err != nil {
- log.Fatal(err)
- }
+ var defs Defs
+ err = json.Unmarshal(input, &defs)
+ if err != nil {
+ log.Fatal(err)
+ }
err = writeFormatted(*attribPath, *attribPkg, func(buf *bytes.Buffer) {
for _, attribDef := range defs.Attributes {
- buf.WriteString(attribDef.Generate())
- }
+ buf.WriteString(attribDef.Generate())
+ }
})
if err != nil {
log.Fatal(err)
@@ -182,8 +182,8 @@ func main() {
err = writeFormatted(*elemPath, *elemPkg, func(buf *bytes.Buffer) {
for _, elemDef := range defs.Elements {
- buf.WriteString(elemDef.Generate())
- }
+ buf.WriteString(elemDef.Generate())
+ }
})
if err != nil {
log.Fatal(err)