diff options
| author | awy <awy@awy.one> | 2025-10-20 20:55:26 +0300 | 
|---|---|---|
| committer | awy <awy@awy.one> | 2025-10-20 20:55:26 +0300 | 
| commit | 662dafc52b2c8a9426bb2197ab9246a8cda318e4 (patch) | |
| tree | f9d1f20e3864360bf941fd6bc02848ed77b037a8 /.config/nvim/lsp/biome.lua | |
| parent | 8131d9f2898b991a2d2c7a2ac601ce9e07cc9c9f (diff) | |
| download | hyprdots-662dafc52b2c8a9426bb2197ab9246a8cda318e4.tar.gz | |
nvqw
Diffstat (limited to '.config/nvim/lsp/biome.lua')
| -rw-r--r-- | .config/nvim/lsp/biome.lua | 72 | 
1 files changed, 72 insertions, 0 deletions
diff --git a/.config/nvim/lsp/biome.lua b/.config/nvim/lsp/biome.lua new file mode 100644 index 0000000..a134347 --- /dev/null +++ b/.config/nvim/lsp/biome.lua @@ -0,0 +1,72 @@ +---@brief +--- https://biomejs.dev +--- +--- Toolchain of the web. [Successor of Rome](https://biomejs.dev/blog/annoucing-biome). +--- +--- ```sh +--- npm install [-g] @biomejs/biome +--- ``` +--- +--- ### Monorepo support +--- +--- `biome` supports monorepos by default. It will automatically find the `biome.json` corresponding to the package you are working on, as described in the [documentation](https://biomejs.dev/guides/big-projects/#monorepo). This works without the need of spawning multiple instances of `biome`, saving memory. + +local util = require 'lspconfig.util' + +---@type vim.lsp.Config +return { +  cmd = function(dispatchers, config) +    local cmd = 'biome' +    local local_cmd = (config or {}).root_dir and config.root_dir .. '/node_modules/.bin/biome' +    if local_cmd and vim.fn.executable(local_cmd) == 1 then +      cmd = local_cmd +    end +    return vim.lsp.rpc.start({ cmd, 'lsp-proxy' }, dispatchers) +  end, +  filetypes = { +    'astro', +    'css', +    'graphql', +    'html', +    'javascript', +    'javascriptreact', +    'json', +    'jsonc', +    'svelte', +    'typescript', +    'typescript.tsx', +    'typescriptreact', +    'vue', +  }, +  workspace_required = true, +  root_dir = function(bufnr, on_dir) +    -- The project root is where the LSP can be started from +    -- As stated in the documentation above, this LSP supports monorepos and simple projects. +    -- We select then from the project root, which is identified by the presence of a package +    -- manager lock file. +    local root_markers = { 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb', 'bun.lock' } +    -- Give the root markers equal priority by wrapping them in a table +    root_markers = vim.fn.has('nvim-0.11.3') == 1 and { root_markers, { '.git' } } +      or vim.list_extend(root_markers, { '.git' }) +    -- We fallback to the current working directory if no project root is found +    local project_root = vim.fs.root(bufnr, root_markers) or vim.fn.getcwd() + +    -- We know that the buffer is using Biome if it has a config file +    -- in its directory tree. +    local filename = vim.api.nvim_buf_get_name(bufnr) +    local biome_config_files = { 'biome.json', 'biome.jsonc' } +    biome_config_files = util.insert_package_json(biome_config_files, 'biome', filename) +    local is_buffer_using_biome = vim.fs.find(biome_config_files, { +      path = filename, +      type = 'file', +      limit = 1, +      upward = true, +      stop = vim.fs.dirname(project_root), +    })[1] +    if not is_buffer_using_biome then +      return +    end + +    on_dir(project_root) +  end, +}  |