1
0

syntax.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package extension
  2. import (
  3. lua "github.com/yuin/gopher-lua"
  4. "moose/internal/extension/highlight"
  5. )
  6. func GetSyntaxTable(em *ExtensionManager) *lua.LTable {
  7. syntax := em.L.NewTable()
  8. em.L.SetFuncs(syntax, map[string]lua.LGFunction{
  9. "registerLang": luaRegisterLanguage,
  10. })
  11. return syntax
  12. }
  13. func luaRegisterLanguage(L *lua.LState) int {
  14. idx := 1
  15. if L.GetTop() >= 2 && L.Get(1).Type() == lua.LTTable {
  16. tb1 := L.ToTable(1)
  17. if tb1.RawGetString("name") == lua.LNil {
  18. idx = 2
  19. }
  20. }
  21. tb := L.CheckTable(idx)
  22. langName := tb.RawGetString("name").String()
  23. parserPath := tb.RawGetString("parser_path").String()
  24. queryScm := tb.RawGetString("query").String()
  25. if langName == "" || langName == "nil" || parserPath == "" || parserPath == "nil" {
  26. L.ArgError(idx, "expected table with 'name' and 'parser_path' fields")
  27. return 0
  28. }
  29. err := highlight.RegisterTreeSitterLang(langName, parserPath, queryScm)
  30. if err != nil {
  31. L.RaiseError("failed to register language %s: %v", langName, err)
  32. return 0
  33. }
  34. return 0
  35. }