gopkg.in/alecthomas/gometalinter.v3@v3.0.0/_linters/src/github.com/mibk/dupl/job/parse.go (about)

     1  package job
     2  
     3  import (
     4  	"log"
     5  
     6  	"github.com/mibk/dupl/syntax"
     7  	"github.com/mibk/dupl/syntax/golang"
     8  )
     9  
    10  func Parse(fchan chan string) chan []*syntax.Node {
    11  
    12  	// parse AST
    13  	achan := make(chan *syntax.Node)
    14  	go func() {
    15  		for file := range fchan {
    16  			ast, err := golang.Parse(file)
    17  			if err != nil {
    18  				log.Println(err)
    19  				continue
    20  			}
    21  			achan <- ast
    22  		}
    23  		close(achan)
    24  	}()
    25  
    26  	// serialize
    27  	schan := make(chan []*syntax.Node)
    28  	go func() {
    29  		for ast := range achan {
    30  			seq := syntax.Serialize(ast)
    31  			schan <- seq
    32  		}
    33  		close(schan)
    34  	}()
    35  	return schan
    36  }