opalmay 2 年之前
父節點
當前提交
211dac8745
共有 5 個文件被更改,包括 96 次插入38 次删除
  1. 0 12
      lua/lvim/config/init.lua
  2. 1 0
      lua/lvim/core/builtins/init.lua
  3. 58 0
      lua/lvim/core/luasnip/init.lua
  4. 36 0
      lua/lvim/core/luasnip/snippets.lua
  5. 1 26
      lua/lvim/plugins.lua

+ 0 - 12
lua/lvim/config/init.lua

@@ -29,18 +29,6 @@ function M:init()
   local lvim_lsp_config = require "lvim.lsp.config"
   lvim.lsp = vim.deepcopy(lvim_lsp_config)
 
-  lvim.builtin.luasnip = {
-    sources = {
-      friendly_snippets = true,
-    },
-    config = {
-      updateevents = "TextChanged,TextChangedI",
-      ext_opts = {
-        -- Will be populated within config function
-      },
-    },
-  }
-
   lvim.builtin.bigfile = {
     active = true,
     config = {},

+ 1 - 0
lua/lvim/core/builtins/init.lua

@@ -21,6 +21,7 @@ local builtins = {
   "lvim.core.lualine",
   "lvim.core.alpha",
   "lvim.core.mason",
+  "lvim.core.luasnip",
 }
 
 function M.config(config)

+ 58 - 0
lua/lvim/core/luasnip/init.lua

@@ -0,0 +1,58 @@
+local M = {}
+function M.config()
+  lvim.builtin.luasnip = {
+    sources = {
+      friendly_snippets = true,
+      lunarvim = true,
+    },
+    config = {
+      updateevents = "TextChanged,TextChangedI",
+      ext_opts = {
+        -- Will be populated within config function
+      },
+    },
+  }
+end
+
+function M.setup()
+  local utils = require "lvim.utils"
+  local paths = {}
+  if lvim.builtin.luasnip.sources.friendly_snippets then
+    paths[#paths + 1] = utils.join_paths(get_runtime_dir(), "site", "pack", "packer", "start", "friendly-snippets")
+  end
+  local user_snippets = utils.join_paths(get_config_dir(), "snippets")
+  if utils.is_directory(user_snippets) then
+    paths[#paths + 1] = user_snippets
+  end
+  -- When no paths are provided, luasnip will search in the runtimepath
+  require("luasnip.loaders.from_lua").lazy_load()
+  require("luasnip.loaders.from_vscode").lazy_load {
+    paths = paths,
+  }
+  require("luasnip.loaders.from_snipmate").lazy_load()
+
+  local luasnip = require "luasnip"
+  local types = require "luasnip.util.types"
+
+  local ext_opts = {
+    -- Show virtual text to signal when you are inside an sippets
+    [types.insertNode] = {
+      active = {
+        virt_text = { { "<-- snip insert", "BufferInactiveIndex" } },
+      },
+    },
+    -- Helps to notice when you are within a choice node
+    [types.choiceNode] = {
+      active = {
+        virt_text = { { "<-- choice", "BufferInactiveIndex" } },
+      },
+    },
+  }
+  -- Add lunarvim options giving preference to user ones
+  vim.tbl_deep_extend("keep", lvim.builtin.luasnip.config.ext_opts, ext_opts)
+  luasnip.config.set_config(lvim.builtin.luasnip.config)
+  if lvim.builtin.luasnip.sources.lunarvim then
+    luasnip.add_snippets("lua", require "lvim.core.luasnip.snippets")
+  end
+end
+return M

+ 36 - 0
lua/lvim/core/luasnip/snippets.lua

@@ -0,0 +1,36 @@
+---@diagnostic disable: unused-local for convenience is better to have all luasnip methods available
+-- About how to create snippets:
+-- https://github.com/L3MON4D3/LuaSnip/blob/master/DOC.md
+local ls = require "luasnip"
+local s = ls.snippet
+local sn = ls.snippet_node
+local isn = ls.indent_snippet_node
+local t = ls.text_node
+local i = ls.insert_node
+local f = ls.function_node
+local c = ls.choice_node
+local d = ls.dynamic_node
+local r = ls.restore_node
+local events = require "luasnip.util.events"
+local ai = require "luasnip.nodes.absolute_indexer"
+local fmt = require("luasnip.extras.fmt").fmt
+local extras = require "luasnip.extras"
+local m = extras.m
+local l = extras.l
+local dl = extras.dynamic_lambda
+local rep = extras.rep
+local postfix = require("luasnip.extras.postfix").postfix
+
+return {
+  s(
+    { trig = "preq", dscr = "Protected require call" },
+    fmt(
+      [[ 
+      local ok, {} = pcall(require,'{}') 
+      if not ok then
+        return
+      end]],
+      { i(1), dl(2, "lvim.core." .. l._1, 1) }
+    )
+  ),
+}

+ 1 - 26
lua/lvim/plugins.lua

@@ -76,32 +76,7 @@ local core_plugins = {
   {
     "L3MON4D3/LuaSnip",
     config = function()
-      local utils = require "lvim.utils"
-      local paths = {}
-      if lvim.builtin.luasnip.sources.friendly_snippets then
-        paths[#paths + 1] = utils.join_paths(get_runtime_dir(), "site", "pack", "lazy", "opt", "friendly-snippets")
-      end
-      local user_snippets = utils.join_paths(get_config_dir(), "snippets")
-      if utils.is_directory(user_snippets) then
-        paths[#paths + 1] = user_snippets
-      end
-      require("luasnip.loaders.from_lua").lazy_load()
-      require("luasnip.loaders.from_vscode").lazy_load {
-        paths = paths,
-      }
-      require("luasnip.loaders.from_snipmate").lazy_load()
-      local luasnip = require "luasnip"
-      local types = require "luasnip.util.types"
-
-      local ext_opts = {
-        [types.insertNode] = {
-          active = {
-            virt_text = { { "<-- snip insert", "BufferInactiveIndex" } },
-          },
-        },
-      }
-      vim.tbl_deep_extend(lvim.builtin.config.ext_opts, ext_opts)
-      luasnip.config.set_config(lvim.builtin.luasnip.config)
+      require("lvim.core.luasnip").setup()
     end,
     event = "InsertEnter",
     dependencies = {