# coc-oxc

[Oxc](https://github.com/oxc-project/oxc) extension for coc.nvim

## Install

`:CocInstall coc-oxc`

## Features

- **oxlint**: Fast linter with auto-fix support
- **oxfmt**: Fast formatter with format-on-save support

> **Note:** This plugin only uses oxlint and oxfmt installed in the respective project; it does not activate globally.

## Vite+

If `vite-plus` is installed in the workspace root, the plugin runs `vp lint --lsp` and `vp fmt --lsp` from it.
If `vite-plus` is not installed, it falls back to `node_modules/.bin`.
An explicit `binPath` takes priority.

## Configurations

### Oxlint (Linter)

- `oxc.oxlint.enable`: Enable oxlint language server (default: `true`)
- `oxc.oxlint.run`: Run the linter on save `onSave` or on type `onType` (default: `onType`)
- `oxc.oxlint.configPath`: Path to oxlint configuration (default: `null`, searches for `.oxlintrc.json`)
- `oxc.oxlint.binPath`: Path to the `oxlint` binary (default: searches in `node_modules/.bin`)
- `oxc.oxlint.codeActionsOnSave`: Code action kinds to apply on save, e.g. `["source.fixAll.oxc"]` (default: `[]`, disabled)

### Oxfmt (Formatter)

- `oxc.oxfmt.enable`: Enable oxfmt formatting (default: `true`)
- `oxc.oxfmt.binPath`: Path to the `oxfmt` binary (default: searches in `node_modules/.bin`)
- `oxc.oxfmt.formatterPriority`: Priority used when multiple formatters are registered for a language. Only positive values boost; the default `1` outranks formatters that do not set a priority. To defer for a given language, use `coc.preferences.formatterExtension` instead (default: `1`)

## Format on Save

To enable format on save, add this to your coc-config (`:CocConfig`):

```json
{
  "oxc.oxfmt.enable": true,
  "coc.preferences.formatterExtension": "coc-oxc"
}
```

`coc.preferences.formatterExtension` tells coc.nvim to use coc-oxc whenever it is available, which avoids conflicts with other extensions that also register an LSP formatter (e.g. `coc-biome`, `coc-tsserver`, `coc-prettier`). You can scope it per-language if you want a different formatter for some files:

```json
{
  "[json]": { "coc.preferences.formatterExtension": "coc-prettier" }
}
```

oxfmt also registers itself with `oxc.oxfmt.formatterPriority` `1` by default, which outranks any extension that does not set a priority.

You can also format manually with `:call CocAction('format')`

## Fix on Save

To apply oxlint's auto-fixes on save, add this to your coc-config (`:CocConfig`):

```json
{
  "oxc.oxlint.codeActionsOnSave": ["source.fixAll.oxc"]
}
```

## Commands

### Oxlint Commands

- `oxlint.restartServer`: Restart oxlint Server
- `oxlint.showOutputChannel`: Show oxlint Output Channel

### Oxfmt Commands

- `oxfmt.restartServer`: Restart oxfmt Server
- `oxfmt.showOutputChannel`: Show oxfmt Output Channel

## License

MIT

---

> This extension is built with [create-coc-extension](https://github.com/fannheyward/create-coc-extension)

# [Sponsored By](https://oxc.rs/sponsor)

<p align="center">
  <a href="https://oxc.rs/sponsor">
    <img src="https://raw.githubusercontent.com/oxc-project/sponsors/main/sponsors.svg" alt="Our sponsors" />
  </a>
</p>
