mirror of
https://codeberg.org/leana8959/.files.git
synced 2025-12-06 06:39:14 +00:00
nvim/cmp: load snippets per filetype
This commit is contained in:
parent
b6522ffbba
commit
14bfbece87
4 changed files with 50 additions and 111 deletions
|
|
@ -1 +1,17 @@
|
|||
vim.bo.expandtab = false
|
||||
|
||||
do
|
||||
local luasnip = require("luasnip")
|
||||
local s = luasnip.snippet
|
||||
local t = luasnip.text_node
|
||||
local cr = function() return t { "", "" } end
|
||||
local i = luasnip.insert_node
|
||||
|
||||
luasnip.add_snippets("go", {
|
||||
s("ie", {
|
||||
t("if err != nil {"), cr(),
|
||||
t("\t"), i(0), cr(),
|
||||
t("}"),
|
||||
}),
|
||||
})
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,3 +3,7 @@ opts.matchit_let_in()
|
|||
|
||||
vim.bo.shiftwidth = 2
|
||||
vim.bo.expandtab = true
|
||||
|
||||
local luasnip = require("luasnip")
|
||||
local haskell_snippets = require("haskell-snippets").all
|
||||
luasnip.add_snippets("haskell", haskell_snippets, { key = "haskell" })
|
||||
|
|
|
|||
|
|
@ -7,3 +7,30 @@ vim.keymap.set("n", "<leader>f", function()
|
|||
vim.cmd([[silent exec "%!typstyle -c 100"]])
|
||||
vim.fn.winrestview(saved)
|
||||
end, { desc = "ft(typst): Format with typstyle" })
|
||||
|
||||
do
|
||||
local luasnip = require("luasnip")
|
||||
local s = luasnip.snippet
|
||||
local t = luasnip.text_node
|
||||
local cr = function() return t { "", "" } end
|
||||
local i = luasnip.insert_node
|
||||
local f = luasnip.function_node
|
||||
|
||||
local function show_date_typst_entry() return os.date('"%Y-%m-%d %H:%M:%S"') end
|
||||
luasnip.add_snippets("typst", {
|
||||
s("entry", {
|
||||
t("#entry("),
|
||||
f(show_date_typst_entry),
|
||||
t { ")[", "" },
|
||||
t(" "),
|
||||
i(0),
|
||||
t { "", "]" },
|
||||
}),
|
||||
s("lang", {
|
||||
t('#set text(lang: "'),
|
||||
i(0),
|
||||
t('")'),
|
||||
cr(),
|
||||
}),
|
||||
})
|
||||
end
|
||||
|
|
|
|||
|
|
@ -28,132 +28,24 @@ local has_words_before = function()
|
|||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
||||
end
|
||||
|
||||
-----------------
|
||||
-- Lazy loader --
|
||||
-----------------
|
||||
require("luasnip.loaders.from_vscode").lazy_load { paths = { "./snippets" } }
|
||||
|
||||
----------
|
||||
-- Init --
|
||||
----------
|
||||
luasnip.setup { update_events = { "TextChanged", "TextChangedI" } }
|
||||
|
||||
-----------
|
||||
-- Typst --
|
||||
-----------
|
||||
local function show_date_typst_entry() return os.date('"%Y-%m-%d %H:%M:%S"') end
|
||||
luasnip.add_snippets("typst", {
|
||||
s("entry", {
|
||||
t("#entry("),
|
||||
f(show_date_typst_entry),
|
||||
t { ")[", "" },
|
||||
t(" "),
|
||||
i(0),
|
||||
t { "", "]" },
|
||||
}),
|
||||
s("lang", {
|
||||
t('#set text(lang: "'),
|
||||
i(0),
|
||||
t('")'),
|
||||
cr(),
|
||||
}),
|
||||
})
|
||||
|
||||
local function get_cms()
|
||||
assert(vim.bo.commentstring ~= "", "comment string is not set")
|
||||
local left = vim.bo.commentstring:gsub("%s*%%s.*", "")
|
||||
local right = vim.bo.commentstring:gsub(".*%%s%s*", "")
|
||||
if right == "" then
|
||||
right = left
|
||||
end
|
||||
return { left = left, right = right }
|
||||
end
|
||||
local function horizon(args)
|
||||
local cms = get_cms()
|
||||
local chr = cms.left:sub(-1)
|
||||
local len = vim.fn.strdisplaywidth(args[1][1])
|
||||
|
||||
local acc = cms.left
|
||||
for _ = cms.left:len(), len + cms.right:len() + 1, 1 do
|
||||
acc = acc .. chr
|
||||
end
|
||||
acc = acc .. cms.right
|
||||
|
||||
return acc
|
||||
end
|
||||
local function left()
|
||||
local cms = get_cms()
|
||||
return cms.left .. " "
|
||||
end
|
||||
local function right()
|
||||
local cms = get_cms()
|
||||
return " " .. cms.right
|
||||
end
|
||||
|
||||
-- stylua: ignore start
|
||||
luasnip.add_snippets("all", {
|
||||
s("banner", {
|
||||
f(horizon, { 1 }), cr(),
|
||||
f(left), i(1), f(right), cr(),
|
||||
f(horizon, { 1 }),
|
||||
}),
|
||||
})
|
||||
-- stylua: ignore end
|
||||
|
||||
-------------
|
||||
-- Haskell --
|
||||
-------------
|
||||
local haskell_snippets = require("haskell-snippets").all
|
||||
luasnip.add_snippets("haskell", haskell_snippets, { key = "haskell" })
|
||||
|
||||
------------
|
||||
-- Golang --
|
||||
------------
|
||||
-- stylua: ignore start
|
||||
luasnip.add_snippets("go", {
|
||||
s("ie", {
|
||||
t("if err != nil {"), cr(),
|
||||
t("\t"), i(0), cr(),
|
||||
t("}"),
|
||||
}),
|
||||
})
|
||||
-- stylua: ignore end
|
||||
|
||||
---------------
|
||||
-- Setup CMP --
|
||||
---------------
|
||||
local of_filetype = function(fts)
|
||||
local ft = vim.bo.filetype
|
||||
for _, v in ipairs(fts) do
|
||||
if v == ft then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
cmp.setup {
|
||||
snippet = {
|
||||
expand = function(args) luasnip.lsp_expand(args.body) end,
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert(),
|
||||
-- TODO: how can I make some take precedence of others?
|
||||
sources = {
|
||||
{ name = "luasnip" },
|
||||
{ name = "nvim_lsp" },
|
||||
{ name = "path" },
|
||||
{
|
||||
name = "buffer",
|
||||
keyword_length = 10,
|
||||
option = {
|
||||
enable_in_context = function() return of_filetype { "tex", "markdown", "typst" } end,
|
||||
},
|
||||
},
|
||||
{ name = "buffer" },
|
||||
{
|
||||
name = "spell",
|
||||
keyword_length = 10,
|
||||
keyword_length = 10, -- PERF:
|
||||
option = {
|
||||
keep_all_entries = true,
|
||||
enable_in_context = function() return of_filetype { "tex", "markdown", "typst" } end,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue