diff options
Diffstat (limited to 'lua')
-rw-r--r-- | lua/core/autocmds.lua | 129 | ||||
-rw-r--r-- | lua/core/builtins/init.lua | 28 | ||||
-rw-r--r-- | lua/core/comment.lua | 31 | ||||
-rw-r--r-- | lua/core/log.lua | 60 | ||||
-rw-r--r-- | lua/core/telescope.lua | 194 | ||||
-rw-r--r-- | lua/lvim/bootstrap.lua (renamed from lua/bootstrap.lua) | 102 | ||||
-rw-r--r-- | lua/lvim/config/defaults.lua (renamed from lua/config/defaults.lua) | 21 | ||||
-rw-r--r-- | lua/lvim/config/init.lua (renamed from lua/config/init.lua) | 91 | ||||
-rw-r--r-- | lua/lvim/config/settings.lua (renamed from lua/config/settings.lua) | 2 | ||||
-rw-r--r-- | lua/lvim/core/autocmds.lua | 88 | ||||
-rw-r--r-- | lua/lvim/core/autopairs.lua (renamed from lua/core/autopairs.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/core/bufferline.lua (renamed from lua/core/bufferline.lua) | 2 | ||||
-rw-r--r-- | lua/lvim/core/builtins/init.lua | 28 | ||||
-rw-r--r-- | lua/lvim/core/cmp.lua (renamed from lua/core/cmp.lua) | 37 | ||||
-rw-r--r-- | lua/lvim/core/commands.lua (renamed from lua/core/commands.lua) | 6 | ||||
-rw-r--r-- | lua/lvim/core/comment.lua | 71 | ||||
-rw-r--r-- | lua/lvim/core/dap.lua (renamed from lua/core/dap.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/core/dashboard.lua (renamed from lua/core/dashboard.lua) | 10 | ||||
-rw-r--r-- | lua/lvim/core/gitsigns.lua (renamed from lua/core/gitsigns.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/core/info.lua (renamed from lua/core/info.lua) | 128 | ||||
-rw-r--r-- | lua/lvim/core/log.lua | 161 | ||||
-rw-r--r-- | lua/lvim/core/lualine/colors.lua (renamed from lua/core/lualine/colors.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/core/lualine/components.lua (renamed from lua/core/lualine/components.lua) | 14 | ||||
-rw-r--r-- | lua/lvim/core/lualine/conditions.lua (renamed from lua/core/lualine/conditions.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/core/lualine/init.lua (renamed from lua/core/lualine/init.lua) | 4 | ||||
-rw-r--r-- | lua/lvim/core/lualine/styles.lua (renamed from lua/core/lualine/styles.lua) | 4 | ||||
-rw-r--r-- | lua/lvim/core/lualine/utils.lua (renamed from lua/core/lualine/utils.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/core/nvimtree.lua (renamed from lua/core/nvimtree.lua) | 30 | ||||
-rw-r--r-- | lua/lvim/core/project.lua (renamed from lua/core/project.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/core/telescope.lua | 134 | ||||
-rw-r--r-- | lua/lvim/core/telescope/custom-finders.lua | 80 | ||||
-rw-r--r-- | lua/lvim/core/terminal.lua (renamed from lua/core/terminal.lua) | 6 | ||||
-rw-r--r-- | lua/lvim/core/treesitter.lua (renamed from lua/core/treesitter.lua) | 2 | ||||
-rw-r--r-- | lua/lvim/core/which-key.lua (renamed from lua/core/which-key.lua) | 39 | ||||
-rw-r--r-- | lua/lvim/impatient.lua (renamed from lua/impatient.lua) | 4 | ||||
-rw-r--r-- | lua/lvim/impatient/profile.lua (renamed from lua/impatient/profile.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/interface/popup.lua (renamed from lua/interface/popup.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/interface/text.lua (renamed from lua/interface/text.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/keymappings.lua (renamed from lua/keymappings.lua) | 6 | ||||
-rw-r--r-- | lua/lvim/lsp/config.lua (renamed from lua/lsp/config.lua) | 4 | ||||
-rw-r--r-- | lua/lvim/lsp/handlers.lua (renamed from lua/lsp/handlers.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/lsp/init.lua (renamed from lua/lsp/init.lua) | 19 | ||||
-rw-r--r-- | lua/lvim/lsp/manager.lua (renamed from lua/lsp/manager.lua) | 12 | ||||
-rw-r--r-- | lua/lvim/lsp/null-ls/formatters.lua (renamed from lua/lsp/null-ls/formatters.lua) | 8 | ||||
-rw-r--r-- | lua/lvim/lsp/null-ls/init.lua (renamed from lua/lsp/null-ls/init.lua) | 12 | ||||
-rw-r--r-- | lua/lvim/lsp/null-ls/linters.lua (renamed from lua/lsp/null-ls/linters.lua) | 8 | ||||
-rw-r--r-- | lua/lvim/lsp/null-ls/services.lua (renamed from lua/lsp/null-ls/services.lua) | 2 | ||||
-rw-r--r-- | lua/lvim/lsp/peek.lua (renamed from lua/lsp/peek.lua) | 2 | ||||
-rw-r--r-- | lua/lvim/lsp/providers/jsonls.lua (renamed from lua/lsp/providers/jsonls.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/lsp/providers/sumneko_lua.lua (renamed from lua/lsp/providers/sumneko_lua.lua) | 2 | ||||
-rw-r--r-- | lua/lvim/lsp/providers/vuels.lua (renamed from lua/lsp/providers/vuels.lua) | 2 | ||||
-rw-r--r-- | lua/lvim/lsp/providers/yamlls.lua (renamed from lua/lsp/providers/yamlls.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/lsp/templates.lua (renamed from lua/lsp/templates.lua) | 8 | ||||
-rw-r--r-- | lua/lvim/lsp/utils.lua (renamed from lua/lsp/utils.lua) | 2 | ||||
-rw-r--r-- | lua/lvim/lualine/themes/onedarker.lua (renamed from lua/lualine/themes/onedarker.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/plugin-loader.lua (renamed from lua/plugin-loader.lua) | 4 | ||||
-rw-r--r-- | lua/lvim/plugins.lua (renamed from lua/plugins.lua) | 44 | ||||
-rw-r--r-- | lua/lvim/utils/ft.lua (renamed from lua/utils/ft.lua) | 0 | ||||
-rw-r--r-- | lua/lvim/utils/hooks.lua (renamed from lua/utils/hooks.lua) | 12 | ||||
-rw-r--r-- | lua/lvim/utils/init.lua (renamed from lua/utils/init.lua) | 38 | ||||
-rw-r--r-- | lua/lvim/utils/table.lua (renamed from lua/utils/table.lua) | 0 |
61 files changed, 916 insertions, 775 deletions
diff --git a/lua/core/autocmds.lua b/lua/core/autocmds.lua deleted file mode 100644 index 662afcfa..00000000 --- a/lua/core/autocmds.lua +++ /dev/null @@ -1,129 +0,0 @@ -local autocommands = {} -local config = require "config" - -lvim.autocommands = { - _general_settings = { - { - "Filetype", - "*", - "lua require('utils.ft').do_filetype(vim.fn.expand(\"<amatch>\"))", - }, - { - "FileType", - "qf", - "nnoremap <silent> <buffer> q :q<CR>", - }, - { - "FileType", - "lsp-installer", - "nnoremap <silent> <buffer> q :q<CR>", - }, - { - "TextYankPost", - "*", - "lua require('vim.highlight').on_yank({higroup = 'Search', timeout = 200})", - }, - { - "BufWinEnter", - "*", - "setlocal formatoptions-=c formatoptions-=r formatoptions-=o", - }, - { - "BufWinEnter", - "dashboard", - "setlocal cursorline signcolumn=yes cursorcolumn number", - }, - { - "BufRead", - "*", - "setlocal formatoptions-=c formatoptions-=r formatoptions-=o", - }, - { - "BufNewFile", - "*", - "setlocal formatoptions-=c formatoptions-=r formatoptions-=o", - }, - { "BufWritePost", config.path, "lua require('utils').reload_lv_config()" }, - { - "FileType", - "qf", - "set nobuflisted", - }, - -- { "VimLeavePre", "*", "set title set titleold=" }, - }, - _filetypechanges = { - { "BufWinEnter", ".tf", "setlocal filetype=terraform" }, - { "BufRead", "*.tf", "setlocal filetype=terraform" }, - { "BufNewFile", "*.tf", "setlocal filetype=terraform" }, - { "BufWinEnter", ".zsh", "setlocal filetype=sh" }, - { "BufRead", "*.zsh", "setlocal filetype=sh" }, - { "BufNewFile", "*.zsh", "setlocal filetype=sh" }, - }, - -- _solidity = { - -- {'BufWinEnter', '.sol', 'setlocal filetype=solidity'}, {'BufRead', '*.sol', 'setlocal filetype=solidity'}, - -- {'BufNewFile', '*.sol', 'setlocal filetype=solidity'} - -- }, - -- _gemini = { - -- {'BufWinEnter', '.gmi', 'setlocal filetype=markdown'}, {'BufRead', '*.gmi', 'setlocal filetype=markdown'}, - -- {'BufNewFile', '*.gmi', 'setlocal filetype=markdown'} - -- }, - _git = { - { "FileType", "gitcommit", "setlocal wrap" }, - { "FileType", "gitcommit", "setlocal spell" }, - }, - _markdown = { - { "FileType", "markdown", "setlocal wrap" }, - { "FileType", "markdown", "setlocal spell" }, - }, - _buffer_bindings = { - { "FileType", "floaterm", "nnoremap <silent> <buffer> q :q<CR>" }, - }, - _auto_resize = { - -- will cause split windows to be resized evenly if main window is resized - { "VimResized", "*", "wincmd =" }, - }, - _packer_compile = { - -- will run PackerCompile after writing plugins.lua - { "BufWritePost", "plugins.lua", "PackerCompile" }, - }, - _general_lsp = { - { "FileType", "lspinfo", "nnoremap <silent> <buffer> q :q<CR>" }, - }, - - -- _fterm_lazygit = { - -- -- will cause esc key to exit lazy git - -- {"TermEnter", "*", "call LazyGitNativation()"} - -- }, - -- _mode_switching = { - -- -- will switch between absolute and relative line numbers depending on mode - -- {'InsertEnter', '*', 'if &relativenumber | let g:ms_relativenumberoff = 1 | setlocal number norelativenumber | endif'}, - -- {'InsertLeave', '*', 'if exists("g:ms_relativenumberoff") | setlocal relativenumber | endif'}, - -- {'InsertEnter', '*', 'if &cursorline | let g:ms_cursorlineoff = 1 | setlocal nocursorline | endif'}, - -- {'InsertLeave', '*', 'if exists("g:ms_cursorlineoff") | setlocal cursorline | endif'}, - -- }, - custom_groups = {}, -} - -function autocommands.define_augroups(definitions) -- {{{1 - -- Create autocommand groups based on the passed definitions - -- - -- The key will be the name of the group, and each definition - -- within the group should have: - -- 1. Trigger - -- 2. Pattern - -- 3. Text - -- just like how they would normally be defined from Vim itself - for group_name, definition in pairs(definitions) do - vim.cmd("augroup " .. group_name) - vim.cmd "autocmd!" - - for _, def in pairs(definition) do - local command = table.concat(vim.tbl_flatten { "autocmd", def }, " ") - vim.cmd(command) - end - - vim.cmd "augroup END" - end -end - -return autocommands diff --git a/lua/core/builtins/init.lua b/lua/core/builtins/init.lua deleted file mode 100644 index c3b3618f..00000000 --- a/lua/core/builtins/init.lua +++ /dev/null @@ -1,28 +0,0 @@ -local M = {} - -local builtins = { - "keymappings", - "core.which-key", - "core.gitsigns", - "core.cmp", - "core.dashboard", - "core.dap", - "core.terminal", - "core.telescope", - "core.treesitter", - "core.nvimtree", - "core.project", - "core.bufferline", - "core.autopairs", - "core.comment", - "core.lualine", -} - -function M.config(config) - for _, builtin_path in ipairs(builtins) do - local builtin = require(builtin_path) - builtin.config(config) - end -end - -return M diff --git a/lua/core/comment.lua b/lua/core/comment.lua deleted file mode 100644 index b98410ab..00000000 --- a/lua/core/comment.lua +++ /dev/null @@ -1,31 +0,0 @@ -local M = {} - -function M.config() - lvim.builtin.comment = { - active = true, - on_config_done = nil, - -- Linters prefer comment and line to have a space in between markers - marker_padding = true, - -- should comment out empty or whitespace only lines - comment_empty = false, - -- Should key mappings be created - create_mappings = true, - -- Normal mode mapping left hand side - line_mapping = "gcc", - -- Visual/Operator mapping left hand side - operator_mapping = "gc", - -- Hook function to call before commenting takes place - hook = nil, - } -end - -function M.setup() - local nvim_comment = require "nvim_comment" - - nvim_comment.setup(lvim.builtin.comment) - if lvim.builtin.comment.on_config_done then - lvim.builtin.comment.on_config_done(nvim_comment) - end -end - -return M diff --git a/lua/core/log.lua b/lua/core/log.lua deleted file mode 100644 index fca1fcb4..00000000 --- a/lua/core/log.lua +++ /dev/null @@ -1,60 +0,0 @@ -local Log = {} - ---- Adds a log entry using Plenary.log ----@param msg any ----@param level string [same as vim.log.log_levels] -function Log:add_entry(msg, level) - assert(type(level) == "string") - if self.__handle then - -- plenary uses lower-case log levels - self.__handle[level:lower()](msg) - return - end - local status_ok, plenary = pcall(require, "plenary") - if status_ok then - local default_opts = { plugin = "lunarvim", level = lvim.log.level } - local handle = plenary.log.new(default_opts) - handle[level:lower()](msg) - self.__handle = handle - end - -- don't do anything if plenary is not available -end - ----Retrieves the path of the logfile ----@return string path of the logfile -function Log:get_path() - return string.format("%s/%s.log", vim.fn.stdpath "cache", "lunarvim") -end - ----Add a log entry at TRACE level ----@param msg any -function Log:trace(msg) - self:add_entry(msg, "TRACE") -end - ----Add a log entry at DEBUG level ----@param msg any -function Log:debug(msg) - self:add_entry(msg, "DEBUG") -end - ----Add a log entry at INFO level ----@param msg any -function Log:info(msg) - self:add_entry(msg, "INFO") -end - ----Add a log entry at WARN level ----@param msg any -function Log:warn(msg) - self:add_entry(msg, "WARN") -end - ----Add a log entry at ERROR level ----@param msg any -function Log:error(msg) - self:add_entry(msg, "ERROR") -end - -setmetatable({}, Log) -return Log diff --git a/lua/core/telescope.lua b/lua/core/telescope.lua deleted file mode 100644 index ba0a9ee1..00000000 --- a/lua/core/telescope.lua +++ /dev/null @@ -1,194 +0,0 @@ -local M = {} - -local utils = require "utils" - -function M.config() - -- Define this minimal config so that it's available if telescope is not yet available. - lvim.builtin.telescope = { - ---@usage disable telescope completely [not recommeded] - active = true, - on_config_done = nil, - } - - local status_ok, actions = pcall(require, "telescope.actions") - if not status_ok then - return - end - - lvim.builtin.telescope = vim.tbl_extend("force", lvim.builtin.telescope, { - defaults = { - prompt_prefix = " ", - selection_caret = " ", - entry_prefix = " ", - initial_mode = "insert", - selection_strategy = "reset", - sorting_strategy = "descending", - layout_strategy = "horizontal", - layout_config = { - width = 0.75, - preview_cutoff = 120, - horizontal = { mirror = false }, - vertical = { mirror = false }, - }, - file_sorter = require("telescope.sorters").get_fzy_sorter, - file_ignore_patterns = {}, - generic_sorter = require("telescope.sorters").get_generic_fuzzy_sorter, - path_display = { shorten = 5 }, - winblend = 0, - border = {}, - borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, - color_devicons = true, - use_less = true, - set_env = { ["COLORTERM"] = "truecolor" }, -- default = nil, - file_previewer = require("telescope.previewers").vim_buffer_cat.new, - grep_previewer = require("telescope.previewers").vim_buffer_vimgrep.new, - qflist_previewer = require("telescope.previewers").vim_buffer_qflist.new, - - -- Developer configurations: Not meant for general override - -- buffer_previewer_maker = require("telescope.previewers").buffer_previewer_maker, - mappings = { - i = { - ["<C-n>"] = actions.move_selection_next, - ["<C-p>"] = actions.move_selection_previous, - ["<C-c>"] = actions.close, - ["<C-j>"] = actions.cycle_history_next, - ["<C-k>"] = actions.cycle_history_prev, - ["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist, - ["<CR>"] = actions.select_default + actions.center, - -- To disable a keymap, put [map] = false - -- So, to not map "<C-n>", just put - -- ["<c-t>"] = trouble.open_with_trouble, - -- ["<c-x>"] = false, - -- ["<esc>"] = actions.close, - -- Otherwise, just set the mapping to the function that you want it to be. - -- ["<C-i>"] = actions.select_horizontal, - -- Add up multiple actions - -- You can perform as many actions in a row as you like - -- ["<CR>"] = actions.select_default + actions.center + my_cool_custom_action, - }, - n = { - ["<C-n>"] = actions.move_selection_next, - ["<C-p>"] = actions.move_selection_previous, - ["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist, - -- ["<c-t>"] = trouble.open_with_trouble, - -- ["<C-i>"] = my_cool_custom_action, - }, - }, - }, - extensions = { - fzy_native = { - override_generic_sorter = false, - override_file_sorter = true, - }, - }, - }) -end - -function M.find_lunarvim_files(opts) - opts = opts or {} - local themes = require "telescope.themes" - local theme_opts = themes.get_ivy { - sorting_strategy = "ascending", - layout_strategy = "bottom_pane", - prompt_prefix = ">> ", - prompt_title = "~ LunarVim files ~", - cwd = utils.join_paths(get_runtime_dir(), "lvim"), - find_command = { "git", "ls-files" }, - } - opts = vim.tbl_deep_extend("force", theme_opts, opts) - require("telescope.builtin").find_files(opts) -end - -function M.grep_lunarvim_files(opts) - opts = opts or {} - local themes = require "telescope.themes" - local theme_opts = themes.get_ivy { - sorting_strategy = "ascending", - layout_strategy = "bottom_pane", - prompt_prefix = ">> ", - prompt_title = "~ search LunarVim ~", - cwd = utils.join_paths(get_runtime_dir(), "lvim"), - } - opts = vim.tbl_deep_extend("force", theme_opts, opts) - require("telescope.builtin").live_grep(opts) -end - -function M.view_lunarvim_changelog() - local finders = require "telescope.finders" - local make_entry = require "telescope.make_entry" - local pickers = require "telescope.pickers" - local previewers = require "telescope.previewers" - local actions = require "telescope.actions" - local opts = {} - - local conf = require("telescope.config").values - opts.entry_maker = make_entry.gen_from_git_commits(opts) - - pickers.new(opts, { - prompt_title = "LunarVim changelog", - - finder = finders.new_oneshot_job( - vim.tbl_flatten { - "git", - "log", - "--pretty=oneline", - "--abbrev-commit", - "--", - ".", - }, - opts - ), - previewer = { - previewers.git_commit_diff_to_parent.new(opts), - previewers.git_commit_diff_to_head.new(opts), - previewers.git_commit_diff_as_was.new(opts), - previewers.git_commit_message.new(opts), - }, - - --TODO: consider opening a diff view when pressing enter - attach_mappings = function(_, map) - map("i", "<enter>", actions._close) - map("n", "<enter>", actions._close) - map("i", "<esc>", actions._close) - map("n", "<esc>", actions._close) - map("n", "q", actions._close) - return true - end, - sorter = conf.file_sorter(opts), - }):find() -end - -function M.code_actions() - local opts = { - winblend = 15, - layout_config = { - prompt_position = "top", - width = 80, - height = 12, - }, - borderchars = { - prompt = { "─", "│", " ", "│", "╭", "╮", "│", "│" }, - results = { "─", "│", "─", "│", "├", "┤", "╯", "╰" }, - preview = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, - }, - border = {}, - previewer = false, - shorten_path = false, - } - require("telescope.builtin").lsp_code_actions(require("telescope.themes").get_dropdown(opts)) -end - -function M.setup() - local telescope = require "telescope" - - telescope.setup(lvim.builtin.telescope) - if lvim.builtin.project.active then - telescope.load_extension "projects" - end - - if lvim.builtin.telescope.on_config_done then - lvim.builtin.telescope.on_config_done(telescope) - end -end - -return M diff --git a/lua/bootstrap.lua b/lua/lvim/bootstrap.lua index 866403b7..fbb362ce 100644 --- a/lua/bootstrap.lua +++ b/lua/lvim/bootstrap.lua @@ -1,13 +1,14 @@ local M = {} -package.loaded["utils.hooks"] = nil -local _, hooks = pcall(require, "utils.hooks") +package.loaded["lvim.utils.hooks"] = nil +local _, hooks = pcall(require, "lvim.utils.hooks") + +local uv = vim.loop +local path_sep = uv.os_uname().version:match "Windows" and "\\" or "/" ---Join path segments that were passed as input ---@return string function _G.join_paths(...) - local uv = vim.loop - local path_sep = uv.os_uname().version:match "Windows" and "\\" or "/" local result = table.concat({ ... }, path_sep) return result end @@ -18,7 +19,7 @@ function _G.get_runtime_dir() local lvim_runtime_dir = os.getenv "LUNARVIM_RUNTIME_DIR" if not lvim_runtime_dir then -- when nvim is used directly - return vim.fn.stdpath "config" + return vim.fn.stdpath "data" end return lvim_runtime_dir end @@ -43,47 +44,24 @@ function _G.get_cache_dir() return lvim_cache_dir end ----Get the full path to the currently installed lunarvim repo ----@return string -local function get_install_path() - local lvim_runtime_dir = os.getenv "LUNARVIM_RUNTIME_DIR" - if not lvim_runtime_dir then - -- when nvim is used directly - return vim.fn.stdpath "config" - end - return join_paths(lvim_runtime_dir, "lvim") -end - ----Get currently installed version of LunarVim ----@param type string can be "short" ----@return string -function _G.get_version(type) - type = type or "" - local lvim_full_ver = vim.fn.system("git -C " .. get_install_path() .. " describe --tags") - - if string.match(lvim_full_ver, "%d") == nil then - return nil - end - if type == "short" then - return vim.fn.split(lvim_full_ver, "-")[1] - else - return string.sub(lvim_full_ver, 1, #lvim_full_ver - 1) - end -end - ---Initialize the `&runtimepath` variables and prepare for startup ---@return table -function M:init() +function M:init(base_dir) self.runtime_dir = get_runtime_dir() self.config_dir = get_config_dir() self.cache_path = get_cache_dir() - self.install_path = get_install_path() - self.pack_dir = join_paths(self.runtime_dir, "site", "pack") self.packer_install_dir = join_paths(self.runtime_dir, "site", "pack", "packer", "start", "packer.nvim") self.packer_cache_path = join_paths(self.config_dir, "plugin", "packer_compiled.lua") + ---Get the full path to LunarVim's base directory + ---@return string + function _G.get_lvim_base_dir() + return base_dir + end + if os.getenv "LUNARVIM_RUNTIME_DIR" then + -- vim.opt.rtp:append(os.getenv "LUNARVIM_RUNTIME_DIR" .. path_sep .. "lvim") vim.opt.rtp:remove(join_paths(vim.fn.stdpath "data", "site")) vim.opt.rtp:remove(join_paths(vim.fn.stdpath "data", "site", "after")) vim.opt.rtp:prepend(join_paths(self.runtime_dir, "site")) @@ -99,22 +77,20 @@ function M:init() vim.cmd("set spellfile=" .. join_paths(self.config_dir, "spell", "en.utf-8.add")) end - vim.fn.mkdir(vim.fn.stdpath "cache", "p") + vim.fn.mkdir(get_cache_dir(), "p") -- FIXME: currently unreliable in unit-tests if not os.getenv "LVIM_TEST_ENV" then - require("impatient").setup { + _G.PLENARY_DEBUG = false + require("lvim.impatient").setup { path = vim.fn.stdpath "cache" .. "/lvim_cache", enable_profiling = true, } end - local config = require "config" - config:init { - path = join_paths(self.config_dir, "config.lua"), - } + require("lvim.config"):init() - require("plugin-loader"):init { + require("lvim.plugin-loader"):init { package_root = self.pack_dir, install_path = self.packer_install_dir, } @@ -130,10 +106,10 @@ function M:update() hooks.run_post_update() end -local function git_cmd(subcmd) +local function git_cmd(subcmd, opts) local Job = require "plenary.job" - local Log = require "core.log" - local args = { "-C", get_install_path() } + local Log = require "lvim.core.log" + local args = { "-C", opts.cwd } vim.list_extend(args, subcmd) local stderr = {} @@ -141,7 +117,7 @@ local function git_cmd(subcmd) :new({ command = "git", args = args, - cwd = get_install_path(), + cwd = opts.cwd, on_stderr = function(_, data) table.insert(stderr, data) end, @@ -156,33 +132,36 @@ local function git_cmd(subcmd) Log:debug(stdout) end - return ret + return ret, stdout end ---pulls the latest changes from github function M:update_repo() - local Log = require "core.log" + local Log = require "lvim.core.log" local sub_commands = { fetch = { "fetch" }, diff = { "diff", "--quiet", "@{upstream}" }, merge = { "merge", "--ff-only", "--progress" }, } + local opts = { + cwd = get_lvim_base_dir(), + } Log:info "Checking for updates" - local ret = git_cmd(sub_commands.fetch) + local ret = git_cmd(sub_commands.fetch, opts) if ret ~= 0 then Log:error "Update failed! Check the log for further information" return end - ret = git_cmd(sub_commands.diff) + ret = git_cmd(sub_commands.diff, opts) if ret == 0 then Log:info "LunarVim is already up-to-date" return end - ret = git_cmd(sub_commands.merge) + ret = git_cmd(sub_commands.merge, opts) if ret ~= 0 then Log:error "Update failed! Please pull the changes manually instead." @@ -190,4 +169,23 @@ function M:update_repo() end end +---Get currently installed version of LunarVim +---@param type string can be "short" +---@return string +function M:get_version(type) + type = type or "" + local opts = { cwd = get_lvim_base_dir() } + local status_ok, results = git_cmd({ "describe", "--tags" }, opts) + local lvim_full_ver = results[1] or "" + + if not status_ok or string.match(lvim_full_ver, "%d") == nil then + return nil + end + if type == "short" then + return vim.fn.split(lvim_full_ver, "-")[1] + else + return string.sub(lvim_full_ver, 1, #lvim_full_ver - 1) + end +end + return M diff --git a/lua/config/defaults.lua b/lua/lvim/config/defaults.lua index f030234d..effe1e77 100644 --- a/lua/config/defaults.lua +++ b/lua/lvim/config/defaults.lua @@ -1,18 +1,19 @@ -local home_dir = vim.loop.os_homedir() -local utils = require "utils" - -lvim = { +return { leader = "space", colorscheme = "onedarker", line_wrap_cursor_movement = true, transparent_window = false, format_on_save = true, - vsnip_dir = utils.join_paths(home_dir, ".config", "snippets"), - database = { save_location = utils.join_paths(home_dir, ".config", "lunarvim_db"), auto_execute = 1 }, keys = {}, builtin = {}, + plugins = { + -- use config.lua for this not put here + }, + + autocommands = {}, + lang = {}, log = { ---@usage can be { "trace", "debug", "info", "warn", "error", "fatal" }, level = "warn", @@ -27,11 +28,7 @@ lvim = { float_opts = {}, }, }, + ---@usage set to false to restore the default behavior of vim.notify + override_notify = true, }, - plugins = { - -- use config.lua for this not put here - }, - - autocommands = {}, - lang = {}, } diff --git a/lua/config/init.lua b/lua/lvim/config/init.lua index 411f7a93..c06d28ef 100644 --- a/lua/config/init.lua +++ b/lua/lvim/config/init.lua @@ -1,29 +1,36 @@ +local utils = require "lvim.utils" +local Log = require "lvim.core.log" + local M = {} +local user_config_dir = get_config_dir() +local user_config_file = utils.join_paths(user_config_dir, "config.lua") + +---Get the full path to the user configuration file +---@return string +function M:get_user_config_path() + return user_config_file +end --- Initialize lvim default configuration -- Define lvim global variable -function M:init(opts) - opts = opts or {} - self.path = opts.path - local utils = require "utils" - - require "config.defaults" - - -- Fallback config.lua to lv-config.lua - if not utils.is_file(self.path) then - local lv_config = self.path:gsub("config.lua$", "lv-config.lua") - print(self.path, "not found, falling back to", lv_config) - - self.path = lv_config +function M:init() + if vim.tbl_isempty(lvim or {}) then + lvim = require "lvim.config.defaults" + local home_dir = vim.loop.os_homedir() + lvim.vsnip_dir = utils.join_paths(home_dir, ".config", "snippets") + lvim.database = { save_location = utils.join_paths(home_dir, ".config", "lunarvim_db"), auto_execute = 1 } end - local builtins = require "core.builtins" - builtins.config(self) + local builtins = require "lvim.core.builtins" + builtins.config { user_config_file = user_config_file } - local settings = require "config.settings" + local settings = require "lvim.config.settings" settings.load_options() - local lvim_lsp_config = require "lsp.config" + local autocmds = require "lvim.core.autocmds" + lvim.autocommands = autocmds.load_augroups() + + local lvim_lsp_config = require "lvim.lsp.config" lvim.lsp = vim.deepcopy(lvim_lsp_config) local supported_languages = { @@ -121,7 +128,7 @@ function M:init(opts) "zig", } - require("lsp.manager").init_defaults(supported_languages) + require("lvim.lsp.manager").init_defaults(supported_languages) end local function deprecation_notice() @@ -131,7 +138,7 @@ local function deprecation_notice() end for lang, entry in pairs(lvim.lang) do - local deprecated_config = entry["lsp"] or {} + local deprecated_config = entry["lvim.lsp"] or {} if not vim.tbl_isempty(deprecated_config) then local msg = string.format( "Deprecation notice: [lvim.lang.%s.lsp] setting is no longer supported. See https://github.com/LunarVim/LunarVim#breaking-changes", @@ -147,24 +154,50 @@ end --- Override the configuration with a user provided one -- @param config_path The path to the configuration overrides function M:load(config_path) - local autocmds = require "core.autocmds" - - config_path = config_path or self.path - local ok, err = pcall(vim.cmd, "luafile " .. config_path) + local autocmds = require "lvim.core.autocmds" + config_path = config_path or self.get_user_config_path() + local ok, err = pcall(dofile, config_path) if not ok then - print("Invalid configuration", config_path) - print(err) - return + if utils.is_file(user_config_file) then + Log:warn("Invalid configuration: " .. err) + else + Log:warn(string.format("Unable to find configuration file [%s]", config_path)) + end end deprecation_notice() - self.path = config_path - autocmds.define_augroups(lvim.autocommands) - local settings = require "config.settings" + local settings = require "lvim.config.settings" settings.load_commands() end +--- Override the configuration with a user provided one +-- @param config_path The path to the configuration overrides +function M:reload() + local lvim_modules = {} + for module, _ in pairs(package.loaded) do + if module:match "lvim" then + package.loaded.module = nil + table.insert(lvim_modules, module) + end + end + + M:init() + M:load() + + require("lvim.keymappings").setup() -- this should be done before loading the plugins + local plugins = require "lvim.plugins" + utils.toggle_autoformat() + local plugin_loader = require "lvim.plugin-loader" + plugin_loader:cache_reset() + plugin_loader:load { plugins, lvim.plugins } + vim.cmd ":PackerInstall" + vim.cmd ":PackerCompile" + -- vim.cmd ":PackerClean" + require("lvim.lsp").setup() + Log:info "Reloaded configuration" +end + return M diff --git a/lua/config/settings.lua b/lua/lvim/config/settings.lua index 90042c4f..b86e1a18 100644 --- a/lua/config/settings.lua +++ b/lua/lvim/config/settings.lua @@ -1,5 +1,5 @@ local M = {} -local utils = require "utils" +local utils = require "lvim.utils" M.load_options = function() local default_options = { backup = false, -- creates a backup file diff --git a/lua/lvim/core/autocmds.lua b/lua/lvim/core/autocmds.lua new file mode 100644 index 00000000..5d1d365e --- /dev/null +++ b/lua/lvim/core/autocmds.lua @@ -0,0 +1,88 @@ +local M = {} + +--- Load the default set of autogroups and autocommands. +function M.load_augroups() + local user_config_file = vim.fn.resolve(require("lvim.config"):get_user_config_path()) + + return { + _general_settings = { + { + "Filetype", + "*", + "lua require('lvim.utils.ft').do_filetype(vim.fn.expand(\"<amatch>\"))", + }, + { "FileType", "qf,help,man", "nnoremap <silent> <buffer> q :close<CR>" }, + { + "TextYankPost", + "*", + "lua require('vim.highlight').on_yank({higroup = 'Search', timeout = 200})", + }, + { + "BufWinEnter", + "dashboard", + "setlocal cursorline signcolumn=yes cursorcolumn number", + }, + { "BufWritePost", user_config_file, "lua require('lvim.config'):reload()" }, + { "FileType", "qf", "set nobuflisted" }, + -- { "VimLeavePre", "*", "set title set titleold=" }, + }, + _formatoptions = { + { + "BufWinEnter,BufRead,BufNewFile", + "*", + "setlocal formatoptions-=c formatoptions-=r formatoptions-=o", + }, + }, + _filetypechanges = { + { "BufWinEnter", ".tf", "setlocal filetype=terraform" }, + { "BufRead", "*.tf", "setlocal filetype=terraform" }, + { "BufNewFile", "*.tf", "setlocal filetype=terraform" }, + { "BufWinEnter", ".zsh", "setlocal filetype=sh" }, + { "BufRead", "*.zsh", "setlocal filetype=sh" }, + { "BufNewFile", "*.zsh", "setlocal filetype=sh" }, + }, + _git = { + { "FileType", "gitcommit", "setlocal wrap" }, + { "FileType", "gitcommit", "setlocal spell" }, + }, + _markdown = { + { "FileType", "markdown", "setlocal wrap" }, + { "FileType", "markdown", "setlocal spell" }, + }, + _buffer_bindings = { + { "FileType", "floaterm", "nnoremap <silent> <buffer> q :q<CR>" }, + }, + _auto_resize = { + -- will cause split windows to be resized evenly if main window is resized + { "VimResized", "*", "tabdo wincmd =" }, + }, + _general_lsp = { + { "FileType", "lspinfo,lsp-installer,null-ls-info", "nnoremap <silent> <buffer> q :close<CR>" }, + }, + custom_groups = {}, + } +end + +function M.define_augroups(definitions) -- {{{1 + -- Create autocommand groups based on the passed definitions + -- + -- The key will be the name of the group, and each definition + -- within the group should have: + -- 1. Trigger + -- 2. Pattern + -- 3. Text + -- just like how they would normally be defined from Vim itself + for group_name, definition in pairs(definitions) do + vim.cmd("augroup " .. group_name) + vim.cmd "autocmd!" + + for _, def in pairs(definition) do + local command = table.concat(vim.tbl_flatten { "autocmd", def }, " ") + vim.cmd(command) + end + + vim.cmd "augroup END" + end +end + +return M diff --git a/lua/core/autopairs.lua b/lua/lvim/core/autopairs.lua index eb080fb1..eb080fb1 100644 --- a/lua/core/autopairs.lua +++ b/lua/lvim/core/autopairs.lua diff --git a/lua/core/bufferline.lua b/lua/lvim/core/bufferline.lua index e3f6b5de..ae6542d1 100644 --- a/lua/core/bufferline.lua +++ b/lua/lvim/core/bufferline.lua @@ -14,7 +14,7 @@ M.config = function() end M.setup = function() - local keymap = require "keymappings" + local keymap = require "lvim.keymappings" keymap.append_to_defaults(lvim.builtin.bufferline.keymap) if lvim.builtin.bufferline.on_config_done then diff --git a/lua/lvim/core/builtins/init.lua b/lua/lvim/core/builtins/init.lua new file mode 100644 index 00000000..8f83072e --- /dev/null +++ b/lua/lvim/core/builtins/init.lua @@ -0,0 +1,28 @@ +local M = {} + +local builtins = { + "lvim.keymappings", + "lvim.core.which-key", + "lvim.core.gitsigns", + "lvim.core.cmp", + "lvim.core.dashboard", + "lvim.core.dap", + "lvim.core.terminal", + "lvim.core.telescope", + "lvim.core.treesitter", + "lvim.core.nvimtree", + "lvim.core.project", + "lvim.core.bufferline", + "lvim.core.autopairs", + "lvim.core.comment", + "lvim.core.lualine", +} + +function M.config(config) + for _, builtin_path in ipairs(builtins) do + local builtin = require(builtin_path) + builtin.config(config) + end +end + +return M diff --git a/lua/core/cmp.lua b/lua/lvim/core/cmp.lua index d5d92314..b1cb1431 100644 --- a/lua/core/cmp.lua +++ b/lua/lvim/core/cmp.lua @@ -158,23 +158,28 @@ M.config = function() Value = " ", Variable = " ", }, + source_names = { + nvim_lsp = "(LSP)", + emoji = "(Emoji)", + path = "(Path)", + calc = "(Calc)", + cmp_tabnine = "(Tabnine)", + vsnip = "(Snippet)", + luasnip = "(Snippet)", + buffer = "(Buffer)", + }, + duplicates = { + buffer = 1, + path = 1, + nvim_lsp = 0, + luasnip = 1, + }, + duplicates_default = 0, format = function(entry, vim_item) vim_item.kind = lvim.builtin.cmp.formatting.kind_icons[vim_item.kind] - vim_item.menu = ({ - nvim_lsp = "(LSP)", - emoji = "(Emoji)", - path = "(Path)", - calc = "(Calc)", - cmp_tabnine = "(Tabnine)", - vsnip = "(Snippet)", - luasnip = "(Snippet)", - buffer = "(Buffer)", - })[entry.source.name] - vim_item.dup = ({ - buffer = 1, - path = 1, - nvim_lsp = 0, - })[entry.source.name] or 0 + vim_item.menu = lvim.builtin.cmp.formatting.source_names[entry.source.name] + vim_item.dup = lvim.builtin.cmp.formatting.duplicates[entry.source.name] + or lvim.builtin.cmp.formatting.duplicates_default return vim_item end, }, @@ -199,6 +204,8 @@ M.config = function() { name = "crates" }, }, mapping = { + ["<C-k>"] = cmp.mapping.select_prev_item(), + ["<C-j>"] = cmp.mapping.select_next_item(), ["<C-d>"] = cmp.mapping.scroll_docs(-4), ["<C-f>"] = cmp.mapping.scroll_docs(4), -- TODO: potentially fix emmet nonsense diff --git a/lua/core/commands.lua b/lua/lvim/core/commands.lua index 6ceeaaff..b750f12b 100644 --- a/lua/core/commands.lua +++ b/lua/lvim/core/commands.lua @@ -11,9 +11,9 @@ M.defaults = { endfunction ]], -- :LvimInfo - [[ command! LvimInfo lua require('core.info').toggle_popup(vim.bo.filetype) ]], - [[ command! LvimCacheReset lua require('utils.hooks').reset_cache() ]], - [[ command! LvimUpdate lua require('bootstrap').update() ]], + [[ command! LvimInfo lua require('lvim.core.info').toggle_popup(vim.bo.filetype) ]], + [[ command! LvimCacheReset lua require('lvim.utils.hooks').reset_cache() ]], + [[ command! LvimUpdate lua require('lvim.bootstrap').update() ]], } M.load = function(commands) diff --git a/lua/lvim/core/comment.lua b/lua/lvim/core/comment.lua new file mode 100644 index 00000000..0b454074 --- /dev/null +++ b/lua/lvim/core/comment.lua @@ -0,0 +1,71 @@ +local M = {} + +function M.config() + local pre_hook = nil + if lvim.builtin.treesitter.context_commentstring.enable then + pre_hook = function(_ctx) + return require("ts_context_commentstring.internal").calculate_commentstring() + end + end + lvim.builtin.comment = { + active = true, + on_config_done = nil, + ---Add a space b/w comment and the line + ---@type boolean + padding = true, + + ---Lines to be ignored while comment/uncomment. + ---Could be a regex string or a function that returns a regex string. + ---Example: Use '^$' to ignore empty lines + ---@type string|function + ignore = "^$", + + ---Whether to create basic (operator-pending) and extra mappings for NORMAL/VISUAL mode + ---@type table + mappings = { + ---operator-pending mapping + ---Includes `gcc`, `gcb`, `gc[count]{motion}` and `gb[count]{motion}` + basic = true, + ---extended mapping + ---Includes `g>`, `g<`, `g>[count]{motion}` and `g<[count]{motion}` + extra = false, + }, + + ---LHS of line and block comment toggle mapping in NORMAL/VISUAL mode + ---@type table + toggler = { + ---line-comment toggle + line = "gcc", + ---block-comment toggle + block = "gbc", + }, + + ---LHS of line and block comment operator-mode mapping in NORMAL/VISUAL mode + ---@type table + opleader = { + ---line-comment opfunc mapping + line = "gc", + ---block-comment opfunc mapping + block = "gb", + }, + + ---Pre-hook, called before commenting the line + ---@type function|nil + pre_hook = pre_hook, + + ---Post-hook, called after commenting is done + ---@type function|nil + post_hook = nil, + } +end + +function M.setup() + local nvim_comment = require "Comment" + + nvim_comment.setup(lvim.builtin.comment) + if lvim.builtin.comment.on_config_done then + lvim.builtin.comment.on_config_done(nvim_comment) + end +end + +return M diff --git a/lua/core/dap.lua b/lua/lvim/core/dap.lua index d9b59641..d9b59641 100644 --- a/lua/core/dap.lua +++ b/lua/lvim/core/dap.lua diff --git a/lua/core/dashboard.lua b/lua/lvim/core/dashboard.lua index 505350cb..108ed0d2 100644 --- a/lua/core/dashboard.lua +++ b/lua/lvim/core/dashboard.lua @@ -1,5 +1,5 @@ local M = {} -local utils = require "utils" +local utils = require "lvim.utils" M.config = function(config) lvim.builtin.dashboard = { @@ -48,7 +48,7 @@ M.config = function(config) }, e = { description = { " Configuration " }, - command = ":e " .. config.path, + command = ":e " .. config.user_config_file, }, }, @@ -70,7 +70,7 @@ M.setup = function() vim.g.dashboard_session_directory = lvim.builtin.dashboard.session_directory local lvim_site = "lunarvim.org" - local lvim_version = get_version "short" + local lvim_version = require("lvim.bootstrap"):get_version "short" local num_plugins_loaded = #vim.fn.globpath(get_runtime_dir() .. "/site/pack/packer/start", "*", 0, 1) local footer = { @@ -84,10 +84,10 @@ M.setup = function() table.insert(footer, 3, "v" .. lvim_version) end - local text = require "interface.text" + local text = require "lvim.interface.text" vim.g.dashboard_custom_footer = text.align_center({ width = 0 }, footer, 0.49) -- Use 0.49 as counts for 2 characters - require("core.autocmds").define_augroups { + require("lvim.core.autocmds").define_augroups { _dashboard = { -- seems to be nobuflisted that makes my stuff disappear will do more testing { diff --git a/lua/core/gitsigns.lua b/lua/lvim/core/gitsigns.lua index cc6387dc..cc6387dc 100644 --- a/lua/core/gitsigns.lua +++ b/lua/lvim/core/gitsigns.lua diff --git a/lua/core/info.lua b/lua/lvim/core/info.lua index 16001d07..5707cc30 100644 --- a/lua/core/info.lua +++ b/lua/lvim/core/info.lua @@ -10,54 +10,44 @@ local M = { } local fmt = string.format -local text = require "interface.text" -local lsp_utils = require "lsp.utils" +local text = require "lvim.interface.text" +local lsp_utils = require "lvim.lsp.utils" local function str_list(list) return fmt("[ %s ]", table.concat(list, ", ")) end -local function get_formatter_suggestion_msg(ft) - local config = require "config" - local null_formatters = require "lsp.null-ls.formatters" +local function make_formatters_info(ft) + local null_formatters = require "lvim.lsp.null-ls.formatters" + local registered_formatters = null_formatters.list_registered_providers(ft) local supported_formatters = null_formatters.list_available(ft) local section = { - " HINT ", - "", - fmt("* List of supported formatters: %s", str_list(supported_formatters)), + "Formatters info", + fmt( + "* Active: %s%s", + table.concat(registered_formatters, " , "), + vim.tbl_count(registered_formatters) > 0 and " " or "" + ), + fmt("* Supported: %s", str_list(supported_formatters)), } - if not vim.tbl_isempty(supported_formatters) then - vim.list_extend(section, { - "* Configured formatter needs to be installed and executable.", - fmt("* Enable installed formatter(s) with following config in %s", config.path), - "", - fmt(" lvim.lang.%s.formatters = { { exe = '%s' } }", ft, table.concat(supported_formatters, "│")), - }) - end - return section end -local function get_linter_suggestion_msg(ft) - local config = require "config" - local null_linters = require "lsp.null-ls.linters" +local function make_linters_info(ft) + local null_linters = require "lvim.lsp.null-ls.linters" local supported_linters = null_linters.list_available(ft) + local registered_linters = null_linters.list_registered_providers(ft) local section = { - " HINT ", - "", - fmt("* List of supported linters: %s", str_list(supported_linters)), + "Linters info", + fmt( + "* Active: %s%s", + table.concat(registered_linters, " , "), + vim.tbl_count(registered_linters) > 0 and " " or "" + ), + fmt("* Supported: %s", str_list(supported_linters)), } - if not vim.tbl_isempty(supported_linters) then - vim.list_extend(section, { - "* Configured linter needs to be installed and executable.", - fmt("* Enable installed linter(s) with following config in %s", config.path), - "", - fmt(" lvim.lang.%s.linters = { { exe = '%s' } }", ft, table.concat(supported_linters, "│")), - }) - end - return section end @@ -72,13 +62,15 @@ local function make_client_info(client) local name = client.name local id = client.id local document_formatting = client.resolved_capabilities.document_formatting + local attached_buffers_list = table.concat(vim.lsp.get_buffers_by_client_id(client.id), ", ") local client_info = { - fmt("* Name: %s", name), - fmt("* Id: %s", tostring(id)), - fmt("* Supports formatting: %s", tostring(document_formatting)), + fmt("* Name: %s", name), + fmt("* Id: [%s]", tostring(id)), + fmt("* Attached buffers: [%s]", tostring(attached_buffers_list)), + fmt("* Supports formatting: %s", tostring(document_formatting)), } if not vim.tbl_isempty(client_enabled_caps) then - local caps_text = "* Capabilities list: " + local caps_text = "* Capabilities list: " local caps_text_len = caps_text:len() local enabled_caps = text.format_table(client_enabled_caps, 3, " | ") enabled_caps = text.shift_right(enabled_caps, caps_text_len) @@ -92,10 +84,24 @@ end function M.toggle_popup(ft) local clients = lsp_utils.get_active_clients_by_ft(ft) local client_names = {} - + local bufnr = vim.api.nvim_get_current_buf() + local ts_active_buffers = vim.tbl_keys(vim.treesitter.highlighter.active) + local is_treesitter_active = function() + local status = "inactive" + if vim.tbl_contains(ts_active_buffers, bufnr) then + status = "active" + end + return status + end local header = { - fmt("Detected filetype: %s", ft), - fmt("Treesitter active: %s", tostring(next(vim.treesitter.highlighter.active) ~= nil)), + fmt("Detected filetype: %s", ft), + fmt("Current buffer number: [%s]", bufnr), + } + + local ts_info = { + "Treesitter info", + fmt("* current buffer: %s", is_treesitter_active()), + fmt("* list: [%s]", table.concat(ts_active_buffers, ", ")), } local lsp_info = { @@ -108,22 +114,9 @@ function M.toggle_popup(ft) table.insert(client_names, client.name) end - local null_formatters = require "lsp.null-ls.formatters" - local null_linters = require "lsp.null-ls.linters" - local registered_formatters = null_formatters.list_supported_names(ft) - local registered_linters = null_linters.list_supported_names(ft) - local registered_providers = {} - vim.list_extend(registered_providers, registered_formatters) - vim.list_extend(registered_providers, registered_linters) - local registered_count = vim.tbl_count(registered_providers) - local null_ls_info = { - "Formatters and linters", - fmt( - "* Configured providers: %s%s", - table.concat(registered_providers, " , "), - registered_count > 0 and " " or "" - ), - } + local formatters_info = make_formatters_info(ft) + + local linters_info = make_linters_info(ft) local content_provider = function(popup) local content = {} @@ -134,15 +127,13 @@ function M.toggle_popup(ft) { "" }, header, { "" }, - lsp_info, - { "" }, - null_ls_info, + ts_info, { "" }, + lsp_info, { "" }, - get_formatter_suggestion_msg(ft), - { "" }, + formatters_info, { "" }, - get_linter_suggestion_msg(ft), + linters_info, } do vim.list_extend(content, section) end @@ -153,17 +144,22 @@ function M.toggle_popup(ft) local function set_syntax_hl() vim.cmd [[highlight LvimInfoIdentifier gui=bold]] vim.cmd [[highlight link LvimInfoHeader Type]] + vim.cmd [[let m=matchadd("LvimInfoHeader", "Treesitter info")]] vim.cmd [[let m=matchadd("LvimInfoHeader", "Language Server Protocol (LSP) info")]] - vim.cmd [[let m=matchadd("LvimInfoHeader", "Formatters and linters")]] + vim.cmd [[let m=matchadd("LvimInfoHeader", "Formatters info")]] + vim.cmd [[let m=matchadd("LvimInfoHeader", "Linters info")]] vim.cmd('let m=matchadd("LvimInfoIdentifier", " ' .. ft .. '$")') vim.cmd 'let m=matchadd("string", "true")' + vim.cmd 'let m=matchadd("string", "active")' + vim.cmd 'let m=matchadd("boolean", "inactive")' + vim.cmd 'let m=matchadd("string", "")' vim.cmd 'let m=matchadd("error", "false")' - tbl_set_highlight(registered_providers, "LvimInfoIdentifier") - -- tbl_set_highlight(require("lsp.null-ls.formatters").list_available(ft), "LvimInfoIdentifier") - -- tbl_set_highlight(require("lsp.null-ls.linters").list_available(ft), "LvimInfoIdentifier") + -- tbl_set_highlight(registered_providers, "LvimInfoIdentifier") + tbl_set_highlight(require("lvim.lsp.null-ls.formatters").list_available(ft), "LvimInfoIdentifier") + tbl_set_highlight(require("lvim.lsp.null-ls.linters").list_available(ft), "LvimInfoIdentifier") end - local Popup = require("interface.popup"):new { + local Popup = require("lvim.interface.popup"):new { win_opts = { number = false }, buf_opts = { modifiable = false, filetype = "lspinfo" }, } diff --git a/lua/lvim/core/log.lua b/lua/lvim/core/log.lua new file mode 100644 index 00000000..9ddc641f --- /dev/null +++ b/lua/lvim/core/log.lua @@ -0,0 +1,161 @@ +local Log = {} + +local logfile = string.format("%s/%s.log", vim.fn.stdpath "cache", "lvim") + +Log.levels = { + TRACE = 1, + DEBUG = 2, + INFO = 3, + WARN = 4, + ERROR = 5, +} + +vim.tbl_add_reverse_lookup(Log.levels) + +function Log:init() + local status_ok, structlog = pcall(require, "structlog") + if not status_ok then + return nil + end + + local nvim_notify_params = {} + local nvim_notify_params_injecter = function(_, entry) + for key, value in pairs(nvim_notify_params) do + entry[key] = value + end + return entry + end + + local nvim_notify_default_namer = function(logger, entry) + entry["title"] = logger.name + return entry + end + + nvim_notify_params_injecter(nil, {}) + local log_level = Log.levels[(lvim.log.level):upper() or "WARN"] + structlog.configure { + lvim = { + sinks = { + structlog.sinks.Console(log_level, { + async = false, + processors = { + structlog.processors.Namer(), + structlog.processors.StackWriter({ "line", "file" }, { max_parents = 0, stack_level = 2 }), + structlog.processors.Timestamper "%H:%M:%S", + }, + formatter = structlog.formatters.FormatColorizer( -- + "%s [%-5s] %s: %-30s", + { "timestamp", "level", "logger_name", "msg" }, + { level = structlog.formatters.FormatColorizer.color_level() } + ), + }), + structlog.sinks.NvimNotify(Log.levels.INFO, { + processors = { + nvim_notify_default_namer, + nvim_notify_params_injecter, + }, + formatter = structlog.formatters.Format( -- + "%s", + { "msg" }, + { blacklist_all = true } + ), + params_map = { + icon = "icon", + keep = "keep", + on_open = "on_open", + on_close = "on_close", + timeout = "timeout", + title = "title", + }, + }), + structlog.sinks.File(Log.levels.TRACE, logfile, { + processors = { + structlog.processors.Namer(), + structlog.processors.StackWriter({ "line", "file" }, { max_parents = 3, stack_level = 2 }), + structlog.processors.Timestamper "%H:%M:%S", + }, + formatter = structlog.formatters.Format( -- + "%s [%-5s] %s: %-30s", + { "timestamp", "level", "logger_name", "msg" } + ), + }), + }, + }, + } + + local logger = structlog.get_logger "lvim" + + if lvim.log.override_notify then + -- Overwrite vim.notify to use the logger + vim.notify = function(msg, vim_log_level, opts) + nvim_notify_params = opts or {} + -- https://github.com/neovim/neovim/blob/685cf398130c61c158401b992a1893c2405cd7d2/runtime/lua/vim/lsp/log.lua#L5 + logger:log(vim_log_level + 1, msg) + end + end + + return logger +end + +--- Adds a log entry using Plenary.log +---@fparam msg any +---@param level string [same as vim.log.log_levels] +function Log:add_entry(level, msg, event) + if self.__handle then + self.__handle:log(level, msg, event) + return + end + + local logger = self:init() + if not logger then + return + end + + self.__handle = logger + self.__handle:log(level, msg, event) +end + +---Retrieves the path of the logfile +---@return string path of the logfile +function Log:get_path() + return logfile +end + +---Add a log entry at TRACE level +---@param msg any +---@param event any +function Log:trace(msg, event) + self:add_entry(self.levels.TRACE, msg, event) +end + +---Add a log entry at DEBUG level +---@param msg any +---@param event any +function Log:debug(msg, event) + self:add_entry(self.levels.DEBUG, msg, event) +end + +---Add a log entry at INFO level +---@param msg any +---@param event any +function Log:info(msg, event) + self:add_entry(self.levels.INFO, msg, event) +end + +---Add a log entry at WARN level +---@param msg any +---@param event any +function Log:warn(msg, event) + self:add_entry(self.levels.WARN, msg, event) +end + +---Add a log entry at ERROR level +---@param msg any +---@param event any +function Log:error(msg, event) + self:add_entry(self.levels.ERROR, msg, event) +end + +setmetatable({}, Log) + +return Log diff --git a/lua/core/lualine/colors.lua b/lua/lvim/core/lualine/colors.lua index 4984cd1f..4984cd1f 100644 --- a/lua/core/lualine/colors.lua +++ b/lua/lvim/core/lualine/colors.lua diff --git a/lua/core/lualine/components.lua b/lua/lvim/core/lualine/components.lua index 3ee2fdf8..b10fdad9 100644 --- a/lua/core/lualine/components.lua +++ b/lua/lvim/core/lualine/components.lua @@ -1,5 +1,5 @@ -local conditions = require "core.lualine.conditions" -local colors = require "core.lualine.colors" +local conditions = require "lvim.core.lualine.conditions" +local colors = require "lvim.core.lualine.colors" local function diff_source() local gitsigns = vim.b.gitsigns_status_dict @@ -46,7 +46,7 @@ return { }, python_env = { function() - local utils = require "core.lualine.utils" + local utils = require "lvim.core.lualine.utils" if vim.bo.filetype == "python" then local venv = os.getenv "CONDA_DEFAULT_ENV" if venv then @@ -103,13 +103,13 @@ return { end -- add formatter - local formatters = require "lsp.null-ls.formatters" - local supported_formatters = formatters.list_supported_names(buf_ft) + local formatters = require "lvim.lsp.null-ls.formatters" + local supported_formatters = formatters.list_registered_providers(buf_ft) vim.list_extend(buf_client_names, supported_formatters) -- add linter - local linters = require "lsp.null-ls.linters" - local supported_linters = linters.list_supported_names(buf_ft) + local linters = require "lvim.lsp.null-ls.linters" + local supported_linters = linters.list_registered_providers(buf_ft) vim.list_extend(buf_client_names, supported_linters) return table.concat(buf_client_names, ", ") diff --git a/lua/core/lualine/conditions.lua b/lua/lvim/core/lualine/conditions.lua index 3ee4fbb8..3ee4fbb8 100644 --- a/lua/core/lualine/conditions.lua +++ b/lua/lvim/core/lualine/conditions.lua diff --git a/lua/core/lualine/init.lua b/lua/lvim/core/lualine/init.lua index aa6fe098..c5d024c2 100644 --- a/lua/core/lualine/init.lua +++ b/lua/lvim/core/lualine/init.lua @@ -33,8 +33,8 @@ M.config = function() end M.setup = function() - require("core.lualine.styles").update() - require("core.lualine.utils").validate_theme() + require("lvim.core.lualine.styles").update() + require("lvim.core.lualine.utils").validate_theme() local lualine = require "lualine" lualine.setup(lvim.builtin.lualine) diff --git a/lua/core/lualine/styles.lua b/lua/lvim/core/lualine/styles.lua index 19097424..0843aead 100644 --- a/lua/core/lualine/styles.lua +++ b/lua/lvim/core/lualine/styles.lua @@ -1,5 +1,5 @@ local M = {} -local components = require "core.lualine.components" +local components = require "lvim.core.lualine.components" local styles = { lvim = nil, @@ -111,7 +111,7 @@ styles.lvim = { function M.get_style(style) local style_keys = vim.tbl_keys(styles) if not vim.tbl_contains(style_keys, style) then - local Log = require "core.log" + local Log = require "lvim.core.log" Log:error( "Invalid lualine style", string.format('"%s"', style), diff --git a/lua/core/lualine/utils.lua b/lua/lvim/core/lualine/utils.lua index cf80a99e..cf80a99e 100644 --- a/lua/core/lualine/utils.lua +++ b/lua/lvim/core/lualine/utils.lua diff --git a/lua/core/nvimtree.lua b/lua/lvim/core/nvimtree.lua index 55cc6175..d9e6fb5d 100644 --- a/lua/core/nvimtree.lua +++ b/lua/lvim/core/nvimtree.lua @@ -1,18 +1,26 @@ local M = {} -local Log = require "core.log" +local Log = require "lvim.core.log" function M.config() lvim.builtin.nvimtree = { active = true, on_config_done = nil, setup = { - open_on_setup = 0, - auto_close = 1, - open_on_tab = 0, + open_on_setup = false, + auto_close = true, + open_on_tab = false, update_focused_file = { - enable = 1, + enable = true, + }, + diagnostics = { + enable = true, + icons = { + hint = "", + info = "", + warning = "", + error = "", + }, }, - lsp_diagnostics = 1, view = { width = 30, side = "left", @@ -74,10 +82,10 @@ function M.setup() -- Implicitly update nvim-tree when project module is active if lvim.builtin.project.active then lvim.builtin.nvimtree.respect_buf_cwd = 1 - lvim.builtin.nvimtree.setup.update_cwd = 1 - lvim.builtin.nvimtree.setup.disable_netrw = 0 - lvim.builtin.nvimtree.setup.hijack_netrw = 0 - vim.g.netrw_banner = 0 + lvim.builtin.nvimtree.setup.update_cwd = true + lvim.builtin.nvimtree.setup.disable_netrw = false + lvim.builtin.nvimtree.setup.hijack_netrw = false + vim.g.netrw_banner = false end local tree_cb = nvim_tree_config.nvim_tree_callback @@ -101,7 +109,7 @@ function M.setup() open() end - vim.cmd "au WinClosed * lua require('core.nvimtree').on_close()" + vim.cmd "au WinClosed * lua require('lvim.core.nvimtree').on_close()" if lvim.builtin.nvimtree.on_config_done then lvim.builtin.nvimtree.on_config_done(nvim_tree_config) diff --git a/lua/core/project.lua b/lua/lvim/core/project.lua index e7527440..e7527440 100644 --- a/lua/core/project.lua +++ b/lua/lvim/core/project.lua diff --git a/lua/lvim/core/telescope.lua b/lua/lvim/core/telescope.lua new file mode 100644 index 00000000..7911d433 --- /dev/null +++ b/lua/lvim/core/telescope.lua @@ -0,0 +1,134 @@ +local M = {} + +function M.config() + -- Define this minimal config so that it's available if telescope is not yet available. + lvim.builtin.telescope = { + ---@usage disable telescope completely [not recommeded] + active = true, + on_config_done = nil, + } + + lvim.builtin.telescope = vim.tbl_extend("force", lvim.builtin.telescope, { + defaults = { + prompt_prefix = " ", + selection_caret = " ", + entry_prefix = " ", + initial_mode = "insert", + selection_strategy = "reset", + sorting_strategy = "descending", + layout_strategy = "horizontal", + layout_config = { + width = 0.75, + preview_cutoff = 120, + horizontal = { mirror = false }, + vertical = { mirror = false }, + }, + vimgrep_arguments = { + "rg", + "--color=never", + "--no-heading", + "--with-filename", + "--line-number", + "--column", + "--smart-case", + "--hidden", + }, + file_ignore_patterns = {}, + path_display = { shorten = 5 }, + winblend = 0, + border = {}, + borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, + color_devicons = true, + set_env = { ["COLORTERM"] = "truecolor" }, -- default = nil, + pickers = { + find_files = { + find_command = { "fd", "--type=file", "--hidden", "--smart-case" }, + }, + live_grep = { + --@usage don't include the filename in the search results + only_sort_text = true, + }, + }, + }, + extensions = { + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, -- override the generic sorter + override_file_sorter = true, -- override the file sorter + case_mode = "smart_case", -- or "ignore_case" or "respect_case" + }, + }, + }) +end + +function M.code_actions() + local opts = { + winblend = 15, + layout_config = { + prompt_position = "top", + width = 80, + height = 12, + }, + borderchars = { + prompt = { "─", "│", " ", "│", "╭", "╮", "│", "│" }, + results = { "─", "│", "─", "│", "├", "┤", "╯", "╰" }, + preview = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, + }, + border = {}, + previewer = false, + shorten_path = false, + } + local builtin = require "telescope.builtin" + local themes = require "telescope.themes" + builtin.lsp_code_actions(themes.get_dropdown(opts)) +end + +function M.setup() + local previewers = require "telescope.previewers" + local sorters = require "telescope.sorters" + local actions = require "telescope.actions" + + lvim.builtin.telescope = vim.tbl_extend("keep", { + file_previewer = previewers.vim_buffer_cat.new, + grep_previewer = previewers.vim_buffer_vimgrep.new, + qflist_previewer = previewers.vim_buffer_qflist.new, + file_sorter = sorters.get_fuzzy_file, + generic_sorter = sorters.get_generic_fuzzy_sorter, + ---@usage Mappings are fully customizable. Many familiar mapping patterns are setup as defaults. + mappings = { + i = { + ["<C-n>"] = actions.move_selection_next, + ["<C-p>"] = actions.move_selection_previous, + ["<C-c>"] = actions.close, + ["<C-j>"] = actions.cycle_history_next, + ["<C-k>"] = actions.cycle_history_prev, + ["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist, + ["<CR>"] = actions.select_default + actions.center, + }, + n = { + ["<C-n>"] = actions.move_selection_next, + ["<C-p>"] = actions.move_selection_previous, + ["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist, + }, + }, + }, lvim.builtin.telescope) + + local telescope = require "telescope" + telescope.setup(lvim.builtin.telescope) + + if lvim.builtin.project.active then + pcall(function() + require("telescope").load_extension "projects" + end) + end + + if lvim.builtin.telescope.on_config_done then + lvim.builtin.telescope.on_config_done(telescope) + end + + if lvim.builtin.telescope.extensions and lvim.builtin.telescope.extensions.fzf then + require("telescope").load_extension "fzf" + end +end + +return M diff --git a/lua/lvim/core/telescope/custom-finders.lua b/lua/lvim/core/telescope/custom-finders.lua new file mode 100644 index 00000000..c3347fd0 --- /dev/null +++ b/lua/lvim/core/telescope/custom-finders.lua @@ -0,0 +1,80 @@ +local M = {} + +local _, builtin = pcall(require, "telescope.builtin") +local _, finders = pcall(require, "telescope.finders") +local _, pickers = pcall(require, "telescope.pickers") +local _, sorters = pcall(require, "telescope.sorters") +local _, themes = pcall(require, "telescope.themes") +local _, actions = pcall(require, "telescope.actions") +local _, previewers = pcall(require, "telescope.previewers") +local _, make_entry = pcall(require, "telescope.make_entry") + +local utils = require "lvim.utils" + +function M.find_lunarvim_files(opts) + opts = opts or {} + local theme_opts = themes.get_ivy { + sorting_strategy = "ascending", + layout_strategy = "bottom_pane", + prompt_prefix = ">> ", + prompt_title = "~ LunarVim files ~", + cwd = get_runtime_dir(), + search_dirs = { utils.join_paths(get_runtime_dir(), "lvim"), lvim.lsp.templates_dir }, + } + opts = vim.tbl_deep_extend("force", theme_opts, opts) + builtin.find_files(opts) +end + +function M.grep_lunarvim_files(opts) + opts = opts or {} + local theme_opts = themes.get_ivy { + sorting_strategy = "ascending", + layout_strategy = "bottom_pane", + prompt_prefix = ">> ", + prompt_title = "~ search LunarVim ~", + cwd = get_runtime_dir(), + search_dirs = { utils.join_paths(get_runtime_dir(), "lvim"), lvim.lsp.templates_dir }, + } + opts = vim.tbl_deep_extend("force", theme_opts, opts) + builtin.live_grep(opts) +end + +function M.view_lunarvim_changelog() + local opts = {} + opts.entry_maker = make_entry.gen_from_git_commits(opts) + + pickers.new(opts, { + prompt_title = "LunarVim changelog", + + finder = finders.new_oneshot_job( + vim.tbl_flatten { + "git", + "log", + "--pretty=oneline", + "--abbrev-commit", + "--", + ".", + }, + opts + ), + previewer = { + previewers.git_commit_diff_to_parent.new(opts), + previewers.git_commit_diff_to_head.new(opts), + previewers.git_commit_diff_as_was.new(opts), + previewers.git_commit_message.new(opts), + }, + + --TODO: consider opening a diff view when pressing enter + attach_mappings = function(_, map) + map("i", "<enter>", actions._close) + map("n", "<enter>", actions._close) + map("i", "<esc>", actions._close) + map("n", "<esc>", actions._close) + map("n", "q", actions._close) + return true + end, + sorter = sorters.generic_sorter, + }):find() +end + +return M diff --git a/lua/core/terminal.lua b/lua/lvim/core/terminal.lua index 3a0c6e46..aa6989ec 100644 --- a/lua/core/terminal.lua +++ b/lua/lvim/core/terminal.lua @@ -1,5 +1,5 @@ local M = {} -local Log = require "core.log" +local Log = require "lvim.core.log" M.config = function() lvim.builtin["terminal"] = { @@ -48,7 +48,7 @@ end M.setup = function() local terminal = require "toggleterm" for _, exec in pairs(lvim.builtin.terminal.execs) do - require("core.terminal").add_exec(exec[1], exec[2], exec[3]) + require("lvim.core.terminal").add_exec(exec[1], exec[2], exec[3]) end terminal.setup(lvim.builtin.terminal) @@ -61,7 +61,7 @@ M.add_exec = function(exec, keymap, name) vim.api.nvim_set_keymap( "n", "<leader>" .. keymap, - "<cmd>lua require('core.terminal')._exec_toggle('" .. exec .. "')<CR>", + "<cmd>lua require('lvim.core.terminal')._exec_toggle('" .. exec .. "')<CR>", { noremap = true, silent = true } ) lvim.builtin.which_key.mappings[keymap] = name diff --git a/lua/core/treesitter.lua b/lua/lvim/core/treesitter.lua index d63024e6..ce99deba 100644 --- a/lua/core/treesitter.lua +++ b/lua/lvim/core/treesitter.lua @@ -1,5 +1,5 @@ local M = {} -local Log = require "core.log" +local Log = require "lvim.core.log" M.config = function() lvim.builtin.treesitter = { diff --git a/lua/core/which-key.lua b/lua/lvim/core/which-key.lua index c9e9b2f4..fcaeacf5 100644 --- a/lua/core/which-key.lua +++ b/lua/lvim/core/which-key.lua @@ -61,12 +61,12 @@ M.config = function() -- NOTE: Prefer using : over <cmd> as the latter avoids going back in normal-mode. -- see https://neovim.io/doc/user/map.html#:map-cmd vmappings = { - ["/"] = { ":CommentToggle<CR>", "Comment" }, + ["/"] = { "<ESC><CMD>lua ___comment_gc(vim.fn.visualmode())<CR>", "Comment" }, }, mappings = { ["w"] = { "<cmd>w!<CR>", "Save" }, ["q"] = { "<cmd>q!<CR>", "Quit" }, - ["/"] = { "<cmd>CommentToggle<CR>", "Comment" }, + ["/"] = { "<cmd>lua require('Comment').toggle()<CR>", "Comment" }, ["c"] = { "<cmd>BufferClose!<CR>", "Close Buffer" }, ["f"] = { "<cmd>Telescope find_files<CR>", "Find File" }, ["h"] = { "<cmd>nohlsearch<CR>", "No Highlight" }, @@ -98,7 +98,7 @@ M.config = function() name = "Packer", c = { "<cmd>PackerCompile<cr>", "Compile" }, i = { "<cmd>PackerInstall<cr>", "Install" }, - r = { "<cmd>lua require('utils').reload_lv_config()<cr>", "Reload" }, + r = { "<cmd>lua require('lvim.utils').reload_lv_config()<cr>", "Reload" }, s = { "<cmd>PackerSync<cr>", "Sync" }, S = { "<cmd>PackerStatus<cr>", "Status" }, u = { "<cmd>PackerUpdate<cr>", "Update" }, @@ -139,7 +139,7 @@ M.config = function() l = { name = "LSP", - a = { "<cmd>lua require('core.telescope').code_actions()<cr>", "Code Action" }, + a = { "<cmd>lua require('lvim.core.telescope').code_actions()<cr>", "Code Action" }, d = { "<cmd>Telescope lsp_document_diagnostics<cr>", "Document Diagnostics", @@ -162,9 +162,9 @@ M.config = function() l = { "<cmd>lua vim.lsp.codelens.run()<cr>", "CodeLens Action" }, p = { name = "Peek", - d = { "<cmd>lua require('lsp.peek').Peek('definition')<cr>", "Definition" }, - t = { "<cmd>lua require('lsp.peek').Peek('typeDefinition')<cr>", "Type Definition" }, - i = { "<cmd>lua require('lsp.peek').Peek('implementation')<cr>", "Implementation" }, + d = { "<cmd>lua require('lvim.lsp.peek').Peek('definition')<cr>", "Definition" }, + t = { "<cmd>lua require('lvim.lsp.peek').Peek('typeDefinition')<cr>", "Type Definition" }, + i = { "<cmd>lua require('lvim.lsp.peek').Peek('implementation')<cr>", "Implementation" }, }, q = { "<cmd>lua vim.lsp.diagnostic.set_loclist()<cr>", "Quickfix" }, r = { "<cmd>lua vim.lsp.buf.rename()<cr>", "Rename" }, @@ -181,43 +181,46 @@ M.config = function() "Edit config.lua", }, f = { - "<cmd>lua require('core.telescope').find_lunarvim_files()<cr>", + "<cmd>lua require('lvim.core.telescope.custom-finders').find_lunarvim_files()<cr>", "Find LunarVim files", }, g = { - "<cmd>lua require('core.telescope').grep_lunarvim_files()<cr>", + "<cmd>lua require('lvim.core.telescope.custom-finders').grep_lunarvim_files()<cr>", "Grep LunarVim files", }, - k = { "<cmd>lua require('keymappings').print()<cr>", "View LunarVim's default keymappings" }, + k = { "<cmd>lua require('lvim.keymappings').print()<cr>", "View LunarVim's default keymappings" }, i = { - "<cmd>lua require('core.info').toggle_popup(vim.bo.filetype)<cr>", + "<cmd>lua require('lvim.core.info').toggle_popup(vim.bo.filetype)<cr>", "Toggle LunarVim Info", }, I = { - "<cmd>lua require('core.telescope').view_lunarvim_changelog()<cr>", + "<cmd>lua require('lvim.core.telescope.custom-finders').view_lunarvim_changelog()<cr>", "View LunarVim's changelog", }, l = { name = "+logs", d = { - "<cmd>lua require('core.terminal').toggle_log_view(require('core.log').get_path())<cr>", + "<cmd>lua require('lvim.core.terminal').toggle_log_view(require('lvim.core.log').get_path())<cr>", "view default log", }, - D = { "<cmd>lua vim.fn.execute('edit ' .. require('core.log').get_path())<cr>", "Open the default logfile" }, - l = { "<cmd>lua require('core.terminal').toggle_log_view(vim.lsp.get_log_path())<cr>", "view lsp log" }, + D = { + "<cmd>lua vim.fn.execute('edit ' .. require('lvim.core.log').get_path())<cr>", + "Open the default logfile", + }, + l = { "<cmd>lua require('lvim.core.terminal').toggle_log_view(vim.lsp.get_log_path())<cr>", "view lsp log" }, L = { "<cmd>lua vim.fn.execute('edit ' .. vim.lsp.get_log_path())<cr>", "Open the LSP logfile" }, n = { - "<cmd>lua require('core.terminal').toggle_log_view(os.getenv('NVIM_LOG_FILE'))<cr>", + "<cmd>lua require('lvim.core.terminal').toggle_log_view(os.getenv('NVIM_LOG_FILE'))<cr>", "view neovim log", }, N = { "<cmd>edit $NVIM_LOG_FILE<cr>", "Open the Neovim logfile" }, p = { - "<cmd>lua require('core.terminal').toggle_log_view('packer.nvim')<cr>", + "<cmd>lua require('lvim.core.terminal').toggle_log_view('packer.nvim')<cr>", "view packer log", }, P = { "<cmd>exe 'edit '.stdpath('cache').'/packer.nvim.log'<cr>", "Open the Packer logfile" }, }, - r = { "<cmd>lua require('utils').reload_lv_config()<cr>", "Reload configurations" }, + r = { "<cmd>lua require('lvim.utils').reload_lv_config()<cr>", "Reload configurations" }, u = { "<cmd>LvimUpdate<cr>", "Update LunarVim" }, }, s = { diff --git a/lua/impatient.lua b/lua/lvim/impatient.lua index d438851c..4fdc0026 100644 --- a/lua/impatient.lua +++ b/lua/lvim/impatient.lua @@ -121,12 +121,12 @@ end function M.enable_profile() M.profile = {} M.print_profile = function() - M.profile["impatient"] = { + M.profile["lvim.impatient"] = { resolve = 0, load = impatient_dur, loader = "standard", } - require("impatient.profile").print_profile(M.profile) + require("lvim.impatient.profile").print_profile(M.profile) end vim.cmd [[command! LuaCacheProfile lua _G.__luacache.print_profile()]] end diff --git a/lua/impatient/profile.lua b/lua/lvim/impatient/profile.lua index 0f4f8236..0f4f8236 100644 --- a/lua/impatient/profile.lua +++ b/lua/lvim/impatient/profile.lua diff --git a/lua/interface/popup.lua b/lua/lvim/interface/popup.lua index b628125c..b628125c 100644 --- a/lua/interface/popup.lua +++ b/lua/lvim/interface/popup.lua diff --git a/lua/interface/text.lua b/lua/lvim/interface/text.lua index 6bf280e8..6bf280e8 100644 --- a/lua/interface/text.lua +++ b/lua/lvim/interface/text.lua diff --git a/lua/keymappings.lua b/lua/lvim/keymappings.lua index 027ca83f..be8ebe96 100644 --- a/lua/keymappings.lua +++ b/lua/lvim/keymappings.lua @@ -1,5 +1,5 @@ local M = {} -local Log = require "core.log" +local Log = require "lvim.core.log" local generic_opts_any = { noremap = true, silent = true } @@ -81,10 +81,6 @@ function M.config() ["<A-Down>"] = "<C-\\><C-N><C-w>j", ["<A-Left>"] = "<C-\\><C-N><C-w>h", ["<A-Right>"] = "<C-\\><C-N><C-w>l", - -- navigate tab completion with <c-j> and <c-k> - -- runs conditionally - ["<C-j>"] = { 'pumvisible() ? "\\<down>" : "\\<C-j>"', { expr = true, noremap = true } }, - ["<C-k>"] = { 'pumvisible() ? "\\<up>" : "\\<C-k>"', { expr = true, noremap = true } }, }, ---@usage change or add keymappings for normal mode diff --git a/lua/lsp/config.lua b/lua/lvim/lsp/config.lua index f13d9659..30336cc2 100644 --- a/lua/lsp/config.lua +++ b/lua/lvim/lsp/config.lua @@ -30,9 +30,9 @@ return { ["gr"] = { "<cmd>lua vim.lsp.buf.references()<CR>", "Goto references" }, ["gI"] = { "<cmd>lua vim.lsp.buf.implementation()<CR>", "Goto Implementation" }, ["gs"] = { "<cmd>lua vim.lsp.buf.signature_help()<CR>", "show signature help" }, - ["gp"] = { "<cmd>lua require'lsp.peek'.Peek('definition')<CR>", "Peek definition" }, + ["gp"] = { "<cmd>lua require'lvim.lsp.peek'.Peek('definition')<CR>", "Peek definition" }, ["gl"] = { - "<cmd>lua require'lsp.handlers'.show_line_diagnostics()<CR>", + "<cmd>lua require'lvim.lsp.handlers'.show_line_diagnostics()<CR>", "Show line diagnostics", }, }, diff --git a/lua/lsp/handlers.lua b/lua/lvim/lsp/handlers.lua index ffb7564a..ffb7564a 100644 --- a/lua/lsp/handlers.lua +++ b/lua/lvim/lsp/handlers.lua diff --git a/lua/lsp/init.lua b/lua/lvim/lsp/init.lua index 88111005..45ba04e0 100644 --- a/lua/lsp/init.lua +++ b/lua/lvim/lsp/init.lua @@ -1,6 +1,6 @@ local M = {} -local Log = require "core.log" -local utils = require "utils" +local Log = require "lvim.core.log" +local utils = require "lvim.utils" local function lsp_highlight_document(client) if lvim.lsp.document_highlight == false then @@ -86,15 +86,14 @@ function M.common_capabilities() end local function select_default_formater(client) - local client_formatting = client.resolved_capabilities.document_formatting - or client.resolved_capabilities.document_range_formatting - if client.name == "null-ls" or not client_formatting then + if client.name == "null-ls" or not client.resolved_capabilities.document_formatting then return end Log:debug("Checking for formatter overriding for " .. client.name) + local formatters = require "lvim.lsp.null-ls.formatters" local client_filetypes = client.config.filetypes or {} for _, filetype in ipairs(client_filetypes) do - if lvim.lang[filetype] and #vim.tbl_keys(lvim.lang[filetype].formatters) > 0 then + if #vim.tbl_keys(formatters.list_registered_providers(filetype)) > 0 then Log:debug("Formatter overriding detected. Disabling formatting capabilities for " .. client.name) client.resolved_capabilities.document_formatting = false client.resolved_capabilities.document_range_formatting = false @@ -149,17 +148,17 @@ function M.setup() vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = sign.name }) end - require("lsp.handlers").setup() + require("lvim.lsp.handlers").setup() if not utils.is_directory(lvim.lsp.templates_dir) then - require("lsp.templates").generate_templates() + require("lvim.lsp.templates").generate_templates() end bootstrap_nlsp { config_home = utils.join_paths(get_config_dir(), "lsp-settings") } - require("lsp.null-ls").setup() + require("lvim.lsp.null-ls").setup() - require("utils").toggle_autoformat() + require("lvim.utils").toggle_autoformat() end return M diff --git a/lua/lsp/manager.lua b/lua/lvim/lsp/manager.lua index 9cb81910..678a08af 100644 --- a/lua/lsp/manager.lua +++ b/lua/lvim/lsp/manager.lua @@ -1,7 +1,7 @@ local M = {} -local Log = require "core.log" -local lsp_utils = require "lsp.utils" +local Log = require "lvim.core.log" +local lsp_utils = require "lvim.lsp.utils" function M.init_defaults(languages) for _, entry in ipairs(languages) do @@ -30,12 +30,12 @@ end ---@return table local function resolve_config(name, user_config) local config = { - on_attach = require("lsp").common_on_attach, - on_init = require("lsp").common_on_init, - capabilities = require("lsp").common_capabilities(), + on_attach = require("lvim.lsp").common_on_attach, + on_init = require("lvim.lsp").common_on_init, + capabilities = require("lvim.lsp").common_capabilities(), } - local status_ok, custom_config = pcall(require, "lsp/providers/" .. name) + local status_ok, custom_config = pcall(require, "lvim.lsp/providers/" .. name) if status_ok then Log:debug("Using custom configuration for requested server: " .. name) config = vim.tbl_deep_extend("force", config, custom_config) diff --git a/lua/lsp/null-ls/formatters.lua b/lua/lvim/lsp/null-ls/formatters.lua index 4728b908..87583abd 100644 --- a/lua/lsp/null-ls/formatters.lua +++ b/lua/lvim/lsp/null-ls/formatters.lua @@ -1,10 +1,10 @@ local M = {} local null_ls = require "null-ls" -local services = require "lsp.null-ls.services" -local Log = require "core.log" +local services = require "lvim.lsp.null-ls.services" +local Log = require "lvim.core.log" -function M.list_supported_names(filetype) +function M.list_registered_providers(filetype) local null_ls_methods = require "null-ls.methods" local formatter_method = null_ls_methods.internal["FORMATTING"] local registered_providers = services.list_registered_providers_names(filetype) @@ -13,7 +13,7 @@ end function M.list_available(filetype) local formatters = {} - local tbl = require "utils.table" + local tbl = require "lvim.utils.table" for _, provider in pairs(null_ls.builtins.formatting) do if tbl.contains(provider.filetypes or {}, function(ft) return ft == "*" or ft == filetype diff --git a/lua/lsp/null-ls/init.lua b/lua/lvim/lsp/null-ls/init.lua index 0d030c22..ef4a1844 100644 --- a/lua/lsp/null-ls/init.lua +++ b/lua/lvim/lsp/null-ls/init.lua @@ -1,8 +1,8 @@ local M = {} -local Log = require "core.log" -local formatters = require "lsp.null-ls.formatters" -local linters = require "lsp.null-ls.linters" +local Log = require "lvim.core.log" +local formatters = require "lvim.lsp.null-ls.formatters" +local linters = require "lvim.lsp.null-ls.linters" function M:setup() local status_ok, null_ls = pcall(require, "null-ls") @@ -12,6 +12,12 @@ function M:setup() end null_ls.config() + local default_opts = require("lvim.lsp").get_common_opts() + + if vim.tbl_isempty(lvim.lsp.null_ls.setup or {}) then + lvim.lsp.null_ls.setup = default_opts + end + require("lspconfig")["null-ls"].setup(lvim.lsp.null_ls.setup) for filetype, config in pairs(lvim.lang) do if not vim.tbl_isempty(config.formatters) then diff --git a/lua/lsp/null-ls/linters.lua b/lua/lvim/lsp/null-ls/linters.lua index 549c6cdd..1069ac58 100644 --- a/lua/lsp/null-ls/linters.lua +++ b/lua/lvim/lsp/null-ls/linters.lua @@ -1,10 +1,10 @@ local M = {} local null_ls = require "null-ls" -local services = require "lsp.null-ls.services" -local Log = require "core.log" +local services = require "lvim.lsp.null-ls.services" +local Log = require "lvim.core.log" -function M.list_supported_names(filetype) +function M.list_registered_providers(filetype) local null_ls_methods = require "null-ls.methods" local linter_method = null_ls_methods.internal["DIAGNOSTICS"] local registered_providers = services.list_registered_providers_names(filetype) @@ -13,7 +13,7 @@ end function M.list_available(filetype) local linters = {} - local tbl = require "utils.table" + local tbl = require "lvim.utils.table" for _, provider in pairs(null_ls.builtins.diagnostics) do if tbl.contains(provider.filetypes or {}, function(ft) return ft == "*" or ft == filetype diff --git a/lua/lsp/null-ls/services.lua b/lua/lvim/lsp/null-ls/services.lua index ef9e7d22..9cb29f49 100644 --- a/lua/lsp/null-ls/services.lua +++ b/lua/lvim/lsp/null-ls/services.lua @@ -2,7 +2,7 @@ local M = {} local function find_root_dir() local util = require "lspconfig/util" - local lsp_utils = require "lsp.utils" + local lsp_utils = require "lvim.lsp.utils" local ts_client = lsp_utils.is_client_active "typescript" if ts_client then diff --git a/lua/lsp/peek.lua b/lua/lvim/lsp/peek.lua index cb00488e..08345aff 100644 --- a/lua/lsp/peek.lua +++ b/lua/lvim/lsp/peek.lua @@ -130,7 +130,7 @@ function M.Peek(what) M.floating_buf, "n", "<CR>", - ":lua require('lsp.peek').open_file()<CR>", + ":lua require('lvim.lsp.peek').open_file()<CR>", { noremap = true, silent = true } ) else diff --git a/lua/lsp/providers/jsonls.lua b/lua/lvim/lsp/providers/jsonls.lua index 1fffa686..1fffa686 100644 --- a/lua/lsp/providers/jsonls.lua +++ b/lua/lvim/lsp/providers/jsonls.lua diff --git a/lua/lsp/providers/sumneko_lua.lua b/lua/lvim/lsp/providers/sumneko_lua.lua index 4fee1fd1..6585c8c7 100644 --- a/lua/lsp/providers/sumneko_lua.lua +++ b/lua/lvim/lsp/providers/sumneko_lua.lua @@ -6,7 +6,7 @@ local opts = { }, workspace = { library = { - [require("utils").join_paths(get_runtime_dir(), "lvim", "lua")] = true, + [require("lvim.utils").join_paths(get_runtime_dir(), "lvim", "lua")] = true, [vim.fn.expand "$VIMRUNTIME/lua"] = true, [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true, }, diff --git a/lua/lsp/providers/vuels.lua b/lua/lvim/lsp/providers/vuels.lua index 3f44275d..326363fd 100644 --- a/lua/lsp/providers/vuels.lua +++ b/lua/lvim/lsp/providers/vuels.lua @@ -1,7 +1,7 @@ local opts = { setup = { root_dir = function(fname) - local util = require "lspconfig/util" + local util = require "lvim.lspconfig/util" return util.root_pattern "package.json"(fname) or util.root_pattern "vue.config.js"(fname) or vim.fn.getcwd() end, init_options = { diff --git a/lua/lsp/providers/yamlls.lua b/lua/lvim/lsp/providers/yamlls.lua index 156a35b0..156a35b0 100644 --- a/lua/lsp/providers/yamlls.lua +++ b/lua/lvim/lsp/providers/yamlls.lua diff --git a/lua/lsp/templates.lua b/lua/lvim/lsp/templates.lua index fbbc37f6..e0741b1b 100644 --- a/lua/lsp/templates.lua +++ b/lua/lvim/lsp/templates.lua @@ -1,8 +1,8 @@ local M = {} -local Log = require "core.log" -local utils = require "utils" -local get_supported_filetypes = require("lsp.utils").get_supported_filetypes +local Log = require "lvim.core.log" +local utils = require "lvim.utils" +local get_supported_filetypes = require("lvim.lsp.utils").get_supported_filetypes local ftplugin_dir = lvim.lsp.templates_dir @@ -59,7 +59,7 @@ function M.generate_ftplugin(server_name, dir) for _, filetype in ipairs(filetypes) do local filename = join_paths(dir, filetype .. ".lua") - local setup_cmd = string.format([[require("lsp.manager").setup(%q)]], server_name) + local setup_cmd = string.format([[require("lvim.lsp.manager").setup(%q)]], server_name) -- print("using setup_cmd: " .. setup_cmd) -- overwrite the file completely utils.write_file(filename, setup_cmd .. "\n", "a") diff --git a/lua/lsp/utils.lua b/lua/lvim/lsp/utils.lua index 59003406..a34fbf44 100644 --- a/lua/lsp/utils.lua +++ b/lua/lvim/lsp/utils.lua @@ -1,6 +1,6 @@ local M = {} -local tbl = require "utils.table" +local tbl = require "lvim.utils.table" function M.is_client_active(name) local clients = vim.lsp.get_active_clients() diff --git a/lua/lualine/themes/onedarker.lua b/lua/lvim/lualine/themes/onedarker.lua index 396657bb..396657bb 100644 --- a/lua/lualine/themes/onedarker.lua +++ b/lua/lvim/lualine/themes/onedarker.lua diff --git a/lua/plugin-loader.lua b/lua/lvim/plugin-loader.lua index c20dd21a..feef7ea7 100644 --- a/lua/plugin-loader.lua +++ b/lua/lvim/plugin-loader.lua @@ -1,7 +1,7 @@ local plugin_loader = {} -local utils = require "utils" -local Log = require "core.log" +local utils = require "lvim.utils" +local Log = require "lvim.core.log" -- we need to reuse this outside of init() local compile_path = get_config_dir() .. "/plugin/packer_compiled.lua" diff --git a/lua/plugins.lua b/lua/lvim/plugins.lua index c0ac1370..616b2fa0 100644 --- a/lua/plugins.lua +++ b/lua/lvim/plugins.lua @@ -8,6 +8,8 @@ return { { "williamboman/nvim-lsp-installer", }, + { "rcarriga/nvim-notify" }, + { "Tastyep/structlog.nvim" }, { "nvim-lua/popup.nvim" }, { "nvim-lua/plenary.nvim" }, @@ -15,15 +17,20 @@ return { { "nvim-telescope/telescope.nvim", config = function() - require("core.telescope").setup() + require("lvim.core.telescope").setup() end, disable = not lvim.builtin.telescope.active, }, + { + "nvim-telescope/telescope-fzf-native.nvim", + run = "make", + disable = not lvim.builtin.telescope.active, + }, -- Install nvim-cmp, and buffer source as a dependency { "hrsh7th/nvim-cmp", config = function() - require("core.cmp").setup() + require("lvim.core.cmp").setup() end, requires = { "L3MON4D3/LuaSnip", @@ -36,7 +43,7 @@ return { run = function() -- cmp's config requires cmp to be installed to run the first time if not lvim.builtin.cmp then - require("core.cmp").config() + require("lvim.core.cmp").config() end end, }, @@ -50,9 +57,8 @@ return { { "windwp/nvim-autopairs", -- event = "InsertEnter", - after = "nvim-cmp", config = function() - require("core.autopairs").setup() + require("lvim.core.autopairs").setup() end, disable = not lvim.builtin.autopairs.active, }, @@ -63,7 +69,7 @@ return { branch = "0.5-compat", -- run = ":TSUpdate", config = function() - require("core.treesitter").setup() + require("lvim.core.treesitter").setup() end, }, @@ -74,7 +80,7 @@ return { -- cmd = "NvimTreeToggle", commit = "edc74ee6c4aebdcbaea092557db372b93929f9d0", config = function() - require("core.nvimtree").setup() + require("lvim.core.nvimtree").setup() end, disable = not lvim.builtin.nvimtree.active, }, @@ -83,17 +89,19 @@ return { "lewis6991/gitsigns.nvim", config = function() - require("core.gitsigns").setup() + require("lvim.core.gitsigns").setup() end, event = "BufRead", disable = not lvim.builtin.gitsigns.active, }, -- Whichkey + -- TODO: change back to folke/which-key.nvim after folke got back { - "folke/which-key.nvim", + "abzcoding/which-key.nvim", + branch = "fix/neovim-6-position", config = function() - require("core.which-key").setup() + require("lvim.core.which-key").setup() end, event = "BufWinEnter", disable = not lvim.builtin.which_key.active, @@ -101,10 +109,10 @@ return { -- Comments { - "terrortylor/nvim-comment", + "numToStr/Comment.nvim", event = "BufRead", config = function() - require("core.comment").setup() + require("lvim.core.comment").setup() end, disable = not lvim.builtin.comment.active, }, @@ -113,7 +121,7 @@ return { { "ahmedkhalf/project.nvim", config = function() - require("core.project").setup() + require("lvim.core.project").setup() end, disable = not lvim.builtin.project.active, }, @@ -127,7 +135,7 @@ return { "shadmansaleh/lualine.nvim", -- "Lunarvim/lualine.nvim", config = function() - require("core.lualine").setup() + require("lvim.core.lualine").setup() end, disable = not lvim.builtin.lualine.active, }, @@ -135,7 +143,7 @@ return { { "romgrk/barbar.nvim", config = function() - require("core.bufferline").setup() + require("lvim.core.bufferline").setup() end, event = "BufWinEnter", disable = not lvim.builtin.bufferline.active, @@ -146,7 +154,7 @@ return { "mfussenegger/nvim-dap", -- event = "BufWinEnter", config = function() - require("core.dap").setup() + require("lvim.core.dap").setup() end, disable = not lvim.builtin.dap.active, }, @@ -164,7 +172,7 @@ return { "ChristianChiarulli/dashboard-nvim", event = "BufWinEnter", config = function() - require("core.dashboard").setup() + require("lvim.core.dashboard").setup() end, disable = not lvim.builtin.dashboard.active, }, @@ -174,7 +182,7 @@ return { "akinsho/toggleterm.nvim", event = "BufWinEnter", config = function() - require("core.terminal").setup() + require("lvim.core.terminal").setup() end, disable = not lvim.builtin.terminal.active, }, diff --git a/lua/utils/ft.lua b/lua/lvim/utils/ft.lua index e9852e6f..e9852e6f 100644 --- a/lua/utils/ft.lua +++ b/lua/lvim/utils/ft.lua diff --git a/lua/utils/hooks.lua b/lua/lvim/utils/hooks.lua index fa667cfd..d536bc76 100644 --- a/lua/utils/hooks.lua +++ b/lua/lvim/utils/hooks.lua @@ -1,24 +1,26 @@ local M = {} -local Log = require "core.log" +local Log = require "lvim.core.log" local in_headless = #vim.api.nvim_list_uis() == 0 function M.run_pre_update() Log:debug "Starting pre-update hook" + _G.__luacache.clear_cache() end ---Reset any startup cache files used by Packer and Impatient +---It also forces regenerating any template ftplugin files ---Tip: Useful for clearing any outdated settings function M.reset_cache() _G.__luacache.clear_cache() - require("plugin-loader"):cache_reset() + require("lvim.plugin-loader"):cache_reset() + package.loaded["lvim.lsp.templates"] = nil + require("lvim.lsp.templates").generate_templates() end function M.run_post_update() - M.reset_cache() Log:debug "Starting post-update hook" - package.loaded["lsp.templates"] = nil - require("lsp.templates").generate_templates() + M.reset_cache() if not in_headless then vim.schedule(function() diff --git a/lua/utils/init.lua b/lua/lvim/utils/init.lua index eaac54f4..cebbe75c 100644 --- a/lua/utils/init.lua +++ b/lua/lvim/utils/init.lua @@ -1,5 +1,5 @@ local utils = {} -local Log = require "core.log" +local Log = require "lvim.core.log" local uv = vim.loop -- recursive Print (structure, limit, separator) @@ -61,7 +61,7 @@ end -- autoformat function utils.toggle_autoformat() if lvim.format_on_save then - require("core.autocmds").define_augroups { + require("lvim.core.autocmds").define_augroups { autoformat = { { "BufWritePre", @@ -83,26 +83,6 @@ function utils.toggle_autoformat() end end -function utils.reload_lv_config() - require("core.lualine").config() - - local config = require "config" - config:load() - - require("keymappings").setup() -- this should be done before loading the plugins - vim.cmd("source " .. utils.join_paths(get_runtime_dir(), "lvim", "lua", "plugins.lua")) - local plugins = require "plugins" - utils.toggle_autoformat() - local plugin_loader = require "plugin-loader" - plugin_loader:cache_reset() - plugin_loader:load { plugins, lvim.plugins } - vim.cmd ":PackerInstall" - vim.cmd ":PackerCompile" - -- vim.cmd ":PackerClean" - require("lsp").setup() - Log:info "Reloaded configuration" -end - function utils.unrequire(m) package.loaded[m] = nil _G[m] = nil @@ -147,18 +127,6 @@ function utils.is_directory(path) return stat and stat.type == "directory" or false end -function utils.write_file(path, txt, flag) - uv.fs_open(path, flag, 438, function(open_err, fd) - assert(not open_err, open_err) - uv.fs_write(fd, txt, -1, function(write_err) - assert(not write_err, write_err) - uv.fs_close(fd, function(close_err) - assert(not close_err, close_err) - end) - end) - end) -end - utils.join_paths = _G.join_paths function utils.write_file(path, txt, flag) @@ -215,7 +183,7 @@ function utils.file_contains(file, query) end function utils.log_contains(query) - local logfile = require("core.log"):get_path() + local logfile = require("lvim.core.log"):get_path() local stdout, ret, stderr = utils.search_file(logfile, query) if ret == 0 then return true diff --git a/lua/utils/table.lua b/lua/lvim/utils/table.lua index 1ac5949e..1ac5949e 100644 --- a/lua/utils/table.lua +++ b/lua/lvim/utils/table.lua |