github.com/soypat/gitaligned@v0.3.4-0.20221228122414-e435aab44fbc/io.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io" 7 8 "github.com/jdkato/prose/v2" 9 ) 10 11 // WriteCommitAlignments writes human readable commits with their alignment 12 func WriteCommitAlignments(w io.Writer, commits []commit) error { 13 for i := range commits { 14 _, err := w.Write([]byte(fmt.Sprintf("Commit %v\n%+0.3g\n\t%v\n\n", 15 commits[i].alignment.Format(), commits[i].alignment, commits[i].Message))) 16 if err != nil { 17 return err 18 } 19 } 20 return nil 21 } 22 23 // WriteAuthorAlignmentsJSON writes JSON encoded aligmnents to output 24 func WriteAuthorAlignmentsJSON(w io.Writer, authors []author) error { 25 e := json.NewEncoder(w) 26 return e.Encode(authors) 27 } 28 29 // WriteAuthorAlignments writes human readable author alignments 30 func WriteAuthorAlignments(w io.Writer, authors []author) error { 31 for i := range authors { 32 _, err := w.Write([]byte(fmt.Sprintf("%v", authors[i].Stats()))) 33 if err != nil { 34 return err 35 } 36 if i != len(authors)-1 { 37 _, err = w.Write([]byte("\n")) 38 if err != nil { 39 return err 40 } 41 } 42 } 43 return nil 44 } 45 46 // WriteNLPTags writes commits and natural language tags corresponding for each word 47 func WriteNLPTags(w io.Writer, commits []commit) (err error) { 48 return walkCommits(commits, writeNLP(w)) 49 } 50 51 func writeNLP(w io.Writer) func(*commit, []prose.Token) { 52 return func(c *commit, tokens []prose.Token) { 53 for i := range tokens { 54 w.Write([]byte(tokens[i].Text + " ")) 55 } 56 w.Write([]byte("\n")) 57 for cursor := range tokens { 58 taglen := len(tokens[cursor].Tag) + 1 59 txtlen := len(tokens[cursor].Text) + 1 60 tag := tokens[cursor].Tag + spaces(max(0, txtlen-taglen)) 61 w.Write([]byte(tag + " ")) 62 // fmt.Print(tag, " ") 63 } 64 w.Write([]byte("\n")) 65 } 66 }