1. package main
    
  2. 
    
  3. import (
    
  4. 	"fmt"
    
  5. 	"io/ioutil"
    
  6. 	"os"
    
  7. 
    
  8. 	"github.com/alecthomas/chroma/v2/formatters"
    
  9. 	"github.com/alecthomas/chroma/v2/lexers"
    
  10. 	"github.com/alecthomas/chroma/v2/styles"
    
  11. 	"gopkg.in/alecthomas/kingpin.v3-unstable"
    
  12. )
    
  13. 
    
  14. var (
    
  15. 	filesArgs = kingpin.Arg("file", "Files to use to exercise lexers.").Required().ExistingFiles()
    
  16. )
    
  17. 
    
  18. func main() {
    
  19. 	kingpin.CommandLine.Help = "Exercise linters against a list of files."
    
  20. 	kingpin.Parse()
    
  21. 
    
  22. 	for _, file := range *filesArgs {
    
  23. 		lexer := lexers.Match(file)
    
  24. 		if lexer == nil {
    
  25. 			fmt.Printf("warning: could not find lexer for %q\n", file)
    
  26. 			continue
    
  27. 		}
    
  28. 		fmt.Printf("%s: ", file)
    
  29. 		os.Stdout.Sync()
    
  30. 		text, err := ioutil.ReadFile(file)
    
  31. 		kingpin.FatalIfError(err, "")
    
  32. 		it, err := lexer.Tokenise(nil, string(text))
    
  33. 		kingpin.FatalIfError(err, "%s failed to tokenise %q", lexer.Config().Name, file)
    
  34. 		err = formatters.NoOp.Format(ioutil.Discard, styles.SwapOff, it)
    
  35. 		kingpin.FatalIfError(err, "%s failed to format %q", lexer.Config().Name, file)
    
  36. 		fmt.Printf("ok\n")
    
  37. 	}
    
  38. }