aboutsummaryrefslogtreecommitdiffstats
path: root/lua/conform
diff options
context:
space:
mode:
authorSteven Arcangeli <stevearc@stevearc.com>2023-09-29 13:06:27 -0700
committerSteven Arcangeli <stevearc@stevearc.com>2023-09-29 13:06:27 -0700
commit671186e4b29e26ee9fc0f1df4e529134bc334666 (patch)
tree6dd5cdb8f9ca8ba4a5d6522a700786b7ff7e5839 /lua/conform
parent470d41988e83913df428c9e832c15b8bb84301ad (diff)
fix: injected formatter hangs on empty file
Diffstat (limited to 'lua/conform')
-rw-r--r--lua/conform/formatters/injected.lua7
-rw-r--r--lua/conform/runner.lua12
2 files changed, 16 insertions, 3 deletions
diff --git a/lua/conform/formatters/injected.lua b/lua/conform/formatters/injected.lua
index 4990e05..bc4016c 100644
--- a/lua/conform/formatters/injected.lua
+++ b/lua/conform/formatters/injected.lua
@@ -53,6 +53,7 @@ return {
end,
format = function(ctx, lines, callback)
local conform = require("conform")
+ local log = require("conform.log")
local util = require("conform.util")
local ok, parser = pcall(vim.treesitter.get_parser, ctx.buf)
if not ok then
@@ -78,6 +79,7 @@ return {
table.sort(regions, function(a, b)
return a[2] > b[2]
end)
+ log.trace("Injected formatter regions %s", regions)
local replacements = {}
local format_error = nil
@@ -124,6 +126,8 @@ return {
local formatter_names = conform.formatters_by_ft[lang]
local format_opts = { async = true, bufnr = ctx.buf, quiet = true }
local idx = num_format
+ log.debug("Injected format %s:%d:%d: %s", lang, start_lnum, end_lnum, formatter_names)
+ log.trace("Injected format lines %s", input_lines)
conform.format_lines(formatter_names, input_lines, format_opts, function(err, new_lines)
-- Preserve indentation in case the code block is indented
apply_indent(input_lines, new_lines)
@@ -131,5 +135,8 @@ return {
end)
end
end
+ if num_format == 0 then
+ apply_format_results()
+ end
end,
}
diff --git a/lua/conform/runner.lua b/lua/conform/runner.lua
index a8ea203..7530008 100644
--- a/lua/conform/runner.lua
+++ b/lua/conform/runner.lua
@@ -257,9 +257,17 @@ local last_run_errored = {}
---@param callback fun(err?: conform.Error, output?: string[])
---@return integer? job_id
local function run_formatter(bufnr, formatter, config, ctx, input_lines, callback)
+ log.info("Run %s on %s", formatter.name, vim.api.nvim_buf_get_name(bufnr))
+ log.trace("Input lines: %s", input_lines)
if config.format then
---@cast config conform.LuaFormatterConfig
- config.format(ctx, input_lines, callback)
+ local ok, err = pcall(config.format, ctx, input_lines, callback)
+ if not ok then
+ callback({
+ code = M.ERROR_CODE.RUNTIME,
+ message = string.format("Formatter '%s' error: %s", formatter.name, err),
+ })
+ end
return
end
---@cast config conform.JobFormatterConfig
@@ -283,14 +291,12 @@ local function run_formatter(bufnr, formatter, config, ctx, input_lines, callbac
end
end)
- log.info("Run %s on %s", formatter.name, vim.api.nvim_buf_get_name(bufnr))
local buffer_text
-- If the buffer has a newline at the end, make sure we include that in the input to the formatter
local add_extra_newline = vim.bo[bufnr].eol
if add_extra_newline then
table.insert(input_lines, "")
end
- log.trace("Input lines: %s", input_lines)
buffer_text = table.concat(input_lines, "\n")
if add_extra_newline then
table.remove(input_lines)