diff options
| author | crupest <crupest@outlook.com> | 2024-09-07 02:59:28 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2024-09-07 02:59:28 +0800 | 
| commit | 8c7363cab0c31db715484f6c3b59cc4f983d7373 (patch) | |
| tree | f1c05e14d3e4a2955e49121ddf8341e7fc8e951b /configs | |
| parent | 166d458acb6480bef7b1a1aee5ce63569e5e0323 (diff) | |
| download | crupest-8c7363cab0c31db715484f6c3b59cc4f983d7373.tar.gz crupest-8c7363cab0c31db715484f6c3b59cc4f983d7373.tar.bz2 crupest-8c7363cab0c31db715484f6c3b59cc4f983d7373.zip  | |
config(nvim): refactor a lot.
Diffstat (limited to 'configs')
28 files changed, 268 insertions, 770 deletions
diff --git a/configs/nvim/init.lua b/configs/nvim/init.lua index 92cfedb..a2b84aa 100644 --- a/configs/nvim/init.lua +++ b/configs/nvim/init.lua @@ -19,10 +19,7 @@ if is_win then      let &shellpipe  = '2>&1 | %%{ "$_" } | tee %s; exit $LastExitCode'      set shellquote= shellxquote=      ]]) -else -    vim.cmd([[ -    let &shell='bash --login' -    ]]) +    vim.opt.completeslash = 'slash'  end  -- spellchecker: enable @@ -36,11 +33,6 @@ vim.opt.wrap = false;  vim.opt.number = true;  -- spellchecker: enable -if is_win then -    -- spellchecker: disable-next-line -    vim.opt.completeslash = 'slash' -end -  vim.g.load_doxygen_syntax = true;  vim.g.doxygen_javadoc_autobrief = false; @@ -63,142 +55,6 @@ require("lazy").setup("plugins")  vim.cmd("colorscheme catppuccin-macchiato") --- setup neo-tree -require("neo-tree").setup({ -    filesystem = { -        filtered_items = { -            hide_dotfiles = false, -            hide_gitignored = false, -            hide_hidden = false, -- only works on Windows for hidden files/directories -        }, -        use_libuv_file_watcher = true -    } -}) - --- setup lualine -require('lualine').setup({ -    options = { -        theme = "auto", -- Can also be "auto" to detect automatically. -    } -}) - --- setup toggleterm -require("toggleterm").setup { -    open_mapping = "<C-`>", -    start_in_insert = false, -} - --- setup autopairs -require("nvim-autopairs").setup {} - --- setup gitsigns -require('gitsigns').setup() - --- setup format -local format = require("crupest.nvim.plugins.format") -format.setup_format() - --- setup lint -local lint = require("crupest.nvim.plugins.lint") -lint.setup_lint() - --- setup nvim-cmp -local snip = require("crupest.nvim.plugins.snip") -local luasnip = snip.luasnip -snip.setup_snip() - -local cmp = require("cmp") - -cmp.setup({ -    snippet = { -        expand = function(args) -            luasnip.lsp_expand(args.body) -        end, -    }, -    window = { -    }, -    mapping = cmp.mapping.preset.insert({ -        ['<C-j>'] = cmp.mapping.select_next_item(), -        ['<C-k>'] = cmp.mapping.select_prev_item(), -        ['<C-b>'] = cmp.mapping.scroll_docs(-4), -        ['<C-f>'] = cmp.mapping.scroll_docs(4), -        ['<C-Space>'] = cmp.mapping.complete(), -        ['<C-e>'] = cmp.mapping.abort(), -        ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. -        ['<C-y>'] = cmp.mapping.confirm({ select = true }) -    }), -    sources = cmp.config.sources({ -        { name = 'nvim_lsp' }, -        { name = 'luasnip' }, -    }, { -        { name = 'buffer' }, -    }) -}) - - -require("crupest.nvim.lsp.c").setup_lsp_c() -require("crupest.nvim.lsp.lua").setup_lsp_lua() -require("crupest.nvim.lsp.deno").setup_lsp_deno() -require("crupest.nvim.lsp.frontend").setup_lsp_frontend() -require("crupest.nvim.lsp.csharp").setup_lsp_csharp() --- There is some problem of rust analyzer. --- require("crupest.nvim.lsp.rust").setup_lsp_rust() - --- Use LspAttach autocommand to only map the following keys --- after the language server attaches to the current buffer -vim.api.nvim_create_autocmd('LspAttach', { -    group = vim.api.nvim_create_augroup('UserLspConfig', {}), -    callback = function(ev) -        -- Enable completion triggered by <c-x><c-o> -        vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' - -        -- Buffer local mappings. -        -- See `:help vim.lsp.*` for documentation on any of the below functions -        local opts = { buffer = ev.buf } -        vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) -        vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) -        vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) -        vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) -        vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts) -        vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts) -        vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts) -        vim.keymap.set('n', '<space>wl', function() -            print(vim.inspect(vim.lsp.buf.list_workspace_folders())) -        end, opts) -        vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts) -        vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts) -        vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts) -        vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) - -        vim.keymap.set('n', '<space>f', format.do_format, opts) -    end, -}) - - --- For terminal emulator -vim.keymap.set('t', '<leader><esc>', [[<C-\><C-n>]]) - --- setup keymap for telescope -local builtin = require('telescope.builtin') -vim.keymap.set('n', '<leader>f', builtin.find_files, {}) -vim.keymap.set('n', '<leader>g', builtin.live_grep, {}) -vim.keymap.set('n', '<leader>b', builtin.buffers, {}) -vim.keymap.set('n', '<leader>h', builtin.help_tags, {}) - --- setup keymap for tree -vim.keymap.set('n', '<leader>t', "<cmd>Neotree toggle<cr>", {}) - --- See `:help vim.diagnostic.*` for documentation on any of the below functions -vim.keymap.set('n', '<leader>le', vim.diagnostic.open_float) -vim.keymap.set('n', '<leader>l[', vim.diagnostic.goto_prev) -vim.keymap.set('n', '<leader>l]', vim.diagnostic.goto_next) -vim.keymap.set('n', '<leader>ll', vim.diagnostic.setloclist) -vim.keymap.set('n', '<leader>lr', lint.run_lint) - -vim.keymap.set("n", "<c-tab>", "<cmd>bnext<cr>") -vim.keymap.set("n", "<c-s-tab>", "<cmd>bNext<cr>") -vim.keymap.set("n", "<s-tab>", "<c-o>") -vim.keymap.set("n", "<c-q>", require("crupest.nvim").win_close_buf) -vim.keymap.set("n", "<esc>", require("crupest.nvim").close_float) - -require("crupest.nvim.fs").setup_filesystem_user_commands() +require("crupest.nvim.lsp").setup() +require("crupest.nvim.plugins").setup() +require("crupest.nvim.keymap").setup() diff --git a/configs/nvim/lazy-lock.json b/configs/nvim/lazy-lock.json index b16a6e0..59f5473 100644 --- a/configs/nvim/lazy-lock.json +++ b/configs/nvim/lazy-lock.json @@ -1,24 +1,22 @@  { -  "LuaSnip": { "branch": "master", "commit": "7ad2eaeaca56d6ed63acacbfc114b99f1f67b982" }, +  "LuaSnip": { "branch": "master", "commit": "45db5addf8d0a201e1cf247cae4cdce605ad3768" },    "catppuccin": { "branch": "main", "commit": "4fd72a9ab64b393c2c22b168508fd244877fec96" },    "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },    "cmp-cmdline": { "branch": "main", "commit": "d250c63aa13ead745e3a40f61fdd3470efde3923" },    "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" },    "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },    "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, -  "formatter.nvim": { "branch": "master", "commit": "ad246d34ce7a32f752071ed81b09b94e6b127fad" }, -  "gitsigns.nvim": { "branch": "main", "commit": "562dc47189ad3c8696dbf460d38603a74d544849" }, -  "lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" }, +  "gitsigns.nvim": { "branch": "main", "commit": "1ef74b546732f185d0f806860fa5404df7614f28" }, +  "lazy.nvim": { "branch": "main", "commit": "48b52b5cfcf8f88ed0aff8fde573a5cc20b1306d" },    "lualine.nvim": { "branch": "master", "commit": "b431d228b7bbcdaea818bdc3e25b8cdbe861f056" }, -  "neo-tree.nvim": { "branch": "main", "commit": "206241e451c12f78969ff5ae53af45616ffc9b72" }, +  "neo-tree.nvim": { "branch": "main", "commit": "0774fa2085c62a147fcc7b56f0ac37053cc80217" },    "nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" }, -  "nvim-autopairs": { "branch": "master", "commit": "19606af7c039271d5aa96bceff101e7523af3136" }, +  "nvim-autopairs": { "branch": "master", "commit": "fd2badc24e675f947162a16c124d395bde80dbd6" },    "nvim-cmp": { "branch": "main", "commit": "ae644feb7b67bf1ce4260c231d1d4300b19c6f30" }, -  "nvim-lint": { "branch": "master", "commit": "debabca63c0905b59ce596a55a8e33eafdf66342" }, -  "nvim-lspconfig": { "branch": "master", "commit": "911167921d49cd5c1c9b2436031d0da3945e787f" }, -  "nvim-web-devicons": { "branch": "master", "commit": "3722e3d1fb5fe1896a104eb489e8f8651260b520" }, -  "omnisharp-extended-lsp.nvim": { "branch": "main", "commit": "aad7bf06b4ca0de816b919d475a75b30f5f62b61" }, +  "nvim-lint": { "branch": "master", "commit": "a7ce9c78a7c710c28bee56dfab10a5c0c80b7fb5" }, +  "nvim-lspconfig": { "branch": "master", "commit": "bdbc65aadc708ce528efb22bca5f82a7cca6b54d" }, +  "nvim-web-devicons": { "branch": "master", "commit": "9793801f974bba70e4ac5d7eae6c4f5659993d8e" },    "plenary.nvim": { "branch": "master", "commit": "ec289423a1693aeae6cd0d503bac2856af74edaa" },    "telescope.nvim": { "branch": "master", "commit": "5972437de807c3bc101565175da66a1aa4f8707a" },    "toggleterm.nvim": { "branch": "main", "commit": "137d06fb103952a0fb567882bb8527e2f92d327d" } -}
\ No newline at end of file +} diff --git a/configs/nvim/lua/crupest/constants.lua b/configs/nvim/lua/crupest/constants.lua deleted file mode 100644 index 89ae968..0000000 --- a/configs/nvim/lua/crupest/constants.lua +++ /dev/null @@ -1,32 +0,0 @@ -local config_patterns = { -    cspell = { -        ".cspell.json", -        "cspell.json", -        ".cSpell.json", -        "cSpell.json", -        "cspell.config.js", -        "cspell.config.cjs", -        "cspell.config.json", -        "cspell.config.yaml", -        "cspell.config.yml", -        "cspell.yaml", -        "cspell.yml", -    }, -    nodejs = { -        "package.json" -    }, -    deno = { -        "deno.json", "deno.jsonc" -    } -} - -local filetype_collections = { -    js_ts = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' }, -    html_css = { 'html', 'css' }, -    frontend = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact', 'html', 'css' }, -} - -return { -    config_patterns = config_patterns, -    filetype_collections = filetype_collections, -} diff --git a/configs/nvim/lua/crupest/nvim.lua b/configs/nvim/lua/crupest/nvim.lua deleted file mode 100644 index 505f06c..0000000 --- a/configs/nvim/lua/crupest/nvim.lua +++ /dev/null @@ -1,114 +0,0 @@ -local function list_listed_bufs() -    local bufs = vim.api.nvim_list_bufs() -    local result = {} -    for _, v in ipairs(bufs) do -        if vim.fn.buflisted(v) ~= 0 then -            table.insert(result, v) -        end -    end -    return result -end - -local function get_previous_buffer(buf) -    local bufs = list_listed_bufs() - -    -- no buffers at all -    if #bufs == 0 then return nil end - -    -- find the buf in bufs -    local index = 0 -    for i, v in ipairs(bufs) do -        if buf == v then -            index = i -            break -        end -    end - -    -- it's the only one -    if #bufs == 1 and index == 1 then -        return nil -    end - -    -- it's the first one -    if index == 1 then -        return bufs[2] -    end - -    return bufs[index - 1] -end - --- list the windows that are currently editing the given buffer -local function list_wins_editing_buf(buf) -    local wins = vim.api.nvim_list_wins() -    local result = {} -    for _, win in ipairs(wins) do -        if vim.api.nvim_win_get_buf(win) == buf then -            table.insert(result, win) -        end -    end -    return result -end - -local function buf_is_normal(buf) -    return vim.fn.bufexists(buf) ~= 0 and vim.fn.buflisted(buf) ~= 0 -end - --- Delete current buffer and jump back. --- If no previous jump, switch to previous buffer. --- If no previous buffer (no other buffers), create a unnamed one. (So the window does not quit.) -local function win_close_buf() -    local buf = vim.api.nvim_get_current_buf() - -    if  not buf_is_normal(buf) then -        return -    end - -    local jumps_info = vim.fn.getjumplist() - -    local old_jumps = { unpack(jumps_info[1], 1, jumps_info[2]) } -    while #old_jumps ~= 0 do -        local last_jump = old_jumps[#old_jumps] -        if last_jump.bufnr ~= buf and vim.fn.bufexists(last_jump.bufnr) ~= 0 and vim.fn.buflisted(last_jump.bufnr) ~= 0 then -            break -        end -        table.remove(old_jumps, #old_jumps) -    end - -    if #old_jumps ~= 0 then -        local last_jump = old_jumps[#old_jumps] -        vim.api.nvim_win_set_buf(0, last_jump.bufnr) -        vim.api.nvim_win_set_cursor(0, {last_jump.lnum, last_jump.col}) -    else -        local previous_buf = get_previous_buffer(buf) -        if previous_buf then -            vim.api.nvim_win_set_buf(0, previous_buf) -        else -            local new_buf = vim.api.nvim_create_buf(true, false) -            vim.api.nvim_win_set_buf(0, new_buf) -        end -    end - -    local wins = list_wins_editing_buf(buf) -    if #wins == 0 then -        vim.api.nvim_buf_delete(buf, {}) -    end -end - -local function close_float() -    local wins = vim.api.nvim_list_wins() -    for _, v in ipairs(wins) do -        if vim.api.nvim_win_get_config(v).relative ~= '' then -            vim.api.nvim_win_close(v, false) -        end -    end -end - -return { -    list_listed_bufs = list_listed_bufs, -    buf_is_normal = buf_is_normal, -    get_previous_buffer = get_previous_buffer, -    list_wins_editing_buf = list_wins_editing_buf, -    win_close_buf = win_close_buf, -    close_float = close_float, -} - diff --git a/configs/nvim/lua/crupest/nvim/fs.lua b/configs/nvim/lua/crupest/nvim/fs.lua deleted file mode 100644 index 2410535..0000000 --- a/configs/nvim/lua/crupest/nvim/fs.lua +++ /dev/null @@ -1,167 +0,0 @@ -local crupest_nvim = require("crupest.nvim"); -local fs = require("crupest.system.fs"); -local full_path = require("crupest.system").full_path; - -local list_listed_bufs = crupest_nvim.list_listed_bufs; -local buf_is_normal = crupest_nvim.buf_is_normal; - --- There are two situations. --- 1. the new path is not a dir, then it is used --- 2. the new path is a dir, then it is appended with the last name of old path, to create a new valid file path -local function coerce_path_for_dir(old, new) -    if fs.isdir(new) then -        return new .. "/" .. vim.fn.fnamemodify(old, ":t") -    end -    return new -end - -local function do_mv_file(old, new, overwrite) -    new = coerce_path_for_dir(old, new) - -    if full_path(old) == full_path(new) then -        vim.notify("Paths are identical. Do nothing.", vim.log.levels.WARN) -        return false -    end - -    if not fs.isfile(old) then -        vim.notify("Not exists or not a file. Can't move.", vim.log.levels.ERROR) -        return false -    end - -    if not overwrite and fs.exist(new) then -        vim.notify("Target path exists.", vim.log.levels.ERROR) -        return false -    end - -    fs.move(old, new) -    vim.notify("File moved.") - -    return new -end - -local function mv_file(old, new, overwrite) -    new = do_mv_file(old, new, overwrite) -    if not new then return end - -    local bufs = list_listed_bufs() -    for _, b in ipairs(bufs) do -        if full_path(vim.api.nvim_buf_get_name(b)) == full_path(old) then -            vim.api.nvim_buf_set_name(b, new) -        end -    end -end - -local function mv_buf_file(buf, new, overwrite) -    if not buf_is_normal(buf) then -        vim.notify("Buf is not a normal buffer, can't move it.", vim.log.levels.ERROR) -        return -    end - -    local name = vim.api.nvim_buf_get_name(buf) - -    new = do_mv_file(name, new, overwrite) -    if not new then return end - -    vim.api.nvim_buf_set_name(buf, new) -end - -local function mv_dir(old_dir, new_dir, overwrite) -    new_dir = coerce_path_for_dir(old_dir, new_dir) - -    if full_path(old_dir) == full_path(new_dir) then -        vim.notify("Paths are identical. Do nothing.", vim.log.levels.WARN) -        return -    end - -    if not fs.isdir(old_dir) then -        vim.notify("Not exist or not a dir. Can't move.", vim.log.levels.ERROR) -    end - -    if not overwrite and fs.exist(new_dir) then -        vim.notify("Target path exists.", vim.log.levels.ERROR) -        return -    end - -    if fs.isdir(old_dir) then -        fs.move(old_dir, new_dir) -        vim.notify("Dir moved.") -    end - -    local bufs = list_listed_bufs() - -    for _, buf in ipairs(bufs) do -        local name = vim.api.nvim_buf_get_name(buf) -        local full_name = full_path(name) -        local old_dir_full = full_path(old_dir) -        if string.find(full_name, old_dir_full, 1, true) == 1 then -            local new_name = new_dir .. string.sub(full_name, #old_dir_full + 1) -            vim.api.nvim_buf_set_name(buf, new_name) -        end -    end -end - -local function rename_file(old, new, overwrite) -    local dir = vim.fn.fnamemodify(old, ":h") -    mv_file(old, dir .. "/" .. new, overwrite) -end - -local function rename_buf_file(buf, new_name, overwrite) -    local old_path = vim.api.nvim_buf_get_name(buf) -    local dir = vim.fn.fnamemodify(old_path, ":h") -    mv_buf_file(buf, dir .. "/" .. new_name, overwrite) -end - -local function setup_filesystem_user_commands() -    vim.api.nvim_create_user_command("Mv", function(opts) -        mv_buf_file(vim.api.nvim_get_current_buf(), opts.fargs[1]) -    end, { -        nargs = 1, -        complete = "file" -    }) - -    vim.api.nvim_create_user_command("MvFile", function(opts) -        if (#opts.fargs ~= 2) then -            vim.notify("MvFile accepts exactly two arguments, old file and new file.") -        end -        mv_file(opts.fargs[1], opts.fargs[2]) -    end, { -        nargs = "+", -        complete = "file" -    }) - -    vim.api.nvim_create_user_command("MvDir", function(opts) -        if (#opts.fargs ~= 2) then -            vim.notify("MvDir accepts exactly two arguments, old dir and new dir.") -        end -        mv_dir(opts.fargs[1], opts.fargs[2]) -    end, { -        nargs = "+", -        complete = "file" -    }) - -    vim.api.nvim_create_user_command("Rename", function(opts) -        rename_buf_file(vim.api.nvim_get_current_buf(), opts.fargs[1]) -    end, { -        nargs = 1, -        complete = "file" -    }) - -    vim.api.nvim_create_user_command("RenameFile", function(opts) -        if (#opts.fargs ~= 2) then -            vim.notify("RenameFile accepts exactly two arguments, old file and new file.") -        end -        rename_file(opts.fargs[1], opts.fargs[2]) -    end, { -        nargs = "+", -        complete = "file" -    }) -end - -return { -    mv_file = mv_file, -    mv_buf_file = mv_buf_file, -    mv_dir = mv_dir, -    rename_file = rename_file, -    rename_buf_file = rename_buf_file, -    setup_filesystem_user_commands = setup_filesystem_user_commands -} diff --git a/configs/nvim/lua/crupest/nvim/keymap.lua b/configs/nvim/lua/crupest/nvim/keymap.lua new file mode 100644 index 0000000..624c04c --- /dev/null +++ b/configs/nvim/lua/crupest/nvim/keymap.lua @@ -0,0 +1,9 @@ +local function setup() +    vim.keymap.set("n", "<c-tab>", "<cmd>bnext<cr>") +    vim.keymap.set("n", "<c-s-tab>", "<cmd>bNext<cr>") +    vim.keymap.set("n", "<esc>", require("crupest.utils.nvim").close_float) +end + +return { +    setup = setup +} diff --git a/configs/nvim/lua/crupest/nvim/lsp/c.lua b/configs/nvim/lua/crupest/nvim/lsp/c.lua index 28edae0..e0466b1 100644 --- a/configs/nvim/lua/crupest/nvim/lsp/c.lua +++ b/configs/nvim/lua/crupest/nvim/lsp/c.lua @@ -1,10 +1,11 @@  local lspconfig = require("lspconfig")  local capabilities = require("cmp_nvim_lsp").default_capabilities() -local get_exe = require("crupest.system.find").get_exe + +local get_exe = require("crupest.utils.find").get_exe  local brew_clangd_path = "/usr/local/opt/llvm/bin/clangd" -local function setup_lsp_c() +local function setup()      local clangd = "clangd"      if get_exe(brew_clangd_path) then @@ -24,5 +25,5 @@ local function setup_lsp_c()  end  return { -    setup_lsp_c = setup_lsp_c +    setup = setup  } diff --git a/configs/nvim/lua/crupest/nvim/lsp/csharp.lua b/configs/nvim/lua/crupest/nvim/lsp/csharp.lua deleted file mode 100644 index f5cd29b..0000000 --- a/configs/nvim/lua/crupest/nvim/lsp/csharp.lua +++ /dev/null @@ -1,14 +0,0 @@ -local lspconfig = require("lspconfig"); -local capabilities = require("cmp_nvim_lsp").default_capabilities() - - -local function setup_lsp_csharp() -    lspconfig.csharp_ls.setup { -        capabilities = capabilities, -        root_dir = lspconfig.util.root_pattern("*.csproj"), -    } -end - -return { -    setup_lsp_csharp = setup_lsp_csharp -} diff --git a/configs/nvim/lua/crupest/nvim/lsp/deno.lua b/configs/nvim/lua/crupest/nvim/lsp/deno.lua deleted file mode 100644 index d553a35..0000000 --- a/configs/nvim/lua/crupest/nvim/lsp/deno.lua +++ /dev/null @@ -1,13 +0,0 @@ -local lspconfig = require("lspconfig"); -local capabilities = require("cmp_nvim_lsp").default_capabilities() - -local function setup_lsp_deno() -    lspconfig.denols.setup { -        capabilities = capabilities, -        root_dir = lspconfig.util.root_pattern("deno.json", "deno.jsonc"), -    } -end - -return { -    setup_lsp_deno = setup_lsp_deno -} diff --git a/configs/nvim/lua/crupest/nvim/lsp/frontend.lua b/configs/nvim/lua/crupest/nvim/lsp/frontend.lua deleted file mode 100644 index 2573cf1..0000000 --- a/configs/nvim/lua/crupest/nvim/lsp/frontend.lua +++ /dev/null @@ -1,28 +0,0 @@ -local lspconfig = require("lspconfig"); -local capabilities = require("cmp_nvim_lsp").default_capabilities() - -local function setup_lsp_frontend() -    lspconfig.cssls.setup { -        capabilities = capabilities -    } - -    lspconfig.html.setup { -        capabilities = capabilities -    } - -    lspconfig.tsserver.setup { -        capabilities = capabilities, -        on_new_config = function(new_config, new_root_dir) -            local local_tsserver = require("crupest.system.find").find_npm_exe(new_root_dir, "typescript-language-server"); -            if local_tsserver then -                new_config.cmd = { local_tsserver, "--stdio" } -            end -        end, -        root_dir = lspconfig.util.root_pattern("package.json"), -        single_file_support = false, -    } -end - -return { -    setup_lsp_frontend = setup_lsp_frontend -} diff --git a/configs/nvim/lua/crupest/nvim/lsp/init.lua b/configs/nvim/lua/crupest/nvim/lsp/init.lua new file mode 100644 index 0000000..464d7ef --- /dev/null +++ b/configs/nvim/lua/crupest/nvim/lsp/init.lua @@ -0,0 +1,34 @@ +local function setup() +    require("crupest.nvim.lsp.c").setup() +    require("crupest.nvim.lsp.lua").setup() + +    -- Use LspAttach autocommand to only map the following keys +    -- after the language server attaches to the current buffer +    vim.api.nvim_create_autocmd('LspAttach', { +        group = vim.api.nvim_create_augroup('UserLspConfig', {}), +        callback = function(ev) +            -- Buffer local mappings. +            -- See `:help vim.lsp.*` for documentation on any of the below functions +            local opts = { buffer = ev.buf } +            vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) +            vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) +            vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) +            vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts) +            vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts) +            vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts) +            vim.keymap.set('n', '<space>wl', function() +                print(vim.inspect(vim.lsp.buf.list_workspace_folders())) +            end, opts) +            vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts) +            vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts) +            vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts) +            vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) +            vim.keymap.set('n', '<space>f', vim.lsp.buf.format, opts) +        end, +    }) +end + + +return { +    setup = setup +} diff --git a/configs/nvim/lua/crupest/nvim/lsp/lua.lua b/configs/nvim/lua/crupest/nvim/lsp/lua.lua index 4df0f49..1785515 100644 --- a/configs/nvim/lua/crupest/nvim/lsp/lua.lua +++ b/configs/nvim/lua/crupest/nvim/lsp/lua.lua @@ -1,7 +1,7 @@  local lspconfig = require("lspconfig")  local capabilities = require("cmp_nvim_lsp").default_capabilities() -local function setup_lsp_lua() +local function setup()      lspconfig.lua_ls.setup {          capabilities = capabilities,          settings = { @@ -27,5 +27,5 @@ local function setup_lsp_lua()  end  return { -    setup_lsp_lua = setup_lsp_lua +    setup = setup  } diff --git a/configs/nvim/lua/crupest/nvim/lsp/rust.lua b/configs/nvim/lua/crupest/nvim/lsp/rust.lua deleted file mode 100644 index 219fc12..0000000 --- a/configs/nvim/lua/crupest/nvim/lsp/rust.lua +++ /dev/null @@ -1,13 +0,0 @@ -local lspconfig = require("lspconfig") -local capabilities = require("cmp_nvim_lsp").default_capabilities() - - -local function setup_lsp_rust() -    lspconfig.rust_analyzer.setup { -        capabilities = capabilities, -    } -end - -return { -    setup_lsp_rust = setup_lsp_rust -} diff --git a/configs/nvim/lua/crupest/nvim/plugins/cmp.lua b/configs/nvim/lua/crupest/nvim/plugins/cmp.lua new file mode 100644 index 0000000..9b1d876 --- /dev/null +++ b/configs/nvim/lua/crupest/nvim/plugins/cmp.lua @@ -0,0 +1,31 @@ +local function setup() +    local cmp = require("cmp") +    local luasnip = require("luasnip") + +    cmp.setup { +        snippet = { +            expand = function(args) +                luasnip.lsp_expand(args.body) +            end, +        }, +        window = { +        }, +        mapping = cmp.mapping.preset.insert({ +            ['<C-b>'] = cmp.mapping.scroll_docs(-4), +            ['<C-f>'] = cmp.mapping.scroll_docs(4), +            ['<C-Space>'] = cmp.mapping.complete(), +            ['<C-e>'] = cmp.mapping.abort(), +            ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. +        }), +        sources = cmp.config.sources({ +            { name = 'nvim_lsp' }, +            { name = 'luasnip' }, +        }, { +            { name = 'buffer' }, +        }) +    } +end + +return { +    setup = setup +} diff --git a/configs/nvim/lua/crupest/nvim/plugins/format.lua b/configs/nvim/lua/crupest/nvim/plugins/format.lua deleted file mode 100644 index 0e3320a..0000000 --- a/configs/nvim/lua/crupest/nvim/plugins/format.lua +++ /dev/null @@ -1,76 +0,0 @@ -local find = require("crupest.system.find") -local constants = require("crupest.constants") - -local function wrap_formatter_with_exe(name, exe) -    local formatter = require('formatter.defaults.' .. name) -    formatter = formatter() -    formatter.try_node_modules = false -    formatter.exe = exe -    return formatter -end - -local function set_formatters_for_filetype(filetype, formatters) -    require('formatter.config').values.filetype[filetype] = formatters -end - -local my_formatters = { -    { -        name = "prettier", -        exe_places = { "npm" }, -        filetypes = constants.filetype_collections.frontend, -        config_files = constants.config_patterns.nodejs, -    }, -} - -local function find_custom_formatter(opts) -    if opts == nil then opts = {} end -    if opts.buf == nil then opts.buf = 0 end - -    for _, f in ipairs(my_formatters) do -        local r = find.find_exe_for_buf(opts.buf, f) -        if r ~= nil then -            local formatter = wrap_formatter_with_exe(r.name, r.exe_path) -            set_formatters_for_filetype(r.filetype, { formatter }) -            return r.name -        end -    end - -    return nil -end - - -local function do_format(opt) -    if not opt then -        opt = {} -    end - -    if not opt.buf then -        opt.buf = 0 -    end - -    local custom_formatter = find_custom_formatter(opt) - -    if custom_formatter then -        print("Use custom formatters: " .. custom_formatter .. ".") -        vim.cmd("Format") -        return -    end - -    local has_lsp = vim.lsp.get_active_clients({ bufnr = 0 }) -    if has_lsp then -        print("Use lsp formatter.") -        vim.lsp.buf.format { async = true } -        return -    end - -    vim.notify("No formatters found.", vim.log.levels.ERROR); -end - -local function setup_format() -    require("formatter").setup {} -end - -return { -    setup_format = setup_format, -    do_format = do_format, -} diff --git a/configs/nvim/lua/crupest/nvim/plugins/formatter.lua b/configs/nvim/lua/crupest/nvim/plugins/formatter.lua deleted file mode 100644 index 9f6138f..0000000 --- a/configs/nvim/lua/crupest/nvim/plugins/formatter.lua +++ /dev/null @@ -1,114 +0,0 @@ -local fs = require("crupest.system.fs") -local find_npm_exe = require("crupest.system.find").find_npm_exe; - -local prettier_formatter = function() -    local current_buffer = vim.api.nvim_buf_get_name(0) -    local prettier_exe = find_npm_exe(current_buffer, "prettier") or "prettier" - -    if vim.fn.has("win32") ~= 0 then -        local escape = fs.escape_space -        current_buffer = escape(current_buffer) -        prettier_exe = escape(prettier_exe) -    end - -    return { -        exe = prettier_exe, -        args = { -            "--stdin-filepath", -            current_buffer -        }, -        stdin = true, -    } -end - -local formatters_for_filetype = { -    html = { -        prettier_formatter -    }, -    css = { -        prettier_formatter -    }, -    javascript = { -        prettier_formatter -    }, -    javascriptreact = { -        prettier_formatter -    }, -    typescript = { -        prettier_formatter -    }, -    typescriptreact = { -        prettier_formatter -    } -} - -local function get_formatter_name(formatter) -    if formatter == prettier_formatter then return "prettier" end -    return nil -end - -local function get_formatter_name_list(formatters) -    local result = {} -    for _, formatter in ipairs(formatters) do -        table.insert(result, get_formatter_name(formatter)) -    end -    return result -end - -local function setup_formatter() -    require("formatter").setup { -        filetype = formatters_for_filetype -    } -end - - -local function get_custom_formatters(bufnr) -    local filetype = vim.api.nvim_buf_get_option(bufnr, "filetype") -    for ft, formatters in pairs(formatters_for_filetype) do -        if filetype == ft then -            return true, get_formatter_name_list(formatters) -        end -    end -    return false, {} -end - -local function run_formatter(opt) -    if not opt then -        opt = {} -    end - -    if not opt.buf then -        opt.buf = 0 -    end - -    local has_custom_formatter, formatter_names = get_custom_formatters(opt.buf) - -    local formatter_name_str = "" -    for i, name in ipairs(formatter_names) do -        if i == 1 then -            formatter_name_str = name -        else -            formatter_name_str = formatter_name_str .. " " .. name -        end -    end - -    if has_custom_formatter then -        print("Use custom formatters: " .. formatter_name_str .. ".") -        vim.cmd("Format") -        return -    end - -    local has_lsp = vim.lsp.get_active_clients({ bufnr = 0 }) -    if has_lsp then -        print("Use lsp formatter.") -        vim.lsp.buf.format { async = true } -        return -    end - -    vim.notify("No formatters found.", vim.log.levels.ERROR); -end - -return { -    setup_formatter = setup_formatter, -    run_formatter = run_formatter -} diff --git a/configs/nvim/lua/crupest/nvim/plugins/gitsign.lua b/configs/nvim/lua/crupest/nvim/plugins/gitsign.lua new file mode 100644 index 0000000..220c91a --- /dev/null +++ b/configs/nvim/lua/crupest/nvim/plugins/gitsign.lua @@ -0,0 +1,51 @@ +local function setup() +    local gitsigns = require('gitsigns') +    gitsigns.setup { +        on_attach = function(bufnr) +            local function map(mode, l, r, opts) +                opts = opts or {} +                opts.buffer = bufnr +                vim.keymap.set(mode, l, r, opts) +            end + +            -- Navigation +            map('n', ']c', function() +                if vim.wo.diff then +                    vim.cmd.normal({ ']c', bang = true }) +                else +                    gitsigns.nav_hunk('next') +                end +            end) + +            map('n', '[c', function() +                if vim.wo.diff then +                    vim.cmd.normal({ '[c', bang = true }) +                else +                    gitsigns.nav_hunk('prev') +                end +            end) + +            -- Actions +            map('n', '<leader>hs', gitsigns.stage_hunk) +            map('n', '<leader>hr', gitsigns.reset_hunk) +            map('v', '<leader>hs', function() gitsigns.stage_hunk { vim.fn.line('.'), vim.fn.line('v') } end) +            map('v', '<leader>hr', function() gitsigns.reset_hunk { vim.fn.line('.'), vim.fn.line('v') } end) +            map('n', '<leader>hS', gitsigns.stage_buffer) +            map('n', '<leader>hu', gitsigns.undo_stage_hunk) +            map('n', '<leader>hR', gitsigns.reset_buffer) +            map('n', '<leader>hp', gitsigns.preview_hunk) +            map('n', '<leader>hb', function() gitsigns.blame_line { full = true } end) +            map('n', '<leader>tb', gitsigns.toggle_current_line_blame) +            map('n', '<leader>hd', gitsigns.diffthis) +            map('n', '<leader>hD', function() gitsigns.diffthis('~') end) +            map('n', '<leader>td', gitsigns.toggle_deleted) + +            -- Text object +            map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>') +        end +    } +end + +return { +    setup = setup +} diff --git a/configs/nvim/lua/crupest/nvim/plugins/init.lua b/configs/nvim/lua/crupest/nvim/plugins/init.lua new file mode 100644 index 0000000..637c8e5 --- /dev/null +++ b/configs/nvim/lua/crupest/nvim/plugins/init.lua @@ -0,0 +1,11 @@ +local function setup() +    require("crupest.nvim.plugins.lint").setup() +    require("crupest.nvim.plugins.snip").setup() +    require("crupest.nvim.plugins.cmp").setup() +    require("crupest.nvim.plugins.telescope").setup() +    require("crupest.nvim.plugins.gitsign").setup() +end + +return { +    setup = setup +} diff --git a/configs/nvim/lua/crupest/nvim/plugins/lint.lua b/configs/nvim/lua/crupest/nvim/plugins/lint.lua index 2ba3e36..6649e74 100644 --- a/configs/nvim/lua/crupest/nvim/plugins/lint.lua +++ b/configs/nvim/lua/crupest/nvim/plugins/lint.lua @@ -1,23 +1,30 @@  local lint = require("lint") -local find = require('crupest.system.find') -local constants = require("crupest.constants") +local find = require('crupest.utils.find') +local is_win = vim.fn.has("win32") ~= 0 +local cspell_config_patterns = { +    ".cspell.json", +    "cspell.json", +    ".cSpell.json", +    "cSpell.json", +    "cspell.config.js", +    "cspell.config.cjs", +    "cspell.config.json", +    "cspell.config.yaml", +    "cspell.config.yml", +    "cspell.yaml", +    "cspell.yml", +}  local my_linters = {      {          name = "cspell",          exe_places = { "npm", "global" }, -        config_files = constants.config_patterns.cspell, -    }, -    { -        name = "eslint", -        exe_places = { "npm" }, -        filetypes = constants.filetype_collections.js_ts, -        config_files = constants.config_patterns.nodejs, +        config_files = cspell_config_patterns,      },  } -local function run_lint(opt) +local function run(opt)      if not opt then          opt = {}      end @@ -44,8 +51,8 @@ local function run_lint(opt)      lint.try_lint(linter_names)  end -local function setup_lint() -    if require('crupest.system').is_win then +local function setup() +    if is_win then          for _, l in ipairs(my_linters) do              local name = l.name              local linter = require('lint.linters.' .. name) @@ -59,14 +66,16 @@ local function setup_lint()      vim.api.nvim_create_autocmd({ "BufWritePost" }, {          callback = function(opt) -            run_lint({ +            run({                  buf = opt.buffer              })          end,      }) + +    vim.keymap.set('n', '<leader>lr', run)  end  return { -    setup_lint = setup_lint, -    run_lint = run_lint +    setup = setup, +    run = run  } diff --git a/configs/nvim/lua/crupest/nvim/plugins/others.lua b/configs/nvim/lua/crupest/nvim/plugins/others.lua new file mode 100644 index 0000000..2d728ae --- /dev/null +++ b/configs/nvim/lua/crupest/nvim/plugins/others.lua @@ -0,0 +1,20 @@ +local function setup() +    require("neo-tree").setup { +        filesystem = { +            filtered_items = { +                hide_dotfiles = false, +                hide_gitignored = false, +                hide_hidden = false, -- only works on Windows for hidden files/directories +            }, +            use_libuv_file_watcher = true +        } +    } + +    require('lualine').setup {} + +    require("nvim-autopairs").setup {} +end + +return { +    setup = setup +} diff --git a/configs/nvim/lua/crupest/nvim/plugins/snip.lua b/configs/nvim/lua/crupest/nvim/plugins/snip.lua index 1cf1b7c..1cf9800 100644 --- a/configs/nvim/lua/crupest/nvim/plugins/snip.lua +++ b/configs/nvim/lua/crupest/nvim/plugins/snip.lua @@ -26,7 +26,7 @@ local function copy(args)      return args[1]  end -local function setup_snip() +local function setup()      vim.keymap.set({ "i", "s" }, "<C-L>", function() luasnip.jump(1) end, { silent = true })      vim.keymap.set({ "i", "s" }, "<C-J>", function() luasnip.jump(-1) end, { silent = true }) @@ -69,6 +69,5 @@ local function setup_snip()  end  return { -    setup_snip = setup_snip, -    luasnip = luasnip +    setup = setup,  } diff --git a/configs/nvim/lua/crupest/nvim/plugins/telescope.lua b/configs/nvim/lua/crupest/nvim/plugins/telescope.lua new file mode 100644 index 0000000..d68b7f2 --- /dev/null +++ b/configs/nvim/lua/crupest/nvim/plugins/telescope.lua @@ -0,0 +1,11 @@ +local function setup() +    local builtin = require('telescope.builtin') +    vim.keymap.set('n', '<leader>ff', builtin.find_files, {}) +    vim.keymap.set('n', '<leader>fg', builtin.live_grep, {}) +    vim.keymap.set('n', '<leader>fb', builtin.buffers, {}) +    vim.keymap.set('n', '<leader>fh', builtin.help_tags, {}) +end + +return { +    setup = setup +} diff --git a/configs/nvim/lua/crupest/system.lua b/configs/nvim/lua/crupest/system.lua deleted file mode 100644 index 982aaa4..0000000 --- a/configs/nvim/lua/crupest/system.lua +++ /dev/null @@ -1,7 +0,0 @@ -local is_win = vim.fn.has("win32") ~= 0 -local is_mac = vim.fn.has("mac") ~= 0 - -return { -    is_win = is_win, -    is_mac = is_mac -} diff --git a/configs/nvim/lua/crupest/system/find.lua b/configs/nvim/lua/crupest/utils/find.lua index 0876622..83968d2 100644 --- a/configs/nvim/lua/crupest/system/find.lua +++ b/configs/nvim/lua/crupest/utils/find.lua @@ -1,11 +1,10 @@ -local system = require("crupest.system") -local fs = require("crupest.system.fs"); +local fs = require("crupest.utils.fs"); +local is_win = vim.fn.has("win32") ~= 0  local win_exe_exts = { "exe", "CMD", "cmd", "ps1" } -  local function get_exe(path) -    if system.is_win then +    if is_win then          for _, ext in ipairs(win_exe_exts) do              if string.find(path, "%." .. ext .. "$") and fs.isfile(path) then                  return path diff --git a/configs/nvim/lua/crupest/system/fs.lua b/configs/nvim/lua/crupest/utils/fs.lua index d34c2f6..d34c2f6 100644 --- a/configs/nvim/lua/crupest/system/fs.lua +++ b/configs/nvim/lua/crupest/utils/fs.lua diff --git a/configs/nvim/lua/crupest/utils/nvim.lua b/configs/nvim/lua/crupest/utils/nvim.lua new file mode 100644 index 0000000..ac732fd --- /dev/null +++ b/configs/nvim/lua/crupest/utils/nvim.lua @@ -0,0 +1,44 @@ +local function list_listed_bufs() +    local bufs = vim.api.nvim_list_bufs() +    local result = {} +    for _, v in ipairs(bufs) do +        if vim.fn.buflisted(v) ~= 0 then +            table.insert(result, v) +        end +    end +    return result +end + +-- list the windows that are currently editing the given buffer +local function list_wins_editing_buf(buf) +    local wins = vim.api.nvim_list_wins() +    local result = {} +    for _, win in ipairs(wins) do +        if vim.api.nvim_win_get_buf(win) == buf then +            table.insert(result, win) +        end +    end +    return result +end + +local function buf_is_normal(buf) +    return vim.fn.bufexists(buf) ~= 0 and vim.fn.buflisted(buf) ~= 0 +end + + +local function close_float() +    local wins = vim.api.nvim_list_wins() +    for _, v in ipairs(wins) do +        if vim.api.nvim_win_get_config(v).relative ~= '' then +            vim.api.nvim_win_close(v, false) +        end +    end +end + +return { +    list_listed_bufs = list_listed_bufs, +    buf_is_normal = buf_is_normal, +    list_wins_editing_buf = list_wins_editing_buf, +    close_float = close_float, +} + diff --git a/configs/nvim/lua/crupest/table.lua b/configs/nvim/lua/crupest/utils/table.lua index 22419b0..22419b0 100644 --- a/configs/nvim/lua/crupest/table.lua +++ b/configs/nvim/lua/crupest/utils/table.lua diff --git a/configs/nvim/lua/plugins.lua b/configs/nvim/lua/plugins.lua index 1e4ded9..d7d0247 100644 --- a/configs/nvim/lua/plugins.lua +++ b/configs/nvim/lua/plugins.lua @@ -2,7 +2,6 @@  return {      { "catppuccin/nvim", name = "catppuccin", priority = 1000 },      "neovim/nvim-lspconfig", -    "Hoffs/omnisharp-extended-lsp.nvim",      "hrsh7th/nvim-cmp",      "hrsh7th/cmp-nvim-lsp",      "hrsh7th/cmp-buffer", @@ -10,12 +9,15 @@ return {      "hrsh7th/cmp-cmdline",      "L3MON4D3/LuaSnip",      "saadparwaiz1/cmp_luasnip", -    "nvim-tree/nvim-web-devicons", -    "nvim-lua/plenary.nvim", -    "nvim-lualine/lualine.nvim", -    "nvim-telescope/telescope.nvim", +    { +        "nvim-lualine/lualine.nvim", +        dependencies = { 'nvim-tree/nvim-web-devicons' } +    }, +    { +        "nvim-telescope/telescope.nvim", +        dependencies = { 'nvim-lua/plenary.nvim' } +    },      "windwp/nvim-autopairs", -    "mhartington/formatter.nvim",      "mfussenegger/nvim-lint",      "akinsho/toggleterm.nvim",      "lewis6991/gitsigns.nvim", @@ -23,6 +25,7 @@ return {          "nvim-neo-tree/neo-tree.nvim",          dependencies = {              "nvim-lua/plenary.nvim", +            "nvim-tree/nvim-web-devicons",              "MunifTanjim/nui.nvim",          },      },  | 
