From 3f34f2de48e393b2ee289f2c8fa613c7eabae6d8 Mon Sep 17 00:00:00 2001 From: Steven Arcangeli <506791+stevearc@users.noreply.github.com> Date: Thu, 31 Aug 2023 08:54:11 -0700 Subject: feat: format() takes an optional callback (#21) * refactor: replicate lsp.buf.format call * feat: format() takes an optional callback * fix: improper logging * fix: callback returns error if buffer is no longer valid * fix: provide more detailed error message to callback * fix: properly detect task interruption * cleanup: remove unnecessary error code translation * fix: lsp formatting for Neovim 0.9 * doc: add example of async formatting on save * fix: async LSP formatter discards changes if buffer was modified * fix: error code comparison * fix: use the same LSP client filtering logic everywhere * fix: add buffer validity guard checks * fix: add buffer validity guard to LSP formatter * refactor: change the default log level to WARN --- tests/autoformat_doc.lua | 20 -------------- tests/options_doc.lua | 71 ------------------------------------------------ 2 files changed, 91 deletions(-) delete mode 100644 tests/autoformat_doc.lua delete mode 100644 tests/options_doc.lua (limited to 'tests') diff --git a/tests/autoformat_doc.lua b/tests/autoformat_doc.lua deleted file mode 100644 index 8c0761e..0000000 --- a/tests/autoformat_doc.lua +++ /dev/null @@ -1,20 +0,0 @@ -vim.api.nvim_create_autocmd("BufWritePre", { - pattern = "*", - callback = function(args) - -- Disable autoformat on certain filetypes - local ignore_filetypes = { "sql", "java" } - if vim.tbl_contains(ignore_filetypes, vim.bo[args.buf].filetype) then - return - end - -- Disable with a global or buffer-local variable - if vim.g.disable_autoformat or vim.b[args.buf].disable_autoformat then - return - end - -- Disable autoformat for files in a certain path - local bufname = vim.api.nvim_buf_get_name(args.buf) - if bufname:match("/node_modules/") then - return - end - require("conform").format({ timeout_ms = 500, lsp_fallback = true, buf = args.buf }) - end, -}) diff --git a/tests/options_doc.lua b/tests/options_doc.lua deleted file mode 100644 index 82447fb..0000000 --- a/tests/options_doc.lua +++ /dev/null @@ -1,71 +0,0 @@ -require("conform").setup({ - -- Map of filetype to formatters - formatters_by_ft = { - lua = { "stylua" }, - -- Conform will use the first available formatter in the list - javascript = { "prettier_d", "prettier" }, - -- Formatters can also be specified with additional options - python = { - formatters = { "isort", "black" }, - -- Run formatters one after another instead of stopping at the first success - run_all_formatters = true, - -- Don't run these formatters as part of the format_on_save autocmd (see below) - format_on_save = false, - }, - }, - -- If this is set, Conform will run the formatter on save. - -- It will pass the table to conform.format(). - format_on_save = { - -- I recommend these options. See :help conform.format for details. - lsp_fallback = true, - timeout_ms = 500, - }, - -- Set the log level. Use `:ConformInfo` to see the location of the log file. - log_level = vim.log.levels.ERROR, - -- Conform will notify you when a formatter errors - notify_on_error = true, - -- Define custom formatters here - formatters = { - my_formatter = { - -- This can be a string or a function that returns a string - command = "my_cmd", - -- OPTIONAL - all fields below this are optional - -- A list of strings, or a function that returns a list of strings - args = { "--stdin-from-filename", "$FILENAME" }, - -- If the formatter supports range formatting, create the range arguments here - range_args = function(ctx) - return { "--line-start", ctx.range.start[1], "--line-end", ctx.range["end"][1] } - end, - -- Send file contents to stdin, read new contents from stdout (default true) - -- When false, will create a temp file (will appear in "$FILENAME" args). The temp - -- file is assumed to be modified in-place by the format command. - stdin = true, - -- A function the calculates the directory to run the command in - cwd = require("conform.util").root_file({ ".editorconfig", "package.json" }), - -- When cwd is not found, don't run the formatter (default false) - require_cwd = true, - -- When returns false, the formatter will not be used - condition = function(ctx) - return vim.fs.basename(ctx.filename) ~= "README.md" - end, - -- Exit codes that indicate success (default {0}) - exit_codes = { 0, 1 }, - -- Environment variables. This can also be a function that returns a table. - env = { - VAR = "value", - }, - }, - -- These can also be a function that returns the formatter - other_formatter = function() - return { - command = "my_cmd", - } - end, - }, -}) - --- You can set formatters_by_ft and formatters directly -require("conform").formatters_by_ft.lua = { "stylua" } -require("conform").formatters.my_formatter = { - command = "my_cmd", -} -- cgit v1.2.3-70-g09d2