diff --git a/.gitignore b/.gitignore index d547881..559cd1f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ packer_compiled.lua +lazy-lock.json diff --git a/lazy-lock.json b/lazy-lock.json deleted file mode 100644 index 40d3df8..0000000 --- a/lazy-lock.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "LuaSnip": { "branch": "master", "commit": "faf3c94a44508cec1b961406d36cc65113ff3b98" }, - "auto-session": { "branch": "main", "commit": "00334ee24b9a05001ad50221c8daffbeedaa0842" }, - "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, - "cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" }, - "cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" }, - "cmp-path": { "branch": "main", "commit": "c6635aae33a50d6010bf1aa756ac2398a2d54c32" }, - "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, - "emmet-vim": { "branch": "master", "commit": "6c511a8d7d2863066f32e25543e2bb99d505172c" }, - "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, - "fzf": { "branch": "master", "commit": "d18c0bf6948b4707684fe77631aff26a17cbc4fa" }, - "fzf-checkout.vim": { "branch": "master", "commit": "db0289a6c8e77b08a0150627733722fd07d5fa62" }, - "fzf.vim": { "branch": "master", "commit": "3ed6ac56d03fff0389cd5b30dfd1e1f940fe91d0" }, - "gitsigns.nvim": { "branch": "main", "commit": "8b729e489f1475615dc6c9737da917b3bc163605" }, - "hop.nvim": { "branch": "master", "commit": "1a1eceafe54b5081eae4cb91c723abd1d450f34b" }, - "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, - "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, - "lsp-zero.nvim": { "branch": "v1.x", "commit": "d4367a3726dbaa5c67f29c38b186c30d99e6b32c" }, - "lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "d24b3f1612e53f9d54d866b16bedab51813f2bf1" }, - "mason.nvim": { "branch": "main", "commit": "8024d64e1330b86044fed4c8494ef3dcd483a67c" }, - "none-ls.nvim": { "branch": "main", "commit": "db2a48b79cfcdab8baa5d3f37f21c78b6705c62e" }, - "nvim-autopairs": { "branch": "master", "commit": "4d74e75913832866aa7de35e4202463ddf6efd1b" }, - "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" }, - "nvim-fzf": { "branch": "master", "commit": "305aa90aeb8409b4bd2af1812a4b6e157ee93953" }, - "nvim-fzf-commands": { "branch": "master", "commit": "52f9450cd69f462aa1ecc5dc3e05ef3b77840e4f" }, - "nvim-lspconfig": { "branch": "master", "commit": "3ea99227e316c5028f57a4d86a1a7fd01dd876d0" }, - "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, - "nvim-treesitter-context": { "branch": "master", "commit": "404502e607c3b309e405be9112c438c721153372" }, - "nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" }, - "playground": { "branch": "master", "commit": "ba48c6a62a280eefb7c85725b0915e021a1a0749" }, - "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, - "rnvimr": { "branch": "main", "commit": "57f7a8edd629791557d1315463d9fb2e411a45f1" }, - "rustaceanvim": { "branch": "master", "commit": "e9c5aaba16fead831379d5f44617547a90b913c7" }, - "tailwind-tools": { "branch": "master", "commit": "fbe982901d4508b0dcd80e07addf0fcb6dab6c49" }, - "tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" }, - "undotree": { "branch": "master", "commit": "b951b87b46c34356d44aa71886aecf9dd7f5788a" }, - "vim-fugitive": { "branch": "master", "commit": "4a745ea72fa93bb15dd077109afbb3d1809383f2" }, - "vim-js": { "branch": "master", "commit": "35d9e2ef4d31618237463e3bdf4811b2f8a0dec5" }, - "vim-jsx-improve": { "branch": "master", "commit": "b179bf9a3901ccc6afcaa3abc9c93bae450f3339" }, - "vim-jsx-pretty": { "branch": "master", "commit": "6989f1663cc03d7da72b5ef1c03f87e6ddb70b41" }, - "vim-razor": { "branch": "master", "commit": "305dd1db88c657c0c02effbee1a88048479bb0c4" }, - "vim-snippets": { "branch": "master", "commit": "f0a3184d9f90b96b044d5914625a25c554d7f301" }, - "yats.vim": { "branch": "master", "commit": "b325c449a2db4d9ee38aa441afa850a815982e8b" }, - "zig.vim": { "branch": "master", "commit": "e55a7949561d34822b7cd2290819927b79825dcd" } -} diff --git a/lsp/angular-language-server.lua b/lsp/angular-language-server.lua new file mode 100644 index 0000000..5a565d5 --- /dev/null +++ b/lsp/angular-language-server.lua @@ -0,0 +1,57 @@ +-- Angular requires a node_modules directory to probe for @angular/language-service and typescript +-- in order to use your projects configured versions. + +local root_dir = vim.fn.getcwd() +local node_modules_dir = vim.fs.find("node_modules", { path = root_dir })[1] +local project_root = node_modules_dir and vim.fs.dirname(node_modules_dir) or "?" +local default_probe_dir = project_root and (project_root .. "/node_modules") or "" + +local ngserver_exe = vim.fn.exepath("ngserver") +local ngserver_path = #(ngserver_exe or "") > 0 and vim.fs.dirname(vim.uv.fs_realpath(ngserver_exe)) or "?" +local extension_path = vim.fs.normalize(vim.fs.joinpath(ngserver_path, "../../../")) + +-- angularls will get module by `require.resolve(PROBE_PATH, MODULE_NAME)` of nodejs +local ts_probe_dirs = vim.iter({ extension_path, default_probe_dir }):join(",") +local ng_probe_dirs = vim.iter({ extension_path, default_probe_dir }) + :map(function(p) + return vim.fs.joinpath(p, "/@angular/language-server/node_modules") + end) + :join(",") + +local function get_angular_core_version() + if not project_root then + return "" + end + + local package_json = project_root .. "/package.json" + if not vim.uv.fs_stat(package_json) then + return "" + end + + local contents = io.open(package_json):read("*a") + local json = vim.json.decode(contents) + if not json.dependencies then + return "" + end + + local angular_core_version = json.dependencies["@angular/core"] + + angular_core_version = angular_core_version and angular_core_version:match("%d+%.%d+%.%d+") + + return angular_core_version +end + +return { + cmd = { + "ngserver", + "--stdio", + "--tsProbeLocations", + ts_probe_dirs, + "--ngProbeLocations", + ng_probe_dirs, + "--angularCoreVersion", + get_angular_core_version(), + }, + filetypes = { "typescript", "html", "typescriptreact", "typescript.tsx", "htmlangular" }, + root_markers = { "angular.json", "nx.json" }, +} diff --git a/lua/base/init.lua b/lua/base/init.lua index ac105c6..cefe693 100644 --- a/lua/base/init.lua +++ b/lua/base/init.lua @@ -119,6 +119,8 @@ opt.foldlevelstart = 30 opt.mouse = "" opt.backupcopy = "yes" +opt.winborder = "rounded" + vim.cmd([[au BufRead,BufNewFile .env.* set filetype=sh]]) vim.cmd([[au BufRead,BufNewFile Dockerfile.* set filetype=dockerfile]]) --vim.cmd([[au BufRead,BufNewFile *.html set filetype=html]]) diff --git a/lua/plugins/config.lua b/lua/plugins/config.lua index fe824ad..6a4c713 100644 --- a/lua/plugins/config.lua +++ b/lua/plugins/config.lua @@ -361,8 +361,8 @@ function M.null_ls() diagnostics.ruff(), formatters.ruff_imports(), formatters.ruff_code(), - null_ls.builtins.diagnostics.djlint, - null_ls.builtins.formatting.djlint, + null_ls.builtins.diagnostics.djlint, + null_ls.builtins.formatting.djlint, -- js null_ls.builtins.formatting.prettier.with({ @@ -500,23 +500,6 @@ function M.lsp_zero() lsp.configure("html", { filetypes = html_filetypes }) lsp.configure("htmx", { filetypes = html_filetypes }) - require("mason-lspconfig").setup({ - automatic_enable = { - "pyright", - "lua_ls", - "bashls", - "html", - "cssls", - "ts_ls", - "svelte", - "angularls", - "tailwindcss", - "templ", - "gopls", - "htmx", - }, - }) - lsp.on_attach(function(client, _) -- diagnostics for other lsp get messed up when formatting is enabled client.server_capabilities.documentFormattingProvider = false @@ -530,12 +513,43 @@ function M.lsp_zero() end, }) end + + local function filter_duplicates(array) + local unique = {} + for _, tableA in ipairs(array) do + local is_duplicate = false + for _, tableB in ipairs(unique) do + if vim.deep_equal(tableA, tableB) then + is_duplicate = true + break + end + end + if not is_duplicate then + table.insert(unique, tableA) + end + end + return unique + end + + local function on_list(options) + options.items = filter_duplicates(options.items) + vim.fn.setqflist({}, " ", options) + vim.cmd("botright copen") + end + + vim.keymap.set("n", "gr", function() + vim.lsp.log.error("GETTING REFERENCES") + vim.lsp.buf.references(nil, { on_list = on_list }) + end, { noremap = true }) end) -- (Optional) Configure lua language server for neovim lsp.nvim_workspace() lsp.setup() + + vim.lsp.log.error("SETTING UP LSP") + vim.lsp.enable("angular-language-server") end function M.undotree()