diff options
-rw-r--r-- | README.md | 22 | ||||
-rw-r--r-- | doc/conform.txt | 7 | ||||
-rw-r--r-- | lua/conform/init.lua | 17 |
3 files changed, 30 insertions, 16 deletions
@@ -354,17 +354,17 @@ vim.api.nvim_create_autocmd("BufWritePost", { `format(opts, callback): boolean` \ Format a buffer -| Param | Type | Desc | | -| -------- | ---------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -| opts | `nil\|table` | | | -| | timeout_ms | `nil\|integer` | Time in milliseconds to block for formatting. Defaults to 1000. No effect if async = true. | -| | bufnr | `nil\|integer` | Format this buffer (default 0) | -| | async | `nil\|boolean` | If true the method won't block. Defaults to false. | -| | formatters | `nil\|string[]` | List of formatters to run. Defaults to all formatters for the buffer filetype. | -| | lsp_fallback | `nil\|boolean` | Attempt LSP formatting if no formatters are available. Defaults to false. | -| | quiet | `nil\|boolean` | Don't show any notifications for warnings or failures. Defaults to false. | -| | range | `nil\|table` | Range to format. Table must contain `start` and `end` keys with {row, col} tuples using (1,0) indexing. Defaults to current selection in visual mode | -| callback | `nil\|fun(err: nil\|string)` | Called once formatting has completed | | +| Param | Type | Desc | | +| -------- | ---------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| opts | `nil\|table` | | | +| | timeout_ms | `nil\|integer` | Time in milliseconds to block for formatting. Defaults to 1000. No effect if async = true. | +| | bufnr | `nil\|integer` | Format this buffer (default 0) | +| | async | `nil\|boolean` | If true the method won't block. Defaults to false. | +| | formatters | `nil\|string[]` | List of formatters to run. Defaults to all formatters for the buffer filetype. | +| | lsp_fallback | `nil\|boolean\|"always"` | Attempt LSP formatting if no formatters are available. Defaults to false. If "always", will attempt LSP formatting even if formatters are available (useful if you set formatters for the "*" filetype) | +| | quiet | `nil\|boolean` | Don't show any notifications for warnings or failures. Defaults to false. | +| | range | `nil\|table` | Range to format. Table must contain `start` and `end` keys with {row, col} tuples using (1,0) indexing. Defaults to current selection in visual mode | +| callback | `nil\|fun(err: nil\|string)` | Called once formatting has completed | | Returns: diff --git a/doc/conform.txt b/doc/conform.txt index fada19a..149db88 100644 --- a/doc/conform.txt +++ b/doc/conform.txt @@ -99,8 +99,11 @@ format({opts}, {callback}): boolean *conform.forma to false. {formatters} `nil|string[]` List of formatters to run. Defaults to all formatters for the buffer filetype. - {lsp_fallback} `nil|boolean` Attempt LSP formatting if no formatters - are available. Defaults to false. + {lsp_fallback} `nil|boolean|"always"` Attempt LSP formatting if no + formatters are available. Defaults to false. If + "always", will attempt LSP formatting even if + formatters are available (useful if you set formatters + for the "*" filetype) {quiet} `nil|boolean` Don't show any notifications for warnings or failures. Defaults to false. {range} `nil|table` Range to format. Table must contain `start` diff --git a/lua/conform/init.lua b/lua/conform/init.lua index 2761b45..9f844b1 100644 --- a/lua/conform/init.lua +++ b/lua/conform/init.lua @@ -213,13 +213,13 @@ end --- bufnr nil|integer Format this buffer (default 0) --- async nil|boolean If true the method won't block. Defaults to false. --- formatters nil|string[] List of formatters to run. Defaults to all formatters for the buffer filetype. ---- lsp_fallback nil|boolean Attempt LSP formatting if no formatters are available. Defaults to false. +--- lsp_fallback nil|boolean|"always" Attempt LSP formatting if no formatters are available. Defaults to false. If "always", will attempt LSP formatting even if formatters are available (useful if you set formatters for the "*" filetype) --- quiet nil|boolean Don't show any notifications for warnings or failures. Defaults to false. --- range nil|table Range to format. Table must contain `start` and `end` keys with {row, col} tuples using (1,0) indexing. Defaults to current selection in visual mode ---@param callback? fun(err: nil|string) Called once formatting has completed ---@return boolean True if any formatters were attempted M.format = function(opts, callback) - ---@type {timeout_ms: integer, bufnr: integer, async: boolean, lsp_fallback: boolean, quiet: boolean, formatters?: string[], range?: conform.Range} + ---@type {timeout_ms: integer, bufnr: integer, async: boolean, lsp_fallback: boolean|"always", quiet: boolean, formatters?: string[], range?: conform.Range} opts = vim.tbl_extend("keep", opts or {}, { timeout_ms = 1000, bufnr = 0, @@ -269,7 +269,18 @@ M.format = function(opts, callback) if not err_message and not vim.api.nvim_buf_is_valid(opts.bufnr) then err_message = "buffer was deleted" end - callback(err_message) + if err_message then + return callback(err_message) + end + + if + opts.lsp_fallback == "always" and not vim.tbl_isempty(lsp_format.get_format_clients(opts)) + then + log.debug("Running LSP formatter on %s", vim.api.nvim_buf_get_name(opts.bufnr)) + lsp_format.format(opts, callback) + else + callback() + end end if opts.async then |