From 8912f25d49ddc03a9fdd9821462b5f66ba82e1b6 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Mon, 13 Nov 2023 21:53:35 -0600 Subject: fix(nvim): improve texlab config and cleanup utils --- nvim/.config/nvim/lua/plugins/conform.lua | 8 +++ nvim/.config/nvim/lua/plugins/nvim-lint.lua | 29 ++++------ nvim/.config/nvim/lua/tobyvin/lazy.lua | 7 ++- nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua | 2 +- nvim/.config/nvim/lua/tobyvin/lsp/configs.lua | 21 +------- nvim/.config/nvim/lua/tobyvin/utils.lua | 61 ++++++++++++++++++++++ nvim/.config/nvim/lua/tobyvin/utils/session.lua | 19 ++----- 7 files changed, 89 insertions(+), 58 deletions(-) diff --git a/nvim/.config/nvim/lua/plugins/conform.lua b/nvim/.config/nvim/lua/plugins/conform.lua index fc7eaf4..c75f458 100644 --- a/nvim/.config/nvim/lua/plugins/conform.lua +++ b/nvim/.config/nvim/lua/plugins/conform.lua @@ -13,6 +13,8 @@ local M = { html = { "prettier" }, htmldjango = { "djlint" }, ["jinja.html"] = { "djlint" }, + tex = { "latexindent" }, + plaintex = { "latexindent" }, markdown = { "prettier", "markdownlint", "cbfmt" }, python = { "black" }, sass = { "prettier" }, @@ -22,6 +24,12 @@ local M = { ["*"] = { "injected" }, }, formatters = { + latexindent = { + prepend_args = { + "-l", + ("%s/latexindent/indentconfig.yaml"):format(vim.env.XDG_CONFIG_HOME), + }, + }, prettier = { prepend_args = { "--prose-wrap", "always" }, }, diff --git a/nvim/.config/nvim/lua/plugins/nvim-lint.lua b/nvim/.config/nvim/lua/plugins/nvim-lint.lua index 6e2a64c..afcd006 100644 --- a/nvim/.config/nvim/lua/plugins/nvim-lint.lua +++ b/nvim/.config/nvim/lua/plugins/nvim-lint.lua @@ -1,13 +1,3 @@ -local function find_config(filename) - local config = unpack(vim.fs.find(filename, { - path = vim.api.nvim_buf_get_name(0), - upward = true, - })) or ("%s/%s/%s"):format(vim.env.XDG_CONFIG_HOME, vim.fs.basename(filename), filename) - if vim.fn.filereadable(config) == 1 then - return config - end -end - local function try_lint() local lint = require("lint") local names = lint._resolve_linter_by_ft(vim.bo.filetype) @@ -49,23 +39,26 @@ local M = { markdownlint = { prepend_args = { "--config", - function() - return find_config("markdownlint.yaml") - end, + ("%s/markdownlint/markdownlint.yaml"):format(vim.env.XDG_CONFIG_HOME), }, - condition = function() - return find_config("markdownlint.yaml") - end, }, selene = { prepend_args = { "--config", function() - return find_config("selene.toml") + return vim.fs.find("selene.toml", { + upward = true, + stop = vim.uv.os_homedir(), + path = vim.fs.dirname(vim.api.nvim_buf_get_name(0)), + })[1] end, }, condition = function() - return find_config("selene.toml") + return vim.fs.find("selene.toml", { + upward = true, + stop = vim.uv.os_homedir(), + path = vim.fs.dirname(vim.api.nvim_buf_get_name(0)), + })[1] end, }, }, diff --git a/nvim/.config/nvim/lua/tobyvin/lazy.lua b/nvim/.config/nvim/lua/tobyvin/lazy.lua index c3316e2..f270b8b 100644 --- a/nvim/.config/nvim/lua/tobyvin/lazy.lua +++ b/nvim/.config/nvim/lua/tobyvin/lazy.lua @@ -25,13 +25,12 @@ require("lazy").setup("plugins", { "tokyonight", }, }, - checker = { - enabled = true, - notify = false, - }, ui = { border = "single", }, + change_detection = { + notify = false, + }, performance = { rtp = { disabled_plugins = { diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua b/nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua index 3d2d765..b6d1465 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua @@ -43,7 +43,7 @@ local M = { end, { buffer = bufnr, desc = "implementation" }) end, ["textDocument/inlayHint"] = function(bufnr) - vim.lsp.inlay_hint(bufnr, true) + vim.lsp.inlay_hint.enable(bufnr, true) end, ["textDocument/references"] = function(bufnr) vim.keymap.set("n", "gr", function() diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/configs.lua b/nvim/.config/nvim/lua/tobyvin/lsp/configs.lua index 36aaef6..85ca8fc 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/configs.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp/configs.lua @@ -159,25 +159,8 @@ local M = { }, on_attach = function(_, bufnr) vim.b[bufnr].tex_flavor = "latex" - vim.wo.spell = true - - local preview_autocmd - local augroup = vim.api.nvim_create_augroup("texlab", {}) - - vim.api.nvim_create_user_command("TexlabPreview", function() - preview_autocmd = vim.api.nvim_create_autocmd("CursorMoved", { - group = augroup, - command = "TexlabForward", - }) - - vim.cmd.TexlabForward() - end, { desc = "Texlab preview start" }) - - vim.api.nvim_create_user_command("TexlabPreviewStop", function() - if preview_autocmd then - vim.api.nvim_del_autocmd(preview_autocmd) - end - end, { desc = "Texlab preview stop" }) + vim.wo[0][bufnr].spell = true + vim.keymap.set("n", "gx", vim.cmd.TexlabForward, { desc = "open in pdf" }) end, }, tsserver = {}, diff --git a/nvim/.config/nvim/lua/tobyvin/utils.lua b/nvim/.config/nvim/lua/tobyvin/utils.lua index 7a449f1..cf22c1e 100644 --- a/nvim/.config/nvim/lua/tobyvin/utils.lua +++ b/nvim/.config/nvim/lua/tobyvin/utils.lua @@ -2,6 +2,18 @@ local M = { dashboard = require("tobyvin.utils.dashboard"), session = require("tobyvin.utils.session"), dap = require("tobyvin.utils.dap"), + sep = (function() + if jit then + local os = string.lower(jit.os) + if os ~= "windows" then + return "/" + else + return "\\" + end + else + return package.config:sub(1, 1) + end + end)(), } function M.inspect(v) @@ -90,4 +102,53 @@ function M.extend_hl(ns, name, ...) vim.api.nvim_set_hl(ns, name, hl) end +---@class stdpath +---@field cache fun(...: string): string +---@field config fun(...: string): string +---@field config_dirs fun(...: string): string +---@field data fun(...: string): string +---@field data_dirs fun(...: string): string +---@field log fun(...: string): string +---@field run fun(...: string): string +---@field state fun(...: string): string +M.stdpath = setmetatable({}, { + __call = function(t, dir, ...) + return t[dir](...) + end, + __index = function(t, dir) + local value = vim.fn.stdpath(dir) + if not value or type(value) == "table" then + t[dir] = value + else + t[dir] = function(...) + return table.concat({ vim.fs.dirname(value), ... }, M.sep) + end + end + + return t[dir] + end, +}) + +---Searches upward from 's name for . If not found, returns the first existing +---fallback or nil if none exist +---@param bufnr integer +---@param filename string +---@param ... string? fallback paths +function M.find(bufnr, filename, ...) + local results = vim.fs.find(filename, { + upward = true, + stop = vim.uv.os_homedir(), + path = vim.fs.dirname(vim.api.nvim_buf_get_name(bufnr)), + }) + vim.list_extend(results, { ... }) + + return vim.iter(results) + :map(function(f) + return f:starts("/") and f or ("%s/%s"):format(vim.fn.stdpath("config"), f) + end) + :find(function(f) + return vim.fn.filereadable(f) == 1 + end) +end + return M diff --git a/nvim/.config/nvim/lua/tobyvin/utils/session.lua b/nvim/.config/nvim/lua/tobyvin/utils/session.lua index 717f9f5..7246e23 100644 --- a/nvim/.config/nvim/lua/tobyvin/utils/session.lua +++ b/nvim/.config/nvim/lua/tobyvin/utils/session.lua @@ -1,32 +1,19 @@ local M = {} -local sep = (function() - if jit then - local os = string.lower(jit.os) - if os ~= "windows" then - return "/" - else - return "\\" - end - else - return package.config:sub(1, 1) - end -end)() - ---@return string session_path function M.path() if vim.v.this_session and vim.v.this_session ~= "" then return vim.v.this_session end - local session_dir = table.concat({ vim.fn.stdpath("data"), "session" }, sep) - local name = vim.loop.cwd():gsub(":", "++"):gsub(sep, "%%"):gsub("$", ".vim") + local session_dir = table.concat({ vim.fn.stdpath("data"), "session" }, U.sep) + local name = vim.loop.cwd():gsub(":", "++"):gsub(U.sep, "%%"):gsub("$", ".vim") if not name or name == "" then error(("Invalid session name: '%s'"):format(name)) end - return table.concat({ session_dir, name }, sep) + return table.concat({ session_dir, name }, U.sep) end function M.write() -- cgit v1.2.3-70-g09d2