luasnip.lua 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. local M = {}
  2. local utils = require "lvim.utils"
  3. local paths = {}
  4. vim.api.nvim_create_autocmd("User", {
  5. pattern = "LuasnipPreExpand",
  6. callback = function()
  7. local snippet = require("luasnip").session.event_node
  8. local dscr = snippet.dscr[1]
  9. local docstring = snippet.docstring[1]
  10. if string.find(dscr, "lvim") and docstring == "" then
  11. M.gen_setup_snip(dscr)
  12. end
  13. end,
  14. })
  15. function M.init_empty_setup_snips()
  16. local ls = require "luasnip"
  17. for i, _ in pairs(lvim.builtin) do
  18. local lua_snippet = { ls.parser.parse_snippet("lvim.builtin." .. i, "") }
  19. ls.add_snippets("lua", lua_snippet, { key = "lvim.builtin." .. i })
  20. end
  21. end
  22. function M.gen_setup_snip(structure_str)
  23. local ls = require "luasnip"
  24. local structure_split = vim.split(structure_str, "%.")
  25. local structure = lvim.builtin[structure_split[3]]
  26. local lua_snippet =
  27. ls.parser.parse_snippet(structure_str, utils.r_inspect_settings(structure, structure_str, 10000, "."))
  28. ls.add_snippets("lua", { lua_snippet }, { key = structure_str })
  29. end
  30. function M.setup()
  31. if lvim.builtin.luasnip.sources.friendly_snippets then
  32. paths[#paths + 1] = utils.join_paths(get_runtime_dir(), "site", "pack", "lazy", "opt", "friendly-snippets")
  33. end
  34. local user_snippets = utils.join_paths(get_config_dir(), "snippets")
  35. if utils.is_directory(user_snippets) then
  36. paths[#paths + 1] = user_snippets
  37. end
  38. require("luasnip.loaders.from_lua").lazy_load()
  39. require("luasnip.loaders.from_vscode").lazy_load {
  40. paths = paths,
  41. }
  42. require("luasnip.loaders.from_snipmate").lazy_load()
  43. M.init_empty_setup_snips()
  44. end
  45. return M