queries.go 873 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package highlight
  2. import (
  3. "embed"
  4. "fmt"
  5. "path/filepath"
  6. "strings"
  7. )
  8. //go:embed queries/*.scm
  9. var QueryFS embed.FS
  10. func GetQuery(lang string) ([]byte, error) {
  11. path := fmt.Sprintf("queries/%s.scm", lang)
  12. data, err := QueryFS.ReadFile(path)
  13. if err != nil {
  14. return nil, fmt.Errorf("no highlight query found for language %q: %w", lang, err)
  15. }
  16. return data, nil
  17. }
  18. func DetectLanguage(filePath string) string {
  19. ext := strings.ToLower(filepath.Ext(filePath))
  20. switch ext { // TODO: set this in configuration
  21. case ".go":
  22. return "go"
  23. case ".py":
  24. return "python"
  25. case ".rs":
  26. return "rust"
  27. case ".js", ".jsx":
  28. return "javascript"
  29. case ".ts", ".tsx":
  30. return "typescript"
  31. case ".c", ".h":
  32. return "c"
  33. case ".cpp", ".hpp", ".cc":
  34. return "cpp"
  35. case ".json":
  36. return "json"
  37. case ".lua":
  38. return "lua"
  39. default:
  40. return "" // Unknown/Plaintext
  41. }
  42. }