feat: add NX monorepo support
This commit is contained in:
parent
c79153a55a
commit
e393100b98
4 changed files with 121 additions and 90 deletions
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"Comment.nvim": { "branch": "master", "commit": "0236521ea582747b58869cb72f70ccfa967d2e89" },
|
"Comment.nvim": { "branch": "master", "commit": "0236521ea582747b58869cb72f70ccfa967d2e89" },
|
||||||
"LuaSnip": { "branch": "master", "commit": "82108e7e31cc6fc223cc5df5cae6d89f70bb199f" },
|
"LuaSnip": { "branch": "master", "commit": "2dbef19461198630b3d7c39f414d09fb07d1fdd2" },
|
||||||
"SchemaStore.nvim": { "branch": "main", "commit": "aa03f815694c003892bb80efcf4d7c33aea3e009" },
|
"SchemaStore.nvim": { "branch": "main", "commit": "5264dd76f87904592ca5a4302c48389c1277ab28" },
|
||||||
"auto-session": { "branch": "main", "commit": "51196ca66b38fc1660fdf50031cb0b31a199b7c9" },
|
"auto-session": { "branch": "main", "commit": "51196ca66b38fc1660fdf50031cb0b31a199b7c9" },
|
||||||
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
||||||
"cmp-cmdline": { "branch": "main", "commit": "8ee981b4a91f536f52add291594e89fb6645e451" },
|
"cmp-cmdline": { "branch": "main", "commit": "8ee981b4a91f536f52add291594e89fb6645e451" },
|
||||||
|
@ -9,35 +9,35 @@
|
||||||
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
||||||
"cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" },
|
"cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" },
|
||||||
"cosmic-ui": { "branch": "main", "commit": "c0b14531999f2bfef3d927c4dcd57a1a8fed5ee9" },
|
"cosmic-ui": { "branch": "main", "commit": "c0b14531999f2bfef3d927c4dcd57a1a8fed5ee9" },
|
||||||
"friendly-snippets": { "branch": "main", "commit": "69a2c1675b66e002799f5eef803b87a12f593049" },
|
"friendly-snippets": { "branch": "main", "commit": "aced40b66b7bae9bc2c37fd7b11841d54727a7b0" },
|
||||||
"gitsigns.nvim": { "branch": "main", "commit": "4aaacbf5e5e2218fd05eb75703fe9e0f85335803" },
|
"gitsigns.nvim": { "branch": "main", "commit": "fb9fd5312476b51a42a98122616e1c448d823d5c" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "96584866b9c5e998cbae300594d0ccfd0c464627" },
|
"lazy.nvim": { "branch": "main", "commit": "aedcd79811d491b60d0a6577a9c1701063c2a609" },
|
||||||
"lualine.nvim": { "branch": "master", "commit": "566b7036f717f3d676362742630518a47f132fff" },
|
"lualine.nvim": { "branch": "master", "commit": "7d131a8d3ba5016229e8a1d08bf8782acea98852" },
|
||||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "0989bdf4fdf7b5aa4c74131d7ffccc3f399ac788" },
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "b9084b1f42f790d6230dc66dbcb6bcc35b148552" },
|
||||||
"mason.nvim": { "branch": "main", "commit": "e110bc3be1a7309617cecd77bfe4bf86ba1b8134" },
|
"mason.nvim": { "branch": "main", "commit": "dcd0ea30ccfc7d47e879878d1270d6847a519181" },
|
||||||
"neodev.nvim": { "branch": "main", "commit": "dde00106b9094f101980b364fae02fd85d357306" },
|
"neodev.nvim": { "branch": "main", "commit": "64b2a51b02c6f2ae177c745e4d8bc801a339fe09" },
|
||||||
"noice.nvim": { "branch": "main", "commit": "92433164e2f7118d4122c7674c3834d9511722ba" },
|
"noice.nvim": { "branch": "main", "commit": "bf67d70bd7265d075191e7812d8eb42b9791f737" },
|
||||||
"none-ls.nvim": { "branch": "main", "commit": "7e146f3a188853843bb4ca1bff24c912bb9b7177" },
|
"none-ls.nvim": { "branch": "main", "commit": "a311c7cc8f17543143a7482cdbe3a384c371d56a" },
|
||||||
"nui.nvim": { "branch": "main", "commit": "35da9ca1de0fc4dda96c2e214d93d363c145f418" },
|
"nui.nvim": { "branch": "main", "commit": "35da9ca1de0fc4dda96c2e214d93d363c145f418" },
|
||||||
"nvim-autopairs": { "branch": "master", "commit": "9fd41181693dd4106b3e414a822bb6569924de81" },
|
"nvim-autopairs": { "branch": "master", "commit": "096d0baecc34f6c5d8a6dd25851e9d5ad338209b" },
|
||||||
"nvim-cmp": { "branch": "main", "commit": "538e37ba87284942c1d76ed38dd497e54e65b891" },
|
"nvim-cmp": { "branch": "main", "commit": "538e37ba87284942c1d76ed38dd497e54e65b891" },
|
||||||
"nvim-colorizer.lua": { "branch": "master", "commit": "36c610a9717cc9ec426a07c8e6bf3b3abcb139d6" },
|
"nvim-colorizer.lua": { "branch": "master", "commit": "36c610a9717cc9ec426a07c8e6bf3b3abcb139d6" },
|
||||||
"nvim-lspconfig": { "branch": "master", "commit": "e47ccfae775f0d572ef0f3a7d245f043b259dafc" },
|
"nvim-lspconfig": { "branch": "master", "commit": "8917d2c830e04bf944a699b8c41f097621283828" },
|
||||||
"nvim-notify": { "branch": "master", "commit": "1576123bff3bed67bc673a3076e591abfe5d8ca9" },
|
"nvim-notify": { "branch": "master", "commit": "80b67b265530632505193553d05127ae7fe09ddd" },
|
||||||
"nvim-tree.lua": { "branch": "master", "commit": "b8c3a23e76f861d5f0ff3f6714b9b56388984d0b" },
|
"nvim-tree.lua": { "branch": "master", "commit": "7bdb220d0fe604a77361e92cdbc7af1b8a412126" },
|
||||||
"nvim-treesitter": { "branch": "master", "commit": "8cd2b230174efbf7b5d9f49fe2f90bda6b5eb16e" },
|
"nvim-treesitter": { "branch": "master", "commit": "efda19a54a157da8635aa6cb84f56a10593b1a23" },
|
||||||
"nvim-treesitter-refactor": { "branch": "master", "commit": "65ad2eca822dfaec2a3603119ec3cc8826a7859e" },
|
"nvim-treesitter-refactor": { "branch": "master", "commit": "65ad2eca822dfaec2a3603119ec3cc8826a7859e" },
|
||||||
"nvim-ts-autotag": { "branch": "main", "commit": "8515e48a277a2f4947d91004d9aa92c29fdc5e18" },
|
"nvim-ts-autotag": { "branch": "main", "commit": "a65b202cfd08e0e69e531eab737205ff5bc082a4" },
|
||||||
"nvim-ts-context-commentstring": { "branch": "main", "commit": "1277b4a1f451b0f18c0790e1a7f12e1e5fdebfee" },
|
"nvim-ts-context-commentstring": { "branch": "main", "commit": "1277b4a1f451b0f18c0790e1a7f12e1e5fdebfee" },
|
||||||
"nvim-web-devicons": { "branch": "master", "commit": "db0c864375c198cacc171ff373e76bfce2a85045" },
|
"nvim-web-devicons": { "branch": "master", "commit": "b427ac5f9dff494f839e81441fb3f04a58cbcfbc" },
|
||||||
"plenary.nvim": { "branch": "master", "commit": "55d9fe89e33efd26f532ef20223e5f9430c8b0c0" },
|
"plenary.nvim": { "branch": "master", "commit": "663246936325062427597964d81d30eaa42ab1e4" },
|
||||||
"popup.nvim": { "branch": "master", "commit": "b7404d35d5d3548a82149238289fa71f7f6de4ac" },
|
"popup.nvim": { "branch": "master", "commit": "b7404d35d5d3548a82149238289fa71f7f6de4ac" },
|
||||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "6c921ca12321edaa773e324ef64ea301a1d0da62" },
|
"telescope-fzf-native.nvim": { "branch": "main", "commit": "6c921ca12321edaa773e324ef64ea301a1d0da62" },
|
||||||
"telescope.nvim": { "branch": "master", "commit": "da8b3d485975a8727bea127518b65c980521ae22" },
|
"telescope.nvim": { "branch": "master", "commit": "1bfbb1fb5c56d2dbe33216fcb2ebe82e499aa06c" },
|
||||||
"todo-comments.nvim": { "branch": "main", "commit": "4a6737a8d70fe1ac55c64dfa47fcb189ca431872" },
|
"todo-comments.nvim": { "branch": "main", "commit": "833d8dd8b07eeda37a09e99460f72a02616935cb" },
|
||||||
"tokyonight.nvim": { "branch": "main", "commit": "f247ee700b569ed43f39320413a13ba9b0aef0db" },
|
"tokyonight.nvim": { "branch": "main", "commit": "e3301873c1e96903daebb98cc9b5926810bf73dd" },
|
||||||
"typescript-tools.nvim": { "branch": "master", "commit": "1469468977ea32dbcba0116c8f8fb19f1f902dca" },
|
"typescript-tools.nvim": { "branch": "master", "commit": "c43d9580c3ff5999a1eabca849f807ab33787ea7" },
|
||||||
"vim-floaterm": { "branch": "master", "commit": "3f01a623376957437f9376327637491b74719e38" },
|
"vim-floaterm": { "branch": "master", "commit": "3f01a623376957437f9376327637491b74719e38" },
|
||||||
"vim-fugitive": { "branch": "master", "commit": "59659093581aad2afacedc81f009ed6a4bfad275" },
|
"vim-fugitive": { "branch": "master", "commit": "854a8df0d06b8d3fcb30fa7f2b08c62b553eee3b" },
|
||||||
"which-key.nvim": { "branch": "main", "commit": "4433e5ec9a507e5097571ed55c02ea9658fb268a" }
|
"which-key.nvim": { "branch": "main", "commit": "4433e5ec9a507e5097571ed55c02ea9658fb268a" }
|
||||||
}
|
}
|
95
lua/cosmic/lsp/commands.lua
Normal file
95
lua/cosmic/lsp/commands.lua
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
-- Major props to @failen here
|
||||||
|
-- https://github.com/pmizio/typescript-tools.nvim/issues/124
|
||||||
|
vim.api.nvim_create_user_command('NxInit', function()
|
||||||
|
local now = tostring(os.time())
|
||||||
|
local fileName = string.format('%s_graph.json', now)
|
||||||
|
-- @TODO check if we should use yarn or npx
|
||||||
|
local cmd = string.format('yarn -s nx graph --file=%s', fileName)
|
||||||
|
|
||||||
|
local function handle_response(_, code)
|
||||||
|
-- read the file into memory
|
||||||
|
local projectGraphFile = io.open(fileName, 'r')
|
||||||
|
if projectGraphFile then
|
||||||
|
-- read project graph from file
|
||||||
|
local projectGraph = vim.json.decode(projectGraphFile:read('*a'))
|
||||||
|
projectGraphFile:close()
|
||||||
|
|
||||||
|
-- remove the graph file
|
||||||
|
os.remove(fileName)
|
||||||
|
|
||||||
|
-- get typescript-tools lsp client
|
||||||
|
local lspClients = vim.lsp.get_clients()
|
||||||
|
local tsclient
|
||||||
|
for _, client in ipairs(lspClients) do
|
||||||
|
if client.name == 'typescript-tools' then
|
||||||
|
tsclient = client
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not tsclient then
|
||||||
|
print('typescript-tools.nvim not active')
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- get workspace root
|
||||||
|
-- always first? alternatives to get absolute workspace root?
|
||||||
|
local workspacePath = tsclient.config.workspace_folders[1].name
|
||||||
|
if not workspacePath then
|
||||||
|
print('Could not figure out workspace path')
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- create external files for monodon
|
||||||
|
local externalFiles = {}
|
||||||
|
for _, project in pairs(projectGraph.graph.nodes) do
|
||||||
|
local sourceRoot = project.data.sourceRoot
|
||||||
|
|
||||||
|
-- skip the root
|
||||||
|
if sourceRoot ~= '.' and sourceRoot then
|
||||||
|
-- localte the entry file. perhaps use tsconfig.[app|lib].json
|
||||||
|
local mainFile
|
||||||
|
if
|
||||||
|
project.data
|
||||||
|
and project.data.targets
|
||||||
|
and project.data.targets.build
|
||||||
|
and project.data.targets.build.options
|
||||||
|
and project.data.targets.build.options.main
|
||||||
|
then
|
||||||
|
mainFile = workspacePath .. '/' .. project.data.targets.build.options.main
|
||||||
|
else
|
||||||
|
mainFile = workspacePath .. '/' .. sourceRoot .. '/index.ts'
|
||||||
|
end
|
||||||
|
|
||||||
|
-- insert to config
|
||||||
|
table.insert(externalFiles, {
|
||||||
|
mainFile = mainFile, -- this is not always index.ts!
|
||||||
|
directory = workspacePath .. '/' .. sourceRoot,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- print(vim.inspect(externalFiles))
|
||||||
|
-- send configuration request of monodon plugin to tsserver
|
||||||
|
local constants = require('typescript-tools.protocol.constants')
|
||||||
|
local method = constants.CustomMethods.ConfigurePlugin
|
||||||
|
local args = {
|
||||||
|
pluginName = '@monodon/typescript-nx-imports-plugin',
|
||||||
|
configuration = {
|
||||||
|
externalFiles = externalFiles,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: missing-parameter
|
||||||
|
tsclient.request(method, args, function()
|
||||||
|
print('tsserver handled configuration request', method)
|
||||||
|
end)
|
||||||
|
print('NX Plugin initialized!')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- call nx deamon with graph request, run it in the background with job
|
||||||
|
vim.fn.jobstart(cmd, {
|
||||||
|
on_exit = handle_response,
|
||||||
|
stdout_buffered = true,
|
||||||
|
stderr_buffered = true,
|
||||||
|
})
|
||||||
|
end, {})
|
|
@ -1,3 +1,4 @@
|
||||||
require('cosmic.lsp.diagnostics')
|
require('cosmic.lsp.diagnostics')
|
||||||
|
require('cosmic.lsp.commands')
|
||||||
|
|
||||||
-- LSP server initialization can be found in mason-lspconfig setup
|
-- LSP server initialization can be found in mason-lspconfig setup
|
||||||
|
|
|
@ -50,74 +50,9 @@ return {
|
||||||
start_server(config_server)
|
start_server(config_server)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- See: https://github.com/neovim/neovim/issues/23291
|
|
||||||
--[[ local watch_type = require('vim._watch').FileChangeType ]]
|
|
||||||
--[[]]
|
|
||||||
--[[ local function handler(res, callback) ]]
|
|
||||||
--[[ if not res.files or res.is_fresh_instance then ]]
|
|
||||||
--[[ return ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[]]
|
|
||||||
--[[ for _, file in ipairs(res.files) do ]]
|
|
||||||
--[[ local path = res.root .. '/' .. file.name ]]
|
|
||||||
--[[ local change = watch_type.Changed ]]
|
|
||||||
--[[ if file.new then ]]
|
|
||||||
--[[ change = watch_type.Created ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[ if not file.exists then ]]
|
|
||||||
--[[ change = watch_type.Deleted ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[ callback(path, change) ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[]]
|
|
||||||
--[[ local function watchman(path, opts, callback) ]]
|
|
||||||
--[[ vim.system({ 'watchman', 'watch', path }):wait() ]]
|
|
||||||
--[[]]
|
|
||||||
--[[ local buf = {} ]]
|
|
||||||
--[[ local sub = vim.system({ ]]
|
|
||||||
--[[ 'watchman', ]]
|
|
||||||
--[[ '-j', ]]
|
|
||||||
--[[ '--server-encoding=json', ]]
|
|
||||||
--[[ '-p', ]]
|
|
||||||
--[[ }, { ]]
|
|
||||||
--[[ stdin = vim.json.encode({ ]]
|
|
||||||
--[[ 'subscribe', ]]
|
|
||||||
--[[ path, ]]
|
|
||||||
--[[ 'nvim:' .. path, ]]
|
|
||||||
--[[ { ]]
|
|
||||||
--[[ expression = { 'anyof', { 'type', 'f' }, { 'type', 'd' } }, ]]
|
|
||||||
--[[ fields = { 'name', 'exists', 'new' }, ]]
|
|
||||||
--[[ }, ]]
|
|
||||||
--[[ }), ]]
|
|
||||||
--[[ stdout = function(_, data) ]]
|
|
||||||
--[[ if not data then ]]
|
|
||||||
--[[ return ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[ for line in vim.gsplit(data, '\n', { plain = true, trimempty = true }) do ]]
|
|
||||||
--[[ table.insert(buf, line) ]]
|
|
||||||
--[[ if line == '}' then ]]
|
|
||||||
--[[ local res = vim.json.decode(table.concat(buf)) ]]
|
|
||||||
--[[ handler(res, callback) ]]
|
|
||||||
--[[ buf = {} ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[ end, ]]
|
|
||||||
--[[ text = true, ]]
|
|
||||||
--[[ }) ]]
|
|
||||||
--[[]]
|
|
||||||
--[[ return function() ]]
|
|
||||||
--[[ sub:kill('sigint') ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[ end ]]
|
|
||||||
--[[]]
|
|
||||||
--[[ if vim.fn.executable('watchman') == 1 then ]]
|
|
||||||
--[[ require('vim.lsp._watchfiles')._watchfunc = watchman ]]
|
|
||||||
--[[ end ]]
|
|
||||||
end,
|
end,
|
||||||
dependencies = {
|
dependencies = {
|
||||||
'williamboman/mason.nvim',
|
'williamboman/mason.nvim',
|
||||||
},
|
},
|
||||||
event = 'BufEnter',
|
--[[ event = 'BufEnter', ]]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue