diff options
author | Steven Arcangeli <stevearc@stevearc.com> | 2023-08-28 18:28:07 -0700 |
---|---|---|
committer | Steven Arcangeli <stevearc@stevearc.com> | 2023-08-28 18:28:07 -0700 |
commit | cddd536e087a9fd3d2c9ea5b0a44e46c7b4b54c2 (patch) | |
tree | 70f6868440596ae90b7f451379c3abfa5678849c /lua/conform/formatters | |
parent | 69c4495ab5ad3c07c3a4f3c2bcac2f070718b4cb (diff) |
feat: range formatting
Should work the same as vim.lsp.buf.format(). Additionally, range
formatting is supported for *any* formatter. If the formatter doesn't
have native support for ranges, conform will do its best to only apply the
diffs that affect that range.
Diffstat (limited to 'lua/conform/formatters')
40 files changed, 80 insertions, 40 deletions
diff --git a/lua/conform/formatters/autoflake.lua b/lua/conform/formatters/autoflake.lua index 04daf71..c7d0a3b 100644 --- a/lua/conform/formatters/autoflake.lua +++ b/lua/conform/formatters/autoflake.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/PyCQA/autoflake", diff --git a/lua/conform/formatters/autopep8.lua b/lua/conform/formatters/autopep8.lua index 5ed2f83..3945e47 100644 --- a/lua/conform/formatters/autopep8.lua +++ b/lua/conform/formatters/autopep8.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/hhatto/autopep8", @@ -6,4 +6,7 @@ return { }, command = "autopep8", args = { "-" }, + range_args = function(ctx) + return { "-", "--line-range", tostring(ctx.range.start[1]), tostring(ctx.range["end"][1]) } + end, } diff --git a/lua/conform/formatters/black.lua b/lua/conform/formatters/black.lua index 0d892a2..e27ed90 100644 --- a/lua/conform/formatters/black.lua +++ b/lua/conform/formatters/black.lua @@ -1,5 +1,5 @@ local util = require("conform.util") ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/psf/black", diff --git a/lua/conform/formatters/clang_format.lua b/lua/conform/formatters/clang_format.lua index d2c6d41..44af877 100644 --- a/lua/conform/formatters/clang_format.lua +++ b/lua/conform/formatters/clang_format.lua @@ -1,4 +1,5 @@ ----@type conform.FormatterConfig +local util = require("conform.util") +---@type conform.FileFormatterConfig return { meta = { url = "https://www.kernel.org/doc/html/latest/process/clang-format.html", @@ -6,4 +7,16 @@ return { }, command = "clang-format", args = { "-assume-filename", "$FILENAME" }, + range_args = function(ctx) + local start_offset, end_offset = util.get_offsets_from_range(ctx.buf, ctx.range) + local length = end_offset - start_offset + return { + "-assume-filename", + "$FILENAME", + "--offset", + tostring(start_offset), + "--length", + tostring(length), + } + end, } diff --git a/lua/conform/formatters/cljstyle.lua b/lua/conform/formatters/cljstyle.lua index ffd8061..21205a5 100644 --- a/lua/conform/formatters/cljstyle.lua +++ b/lua/conform/formatters/cljstyle.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/greglook/cljstyle", diff --git a/lua/conform/formatters/cmake_format.lua b/lua/conform/formatters/cmake_format.lua index 563bcae..0e98108 100644 --- a/lua/conform/formatters/cmake_format.lua +++ b/lua/conform/formatters/cmake_format.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/cheshirekow/cmake_format", diff --git a/lua/conform/formatters/dart_format.lua b/lua/conform/formatters/dart_format.lua index eb9b39c..e110b06 100644 --- a/lua/conform/formatters/dart_format.lua +++ b/lua/conform/formatters/dart_format.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://dart.dev/tools/dart-format", diff --git a/lua/conform/formatters/dfmt.lua b/lua/conform/formatters/dfmt.lua index 49c99cb..41dd667 100644 --- a/lua/conform/formatters/dfmt.lua +++ b/lua/conform/formatters/dfmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/dlang-community/dfmt", diff --git a/lua/conform/formatters/elm_format.lua b/lua/conform/formatters/elm_format.lua index 23f1408..5b0db5c 100644 --- a/lua/conform/formatters/elm_format.lua +++ b/lua/conform/formatters/elm_format.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/avh4/elm-format", diff --git a/lua/conform/formatters/erb_format.lua b/lua/conform/formatters/erb_format.lua index dad08ca..65d7d10 100644 --- a/lua/conform/formatters/erb_format.lua +++ b/lua/conform/formatters/erb_format.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/nebulab/erb-formatter", diff --git a/lua/conform/formatters/eslint_d.lua b/lua/conform/formatters/eslint_d.lua index e036aae..e7a5227 100644 --- a/lua/conform/formatters/eslint_d.lua +++ b/lua/conform/formatters/eslint_d.lua @@ -1,5 +1,5 @@ local util = require("conform.util") ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/mantoni/eslint_d.js/", diff --git a/lua/conform/formatters/fish_indent.lua b/lua/conform/formatters/fish_indent.lua index 1501072..7e10ed4 100644 --- a/lua/conform/formatters/fish_indent.lua +++ b/lua/conform/formatters/fish_indent.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://fishshell.com/docs/current/cmds/fish_indent.html", diff --git a/lua/conform/formatters/gdformat.lua b/lua/conform/formatters/gdformat.lua index 914bb89..d180f12 100644 --- a/lua/conform/formatters/gdformat.lua +++ b/lua/conform/formatters/gdformat.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/Scony/godot-gdscript-toolkit", diff --git a/lua/conform/formatters/gofmt.lua b/lua/conform/formatters/gofmt.lua index b0b81c3..2bfd6b4 100644 --- a/lua/conform/formatters/gofmt.lua +++ b/lua/conform/formatters/gofmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://pkg.go.dev/cmd/gofmt", diff --git a/lua/conform/formatters/gofumpt.lua b/lua/conform/formatters/gofumpt.lua index 79fb4dc..2d4f9a5 100644 --- a/lua/conform/formatters/gofumpt.lua +++ b/lua/conform/formatters/gofumpt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/mvdan/gofumpt", diff --git a/lua/conform/formatters/goimports.lua b/lua/conform/formatters/goimports.lua index 2361e43..64efea6 100644 --- a/lua/conform/formatters/goimports.lua +++ b/lua/conform/formatters/goimports.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://pkg.go.dev/golang.org/x/tools/cmd/goimports", diff --git a/lua/conform/formatters/htmlbeautifier.lua b/lua/conform/formatters/htmlbeautifier.lua index 3182f99..73b9275 100644 --- a/lua/conform/formatters/htmlbeautifier.lua +++ b/lua/conform/formatters/htmlbeautifier.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/threedaymonk/htmlbeautifier", diff --git a/lua/conform/formatters/isort.lua b/lua/conform/formatters/isort.lua index f6c6e3d..9b02c4e 100644 --- a/lua/conform/formatters/isort.lua +++ b/lua/conform/formatters/isort.lua @@ -1,5 +1,5 @@ local util = require("conform.util") ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/PyCQA/isort", diff --git a/lua/conform/formatters/jq.lua b/lua/conform/formatters/jq.lua index 50a905d..061ed03 100644 --- a/lua/conform/formatters/jq.lua +++ b/lua/conform/formatters/jq.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/stedolan/jq", diff --git a/lua/conform/formatters/nixfmt.lua b/lua/conform/formatters/nixfmt.lua index 6c5001a..27029d5 100644 --- a/lua/conform/formatters/nixfmt.lua +++ b/lua/conform/formatters/nixfmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/serokell/nixfmt", diff --git a/lua/conform/formatters/nixpkgs_fmt.lua b/lua/conform/formatters/nixpkgs_fmt.lua index 6685fe8..9ca6a8a 100644 --- a/lua/conform/formatters/nixpkgs_fmt.lua +++ b/lua/conform/formatters/nixpkgs_fmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/nix-community/nixpkgs-fmt", diff --git a/lua/conform/formatters/ocamlformat.lua b/lua/conform/formatters/ocamlformat.lua index 4ea1b49..0305083 100644 --- a/lua/conform/formatters/ocamlformat.lua +++ b/lua/conform/formatters/ocamlformat.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/ocaml-ppx/ocamlformat", diff --git a/lua/conform/formatters/pg_format.lua b/lua/conform/formatters/pg_format.lua index 87aff66..f016454 100644 --- a/lua/conform/formatters/pg_format.lua +++ b/lua/conform/formatters/pg_format.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/darold/pgFormatter", diff --git a/lua/conform/formatters/prettier.lua b/lua/conform/formatters/prettier.lua index 6f4bbfb..ea45ffb 100644 --- a/lua/conform/formatters/prettier.lua +++ b/lua/conform/formatters/prettier.lua @@ -1,5 +1,5 @@ local util = require("conform.util") ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/prettier/prettier", @@ -7,6 +7,10 @@ return { }, command = util.from_node_modules("prettier"), args = { "--stdin-filepath", "$FILENAME" }, + range_args = function(ctx) + local start_offset, end_offset = util.get_offsets_from_range(ctx.buf, ctx.range) + return { "$FILENAME", "--range-start=" .. start_offset, "--range-end=" .. end_offset } + end, cwd = util.root_file({ -- https://prettier.io/docs/en/configuration.html ".prettierrc", diff --git a/lua/conform/formatters/prettierd.lua b/lua/conform/formatters/prettierd.lua index 0af6baf..3cdc19e 100644 --- a/lua/conform/formatters/prettierd.lua +++ b/lua/conform/formatters/prettierd.lua @@ -1,5 +1,5 @@ local util = require("conform.util") ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/fsouza/prettierd", @@ -7,6 +7,10 @@ return { }, command = util.from_node_modules("prettierd"), args = { "$FILENAME" }, + range_args = function(ctx) + local start_offset, end_offset = util.get_offsets_from_range(ctx.buf, ctx.range) + return { "$FILENAME", "--range-start=" .. start_offset, "--range-end=" .. end_offset } + end, cwd = util.root_file({ -- https://prettier.io/docs/en/configuration.html ".prettierrc", diff --git a/lua/conform/formatters/rubocop.lua b/lua/conform/formatters/rubocop.lua index 492f379..5e2a143 100644 --- a/lua/conform/formatters/rubocop.lua +++ b/lua/conform/formatters/rubocop.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/rubocop/rubocop", diff --git a/lua/conform/formatters/rustfmt.lua b/lua/conform/formatters/rustfmt.lua index 7b5e322..d8f0f19 100644 --- a/lua/conform/formatters/rustfmt.lua +++ b/lua/conform/formatters/rustfmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/rust-lang/rustfmt", diff --git a/lua/conform/formatters/scalafmt.lua b/lua/conform/formatters/scalafmt.lua index 2b9e451..ea82624 100644 --- a/lua/conform/formatters/scalafmt.lua +++ b/lua/conform/formatters/scalafmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/scalameta/scalafmt", diff --git a/lua/conform/formatters/shfmt.lua b/lua/conform/formatters/shfmt.lua index 6e40f0c..29b8615 100644 --- a/lua/conform/formatters/shfmt.lua +++ b/lua/conform/formatters/shfmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/mvdan/sh", diff --git a/lua/conform/formatters/sql_formatter.lua b/lua/conform/formatters/sql_formatter.lua index bd92851..9452a61 100644 --- a/lua/conform/formatters/sql_formatter.lua +++ b/lua/conform/formatters/sql_formatter.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/sql-formatter-org/sql-formatter", diff --git a/lua/conform/formatters/stylua.lua b/lua/conform/formatters/stylua.lua index ac482bd..d971932 100644 --- a/lua/conform/formatters/stylua.lua +++ b/lua/conform/formatters/stylua.lua @@ -1,5 +1,5 @@ local util = require("conform.util") ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/JohnnyMorganz/StyLua", @@ -7,6 +7,19 @@ return { }, command = "stylua", args = { "--search-parent-directories", "--stdin-filepath", "$FILENAME", "-" }, + range_args = function(ctx) + local start_offset, end_offset = util.get_offsets_from_range(ctx.buf, ctx.range) + return { + "--search-parent-directories", + "--stdin-filepath", + "$FILENAME", + "--range-start", + tostring(start_offset), + "--range-end", + tostring(end_offset), + "-", + } + end, cwd = util.root_file({ ".stylua.toml", "stylua.toml", diff --git a/lua/conform/formatters/swift_format.lua b/lua/conform/formatters/swift_format.lua index 2b81297..e3e4365 100644 --- a/lua/conform/formatters/swift_format.lua +++ b/lua/conform/formatters/swift_format.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/apple/swift-format", diff --git a/lua/conform/formatters/swiftformat.lua b/lua/conform/formatters/swiftformat.lua index 821a010..ed142ad 100644 --- a/lua/conform/formatters/swiftformat.lua +++ b/lua/conform/formatters/swiftformat.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/nicklockwood/SwiftFormat", diff --git a/lua/conform/formatters/terraform_fmt.lua b/lua/conform/formatters/terraform_fmt.lua index 44edc55..fba8a12 100644 --- a/lua/conform/formatters/terraform_fmt.lua +++ b/lua/conform/formatters/terraform_fmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://www.terraform.io/docs/cli/commands/fmt.html", diff --git a/lua/conform/formatters/uncrustify.lua b/lua/conform/formatters/uncrustify.lua index 3430063..2782e96 100644 --- a/lua/conform/formatters/uncrustify.lua +++ b/lua/conform/formatters/uncrustify.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/uncrustify/uncrustify", diff --git a/lua/conform/formatters/xmlformat.lua b/lua/conform/formatters/xmlformat.lua index 25b48e2..d04c9cc 100644 --- a/lua/conform/formatters/xmlformat.lua +++ b/lua/conform/formatters/xmlformat.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/pamoller/xmlformatter", diff --git a/lua/conform/formatters/yamlfix.lua b/lua/conform/formatters/yamlfix.lua index 1b00e01..7592340 100644 --- a/lua/conform/formatters/yamlfix.lua +++ b/lua/conform/formatters/yamlfix.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/lyz-code/yamlfix", diff --git a/lua/conform/formatters/yamlfmt.lua b/lua/conform/formatters/yamlfmt.lua index 56c6cb6..8f188ab 100644 --- a/lua/conform/formatters/yamlfmt.lua +++ b/lua/conform/formatters/yamlfmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/google/yamlfmt", diff --git a/lua/conform/formatters/yapf.lua b/lua/conform/formatters/yapf.lua index 5d7e866..fc3cfeb 100644 --- a/lua/conform/formatters/yapf.lua +++ b/lua/conform/formatters/yapf.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/google/yapf", @@ -6,4 +6,7 @@ return { }, command = "yapf", args = { "--quiet" }, + range_args = function(ctx) + return { "--quiet", "--lines", string.format("%d-%d", ctx.range.start[1], ctx.range["end"][1]) } + end, } diff --git a/lua/conform/formatters/zigfmt.lua b/lua/conform/formatters/zigfmt.lua index 9c93c0b..8097d9c 100644 --- a/lua/conform/formatters/zigfmt.lua +++ b/lua/conform/formatters/zigfmt.lua @@ -1,4 +1,4 @@ ----@type conform.FormatterConfig +---@type conform.FileFormatterConfig return { meta = { url = "https://github.com/ziglang/zig", |