summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Arcangeli <506791+stevearc@users.noreply.github.com>2023-10-05 20:43:18 -0700
committerGitHub <noreply@github.com>2023-10-05 20:43:18 -0700
commitba1ca20bb5f89a8bdd94b268411263275550843a (patch)
tree55701bf91f11e091cd1e6e36d6c8d167996ca168
parent0bffab53672d62cbfe8fc450e78757982e656318 (diff)
feat: expose configuration options for injected formatter (#118)
-rw-r--r--lua/conform/formatters/injected.lua35
-rw-r--r--lua/conform/init.lua7
-rw-r--r--lua/conform/runner.lua2
3 files changed, 35 insertions, 9 deletions
diff --git a/lua/conform/formatters/injected.lua b/lua/conform/formatters/injected.lua
index db5b3ae..b9d3acd 100644
--- a/lua/conform/formatters/injected.lua
+++ b/lua/conform/formatters/injected.lua
@@ -60,17 +60,29 @@ local function apply_indent(lines, indentation)
end
end
----@type conform.FileLuaFormatterConfig
+---@class conform.InjectedFormatterConfig : conform.FileLuaFormatterConfig
+---@field format fun(self: conform.InjectedFormatterConfig, ctx: conform.Context, lines: string[], callback: fun(err: nil|string, new_lines: nil|string[]))
+---@field condition? fun(self: conform.InjectedFormatterConfig, ctx: conform.Context): boolean
+---@field options conform.InjectedFormatterOptions
+
+---@class (exact) conform.InjectedFormatterOptions
+---@field ignore_errors boolean
+
+---@type conform.InjectedFormatterConfig
return {
meta = {
url = "lua/conform/formatters/injected.lua",
description = "Format treesitter injected languages.",
},
- condition = function(ctx)
+ options = {
+ -- Set to true to ignore errors
+ ignore_errors = false,
+ },
+ condition = function(self, ctx)
local ok = pcall(vim.treesitter.get_parser, ctx.buf)
return ok
end,
- format = function(ctx, lines, callback)
+ format = function(self, ctx, lines, callback)
local conform = require("conform")
local log = require("conform.log")
local util = require("conform.util")
@@ -112,8 +124,20 @@ return {
local function apply_format_results()
if format_error then
- callback(format_error)
- return
+ if self.options.ignore_errors then
+ -- Find all of the conform errors in the replacements table and remove them
+ local i = 1
+ while i <= #replacements do
+ if replacements[i].code then
+ table.remove(replacements, i)
+ else
+ i = i + 1
+ end
+ end
+ else
+ callback(format_error)
+ return
+ end
end
local formatted_lines = vim.deepcopy(lines)
@@ -133,6 +157,7 @@ return {
local formatter_cb = function(err, idx, start_lnum, end_lnum, new_lines)
if err then
format_error = err
+ replacements[idx] = err
else
replacements[idx] = { start_lnum, end_lnum, new_lines }
end
diff --git a/lua/conform/init.lua b/lua/conform/init.lua
index ba2f8fc..fe6f934 100644
--- a/lua/conform/init.lua
+++ b/lua/conform/init.lua
@@ -19,8 +19,8 @@ local M = {}
---@field env? table<string, any>|fun(ctx: conform.Context): table<string, any>
---@class (exact) conform.LuaFormatterConfig
----@field format fun(ctx: conform.Context, lines: string[], callback: fun(err: nil|string, new_lines: nil|string[]))
----@field condition? fun(ctx: conform.Context): boolean
+---@field format fun(self: conform.LuaFormatterConfig, ctx: conform.Context, lines: string[], callback: fun(err: nil|string, new_lines: nil|string[]))
+---@field condition? fun(self: conform.LuaFormatterConfig, ctx: conform.Context): boolean
---@class (exact) conform.FileLuaFormatterConfig : conform.LuaFormatterConfig
---@field meta conform.FormatterMeta
@@ -574,7 +574,8 @@ M.get_formatter_info = function(formatter, bufnr)
local available = true
local available_msg = nil
if config.format then
- if config.condition and not config.condition(ctx) then
+ ---@cast config conform.LuaFormatterConfig
+ if config.condition and not config:condition(ctx) then
available = false
available_msg = "Condition failed"
end
diff --git a/lua/conform/runner.lua b/lua/conform/runner.lua
index b77678f..ef96e42 100644
--- a/lua/conform/runner.lua
+++ b/lua/conform/runner.lua
@@ -265,7 +265,7 @@ local function run_formatter(bufnr, formatter, config, ctx, input_lines, opts, c
log.trace("Input lines: %s", input_lines)
if config.format then
---@cast config conform.LuaFormatterConfig
- local ok, err = pcall(config.format, ctx, input_lines, callback)
+ local ok, err = pcall(config.format, config, ctx, input_lines, callback)
if not ok then
callback({
code = M.ERROR_CODE.RUNTIME,