syntaxcheck.go 1.7 KB

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