diff options
Diffstat (limited to 'lua/core')
-rw-r--r-- | lua/core/color.lua | 26 | ||||
-rw-r--r-- | lua/core/init.lua | 41 | ||||
-rw-r--r-- | lua/core/lsp.lua | 84 | ||||
-rw-r--r-- | lua/core/lsp/functions.lua | 100 | ||||
-rw-r--r-- | lua/core/misc.lua | 35 | ||||
-rw-r--r-- | lua/core/snippets.lua (renamed from lua/core/snippets/shorthands.lua) | 4 | ||||
-rw-r--r-- | lua/core/snippets/functions.lua | 3 |
7 files changed, 155 insertions, 138 deletions
diff --git a/lua/core/color.lua b/lua/core/color.lua new file mode 100644 index 0000000..c4525f5 --- /dev/null +++ b/lua/core/color.lua @@ -0,0 +1,26 @@ +local M = {} + +--- copy highlight group +---@param hlgroup string highlight group to copy +---@param namespace? number highlight space +---@return table +function M.copyhl(hlgroup, namespace) + namespace = namespace or 0 + + local ok, hl = pcall(vim.api.nvim_get_hl, namespace, { + name = hlgroup, + create = false + }) + if not ok then + return {} + end + + for _, key in pairs({ "foreground", "background", "special" }) do + if hl[key] then + hl[key] = string.format("#%06x", hl[key]) + end + end + return hl +end + +return M diff --git a/lua/core/init.lua b/lua/core/init.lua new file mode 100644 index 0000000..f8d0c35 --- /dev/null +++ b/lua/core/init.lua @@ -0,0 +1,41 @@ +-- inspired by (and partially yoinked from): github.com/gonstoll/dotfiles + +local M = { + misc = require("core.misc"), + folding = require("core.folding"), + lsp = require("core.lsp"), + color = require("core.color"), + snippets = vim.fs.joinpath(vim.fn.stdpath("config"), "lua/core/snippets.lua"), +} + +--- check if the given table contains an item, and return the key value pair if +--- it does +---@param self table table +---@param item any item to find +---@return boolean, [any, any]? found true if found +table.contains = function(self, item) + for k, v in pairs(self) do + if v == item then + return true, { k, v } + end + end + + return false +end + +M.mason = { + --- Gets a path to a package in the Mason registry. + --- Prefer this to `get_package`, since the package might not always be + --- available yet and trigger errors. + ---@param pkg string + ---@param path? string + get_pkg_path = function(pkg, path) + pcall(require, "mason") -- make sure Mason is loaded. Will fail when generating docs + + local root = vim.env.MASON or vim.fs.joinpath(vim.fn.stdpath("data"), "mason") + path = path or "" + return vim.fs.joinpath(root, "packages", pkg, path) + end +} + +return M diff --git a/lua/core/lsp.lua b/lua/core/lsp.lua new file mode 100644 index 0000000..fd03a42 --- /dev/null +++ b/lua/core/lsp.lua @@ -0,0 +1,84 @@ +---@diagnostic disable: param-type-mismatch + +local misc = require("core.misc") +local map, auto = misc.map, misc.auto +local popup_opts, hover_opts, signature_opts, list_opts, location_opts + +-- TODO: find a way to make the qflist current item be the one closest to the +-- cursor whenever we open it +local function on_list(opts) + vim.fn.setqflist({}, "r", opts) + if #opts.items > 1 then + vim.cmd.copen() + end + vim.cmd(".cc! 1") +end + +-- disable the default keybinds (they're bad) +for _, bind in ipairs({ "grn", "gra", "gri", "grr" }) do + pcall(vim.keymap.del, "n", bind) +end + +local M = {} + +--- setup vim lsp options +function M.setup() + -- options for different lsp functions + popup_opts = { border = vim.g.border_style } + hover_opts = vim.tbl_deep_extend("force", popup_opts, {}) + signature_opts = vim.tbl_deep_extend("force", popup_opts, {}) + list_opts = { on_list = on_list } + location_opts = vim.tbl_deep_extend("force", list_opts, {}) + + -- confgiure lsp + vim.diagnostic.config { + virtual_text = false, + virtual_lines = { + current_line = true + }, + update_in_insert = false, + underline = true, + severity_sort = true, + signs = { + text = { + [vim.diagnostic.severity.ERROR] = "x", + [vim.diagnostic.severity.WARN] = "!", + [vim.diagnostic.severity.INFO] = "i", + [vim.diagnostic.severity.HINT] = "h" + } + } + } + + -- set default capabilities and attach function + vim.lsp.config['*'] = { + capabilities = vim.lsp.protocol.make_client_capabilities() + } + + -- make my attach function always run + auto("LspAttach", { + callback = function(event) + local opts = { buffer = event.buf, nowait = true } + + -- LSP actions + map("n", "K", function() vim.lsp.buf.hover(hover_opts) end, opts) + map("n", "gd", function() vim.lsp.buf.definition(location_opts) end, opts) + map("n", "gD", function() vim.lsp.buf.declaration(location_opts) end, opts) + map("n", "gi", function() vim.lsp.buf.implementation(location_opts) end, opts) + map("n", "gy", function() vim.lsp.buf.type_definition(location_opts) end, opts) + map("n", "gr", function() vim.lsp.buf.references(nil, list_opts) end, opts) + map("n", "<S-Tab>", function() vim.lsp.buf.signature_help(signature_opts) end, opts) + map("n", { "<leader>r", "<F2>" }, vim.lsp.buf.rename, opts) + map("n", { "gA", "<F4>" }, vim.lsp.buf.code_action, opts) + + -- Diagnostics + map("n", "[d", function() + vim.diagnostic.jump({ count = -1 }) + end, opts) + map("n", "]d", function() + vim.diagnostic.jump({ count = 1 }) + end, opts) + end + }) +end + +return M diff --git a/lua/core/lsp/functions.lua b/lua/core/lsp/functions.lua deleted file mode 100644 index 4591205..0000000 --- a/lua/core/lsp/functions.lua +++ /dev/null @@ -1,100 +0,0 @@ -local misc = require("core.misc") -local map, auto = misc.map, misc.auto - -local M = {} - --- TODO: find a way to make the qflist current item be the one closest to the --- cursor whenever we open it -local function on_list(opts) - vim.fn.setqflist({}, "r", opts) - if #opts.items > 1 then - vim.cmd.copen() - end - vim.cmd(".cc! 1") -end - ----@type vim.lsp.util.open_floating_preview.Opts -local popup_opts = { - border = vim.g.border_style -} ----@type vim.lsp.buf.hover.Opts ----@diagnostic disable-next-line: assign-type-mismatch -local hover_opts = vim.tbl_deep_extend("force", popup_opts, {}) - ----@type vim.lsp.buf.signature_help.Opts ----@diagnostic disable-next-line: assign-type-mismatch -local signature_opts = vim.tbl_deep_extend("force", popup_opts, {}) - ----@type vim.lsp.ListOpts -local list_opts = { - on_list = on_list -} - ----@type vim.lsp.LocationOpts ----@diagnostic disable-next-line: assign-type-mismatch -local location_opts = vim.tbl_deep_extend("force", list_opts, {}) - --- disable the default keybinds (they're bad) -for _, bind in ipairs({ "grn", "gra", "gri", "grr" }) do - pcall(vim.keymap.del, "n", bind) -end - ---- setup basic options on lsp attach ----@param bufnr number buffer number -local function attach(bufnr) - local opts = { buffer = bufnr, nowait = true } - - -- LSP actions - map("n", "K", function() vim.lsp.buf.hover(hover_opts) end, opts) - map("n", "gd", function() vim.lsp.buf.definition(location_opts) end, opts) - map("n", "gD", function() vim.lsp.buf.declaration(location_opts) end, opts) - map("n", "gi", function() vim.lsp.buf.implementation(location_opts) end, opts) - map("n", "gy", function() vim.lsp.buf.type_definition(location_opts) end, opts) - map("n", "gr", function() vim.lsp.buf.references(nil, list_opts) end, opts) - map("n", "<S-Tab>", function() vim.lsp.buf.signature_help(signature_opts) end, opts) - map("n", { "<leader>r", "<F2>" }, vim.lsp.buf.rename, opts) - map("n", { "gA", "<F4>" }, vim.lsp.buf.code_action, opts) - - -- Diagnostics - map("n", "[d", function() - vim.diagnostic.jump({ count = -1 }) - end, opts) - map("n", "]d", function() - vim.diagnostic.jump({ count = 1 }) - end, opts) -end - ---- setup vim lsp options -function M.setup() - vim.diagnostic.config { - virtual_text = false, - virtual_lines = { - current_line = true - }, - update_in_insert = false, - underline = true, - severity_sort = true, - signs = { - text = { - [vim.diagnostic.severity.ERROR] = "x", - [vim.diagnostic.severity.WARN] = "!", - [vim.diagnostic.severity.INFO] = "i", - [vim.diagnostic.severity.HINT] = "h" - } - } - } - - -- set default capabilities and attach function - vim.lsp.config['*'] = { - capabilities = vim.lsp.protocol.make_client_capabilities() - } - - -- make my attach function always run - auto("LspAttach", { - callback = function(event) - attach(event.buf) - end - }) -end - -return M diff --git a/lua/core/misc.lua b/lua/core/misc.lua index fab3258..24378b4 100644 --- a/lua/core/misc.lua +++ b/lua/core/misc.lua @@ -3,18 +3,6 @@ local M = {} --- vim.notify title M.appid = "Nvim Config" ---- safe version of require ----@param fn string name of file to include ----@return any -function M.include(fn) - local ok, r = pcall(require, fn) - if not ok then - vim.notify("Could not find '"..fn.."': "..r, vim.log.levels.WARN, { title = M.appid }) - return ok - end - return r -end - --- loop through files in directory ---@param path string absolute path of directory to be looped through ---@param body function function to use on every recursion of the loop @@ -99,29 +87,6 @@ function M.highlight(group, opts, namespace) end end ---- copy highlight group ----@param hlgroup string highlight group to copy ----@param namespace? number highlight space ----@return table -function M.cpyhl(hlgroup, namespace) - namespace = namespace or 0 - - local ok, hl = pcall(vim.api.nvim_get_hl, namespace, { - name = hlgroup, - create = false - }) - if not ok then - return {} - end - - for _, key in pairs({ "foreground", "background", "special" }) do - if hl[key] then - hl[key] = string.format("#%06x", hl[key]) - end - end - return hl -end - --- highlight something with some highlight group for a certain amount of time --- example: --- ```lua diff --git a/lua/core/snippets/shorthands.lua b/lua/core/snippets.lua index 4e6aa10..48dd54f 100644 --- a/lua/core/snippets/shorthands.lua +++ b/lua/core/snippets.lua @@ -21,3 +21,7 @@ conds_expand = require("luasnip.extras.conditions.expand") ts_postfix = require("luasnip.extras.treesitter_postfix").treesitter_postfix postfix = require("luasnip.extras.postfix").postfix ms = ls.multi_snippet + +function file_name(_, _, _) + return vim.fn.expand("%:t:r") +end diff --git a/lua/core/snippets/functions.lua b/lua/core/snippets/functions.lua deleted file mode 100644 index 24fc8a6..0000000 --- a/lua/core/snippets/functions.lua +++ /dev/null @@ -1,3 +0,0 @@ -function file_name(_, _, _) - return vim.fn.expand("%:t:r") -end |