init.lua 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. local M = {}
  2. function M.config()
  3. lvim.builtin.luasnip = {
  4. sources = {
  5. friendly_snippets = true,
  6. lunarvim = true,
  7. },
  8. config = {
  9. history = false,
  10. updateevents = "TextChanged,TextChangedI",
  11. ext_opts = {
  12. -- Will be populated within config function
  13. },
  14. },
  15. }
  16. end
  17. function M.setup()
  18. local utils = require "lvim.utils"
  19. local paths = {}
  20. if lvim.builtin.luasnip.sources.friendly_snippets then
  21. paths[#paths + 1] = utils.join_paths(get_runtime_dir(), "site", "pack", "packer", "start", "friendly-snippets")
  22. end
  23. local user_snippets = utils.join_paths(get_config_dir(), "snippets")
  24. if utils.is_directory(user_snippets) then
  25. paths[#paths + 1] = user_snippets
  26. end
  27. -- When no paths are provided, luasnip will search in the runtimepath
  28. require("luasnip.loaders.from_lua").lazy_load()
  29. require("luasnip.loaders.from_vscode").lazy_load {
  30. paths = paths,
  31. }
  32. require("luasnip.loaders.from_snipmate").lazy_load()
  33. local luasnip = require "luasnip"
  34. local types = require "luasnip.util.types"
  35. local ext_opts = {
  36. -- Show virtual text to signal when you are inside an sippets
  37. [types.insertNode] = {
  38. active = {
  39. virt_text = { { "<-- snip insert", "BufferInactiveIndex" } },
  40. },
  41. },
  42. -- Helps to notice when you are within a choice node
  43. [types.choiceNode] = {
  44. active = {
  45. virt_text = { { "<-- choice", "BufferInactiveIndex" } },
  46. },
  47. },
  48. }
  49. -- Add lunarvim options giving preference to user ones
  50. lvim.builtin.luasnip.config.ext_opts = vim.tbl_deep_extend("keep", lvim.builtin.luasnip.config.ext_opts, ext_opts)
  51. luasnip.config.set_config(lvim.builtin.luasnip.config)
  52. if lvim.builtin.luasnip.sources.lunarvim then
  53. luasnip.add_snippets("lua", require "lvim.core.luasnip.snippets")
  54. end
  55. end
  56. return M