luasnip.lua 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. local snip_docstring = M.gen_setup_snip(dscr)
  12. local docstring_lines = vim.split(snip_docstring, "\n")
  13. vim.api.nvim_put(docstring_lines, "c", true, true)
  14. end
  15. end,
  16. })
  17. function M.init_empty_setup_snips()
  18. local ls = require "luasnip"
  19. for i, _ in pairs(lvim.builtin) do
  20. local lua_snippet = { ls.parser.parse_snippet("lvim.builtin." .. i, "") }
  21. ls.add_snippets("lua", lua_snippet, { key = "lvim.builtin." .. i })
  22. end
  23. end
  24. function M.gen_setup_snip(structure_str)
  25. local ls = require "luasnip"
  26. local structure_split = vim.split(structure_str, "%.")
  27. local structure = lvim.builtin[structure_split[3]]
  28. local result = utils.r_inspect_settings(structure, structure_str, 10000, ".")
  29. local lua_snippet = ls.parser.parse_snippet(structure_str, result)
  30. ls.add_snippets("lua", { lua_snippet }, { key = structure_str })
  31. return result
  32. end
  33. function M.setup()
  34. if lvim.builtin.luasnip.sources.friendly_snippets then
  35. paths[#paths + 1] = utils.join_paths(get_runtime_dir(), "site", "pack", "lazy", "opt", "friendly-snippets")
  36. end
  37. local user_snippets = utils.join_paths(get_config_dir(), "snippets")
  38. if utils.is_directory(user_snippets) then
  39. paths[#paths + 1] = user_snippets
  40. end
  41. require("luasnip.loaders.from_lua").lazy_load()
  42. require("luasnip.loaders.from_vscode").lazy_load {
  43. paths = paths,
  44. }
  45. require("luasnip.loaders.from_snipmate").lazy_load()
  46. M.init_empty_setup_snips()
  47. end
  48. return M