npm/yarn/pnpm/bun commands I don't want to type
Runs npm outdated --json in the background and then compares the output with versions in package.json and displays them as virtual text.
vim.keymap.set({ "n" }, "<leader>ns", "<cmd>PackageInfoShow<cr>", { silent = true, noremap = true })
PackageInfoShowForce like in the example below:vim.keymap.set({ "n" }, "<leader>ns", "<cmd>PackageInfoShowForce<cr>", { silent = true, noremap = true })
Runs yarn remove, npm uninstall, pnpm uninstall or bun remove in the background and reloads the buffer.
vim.keymap.set({ "n" }, "<leader>nd", "<cmd>PackageInfoDelete<cr>", { silent = true, noremap = true })
Runs npm install dependency@version, yarn upgrade dependency@version, pnpm update dependency or bun add dependency@version in the background and reloads the buffer.
vim.keymap.set({ "n" }, "<leader>np", "<cmd>PackageInfoChangeVersion<cr>", { silent = true, noremap = true })
Runs npm install dependency, yarn add dependency, pnpm add dependency or bun add dependency in the background and reloads the buffer.
vim.keymap.set({ "n" }, "<leader>ni", "<cmd>PackageInfoInstall<cr>", { silent = true, noremap = true })
Function that can be placed anywhere to display the loading status from the plugin.
neovim by invoking return require('package-info').get_status()local package_info = require("package-info")
-- Galaxyline
section.left[10] = {
PackageInfoStatus = {
provider = function()
return package_info.get_status()
end,
},
}
-- Feline
components.right.active[5] = {
provider = function()
return package_info.get_status()
end,
hl = {
style = "bold",
},
left_sep = " ",
right_sep = " ",
}
yq for pnpm workspace support (optional)use({
"vuki656/package-info.nvim",
requires = "MunifTanjim/nui.nvim",
})
require('package-info').setup()
{
-- Check `:help nvim_set_hl()` for more attributes.
highlights = {
up_to_date = { -- highlight for up to date dependency virtual text
fg = "#3C4048"
},
outdated = { -- highlight for outdated dependency virtual text
fg = "#d19a66"
},
invalid = { -- highlight for invalid dependency virtual text
fg = "#ee4b2b"
},
},
icons = {
enable = true, -- Whether to display icons
style = {
up_to_date = "| ", -- Icon for up to date dependencies
outdated = "| ", -- Icon for outdated dependencies
invalid = "| ", -- Icon for invalid dependencies
},
},
notifications = true, -- Whether to display notifications when running commands
autostart = true, -- Whether to autostart when `package.json` is opened
hide_up_to_date = false, -- It hides up to date versions when displaying virtual text
hide_unstable_versions = false, -- It hides unstable versions from version list e.g next-11.1.3-canary3
timeout = 3000, -- Time in ms before notifications are dismissed
-- Can be `npm`, `yarn`, `pnpm` or `bun`. Used for `delete`, `install` etc...
-- The plugin will try to auto-detect the package manager based on
-- `yarn.lock`, `package-lock.json`, `bun.lock` or `pnpm-lock.yaml`, starting in the
-- directory of the `package.json` and walking up to the root of the repository, so a
-- package in a monorepo picks up the lock file of the workspace root. If none are found it
-- will use the provided one, if nothing is provided it will use `npm`
package_manager = 'npm'
}
termguicolors is false, package-info switches to 256 color mode.ctermfg ctermbg) are used
instead of truecolor hex codes (fg bg) and the color defaults are:highlights = {
up_to_date = {
ctermfg = 237
},
outdated = {
ctermfg = 173
},
invalid = {
ctermfg = 196
fg = "#ee4b2b" -- Set both cterm and fg
}
}
Check :help nvim_set_hl() for more attributes.
Old config (deprecated):
require("package-info").setup({
colors = {
up_to_date = "#3C4048",
outdated = "#d19a66",
invalid = "#ee4b2b",
},
})
New config:
require("package-info").setup({
highlights = {
up_to_date = { fg = "#3C4048" },
outdated = { fg = "#d19a66" },
invalid = { fg = "#ee4b2b" },
},
})
| Command | Description |
|---|---|
:PackageInfoShow |
Show the latest version of each dependency |
:PackageInfoShowForce |
Show the latest version of each dependency, ignoring the cache |
:PackageInfoHide |
Hide the dependency versions |
:PackageInfoToggle |
Toggle the dependency versions |
:PackageInfoUpdate |
Update the dependency on the current line |
:PackageInfoDelete |
Delete the dependency on the current line |
:PackageInfoInstall |
Install a new dependency |
:PackageInfoChangeVersion |
Change the version of the dependency on the current line |
Plugin has no default Keybindings.
You can copy the ones below:
-- Show dependency versions
vim.keymap.set({ "n" }, "<LEADER>ns", "<cmd>PackageInfoShow<cr>", { silent = true, noremap = true })
-- Hide dependency versions
vim.keymap.set({ "n" }, "<LEADER>nc", "<cmd>PackageInfoHide<cr>", { silent = true, noremap = true })
-- Toggle dependency versions
vim.keymap.set({ "n" }, "<LEADER>nt", "<cmd>PackageInfoToggle<cr>", { silent = true, noremap = true })
-- Update dependency on the line
vim.keymap.set({ "n" }, "<LEADER>nu", "<cmd>PackageInfoUpdate<cr>", { silent = true, noremap = true })
-- Delete dependency on the line
vim.keymap.set({ "n" }, "<LEADER>nd", "<cmd>PackageInfoDelete<cr>", { silent = true, noremap = true })
-- Install a new dependency
vim.keymap.set({ "n" }, "<LEADER>ni", "<cmd>PackageInfoInstall<cr>", { silent = true, noremap = true })
-- Install a different dependency version
vim.keymap.set({ "n" }, "<LEADER>np", "<cmd>PackageInfoChangeVersion<cr>", { silent = true, noremap = true })
Highly inspired by telescope-lazy.nvim
require("telescope").setup({
extensions = {
package_info = {
-- Optional theme (the extension doesn't set a default theme)
theme = "ivy",
},
},
})
require("telescope").load_extension("package_info")
:Telescope package_info
| Highlight Group | Default value | Description |
|---|---|---|
| PackageInfoOutdatedVersion | fg = #d19a66 ctermfg = 173 | Highlight out of date dependencies virtual text |
| PackageInfoUpToDateVersion | fg = #3C4048 ctermfg = 237 | Highlight up to date dependencies virtual text |
| PackageInfoInErrorVersion | fg = #ee4b2b ctermfg = 196 | Highlight invalid dependencies virtual text |
package.json you are in, so npm, yarn, pnpm and
bun install into that package instead of the workspace rootpackage.json, commands run in the closest package.json
directory above itpackage.jsonpnpm catalogs are read from the closest pnpm-workspace.yaml above the package.jsonpackage.json, so moving between packages doesn't refetchnpm outdated --json command taking a long time. Nothing can be done about that