syntaxcheck.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "strings"
  6. "github.com/OliveTin/OliveTin/internal/config"
  7. "github.com/OliveTin/OliveTin/internal/configissues"
  8. "github.com/OliveTin/OliveTin/internal/executor"
  9. )
  10. func runSyntaxCheck() {
  11. printSyntaxCheckSearchResults()
  12. printLoadedConfigFiles()
  13. if syntaxCheckLoadError != nil {
  14. fmt.Printf("Configuration load failed: %v\n", syntaxCheckLoadError)
  15. fmt.Println("0 configuration issues found")
  16. os.Exit(1)
  17. }
  18. executor.DefaultExecutor(cfg).RebuildActionMap()
  19. printConfigIssues(configissues.List())
  20. issueCount := configissues.Count()
  21. fmt.Printf("%d configuration issues found\n", issueCount)
  22. if issueCount > 0 {
  23. os.Exit(1)
  24. }
  25. os.Exit(0)
  26. }
  27. func printSyntaxCheckSearchResults() {
  28. for _, line := range syntaxCheckSearchResults {
  29. fmt.Println(line)
  30. }
  31. }
  32. func printLoadedConfigFiles() {
  33. files := config.LoadedSources()
  34. if len(files) == 0 {
  35. fmt.Println("No config files were read")
  36. return
  37. }
  38. fmt.Println("Config files read:")
  39. for _, path := range files {
  40. fmt.Printf(" %s\n", path)
  41. }
  42. }
  43. func printConfigIssues(issues []configissues.Issue) {
  44. if len(issues) == 0 {
  45. return
  46. }
  47. fmt.Println("Configuration issues:")
  48. for _, issue := range issues {
  49. fmt.Printf(" %s\n", formatConfigIssue(issue))
  50. }
  51. }
  52. func formatConfigIssue(issue configissues.Issue) string {
  53. parts := []string{issue.Severity, issue.Code}
  54. if issue.ConfigFile != "" {
  55. parts = append(parts, "file="+issue.ConfigFile)
  56. }
  57. if issue.ActionTitle != "" {
  58. parts = append(parts, "action="+issue.ActionTitle)
  59. }
  60. if issue.ArgumentName != "" {
  61. parts = append(parts, "argument="+issue.ArgumentName)
  62. }
  63. return strings.Join(parts, " ") + ": " + issue.Message
  64. }