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  }