aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Arcangeli <stevearc@stevearc.com>2024-03-14 04:58:04 +0000
committerSteven Arcangeli <stevearc@stevearc.com>2024-03-14 04:58:04 +0000
commita605ce4b2db397c84ae6fa8bcfc85f00b985bc73 (patch)
tree0b88cdf8d9ea3c08c68af2222ac027648724c3e6
parentc92e265eb94a78bf0033a54f1f734fd7d69f48b9 (diff)
fix(rustfmt): parse edition from Cargo.toml (#330)
-rw-r--r--lua/conform/formatters/rustfmt.lua23
1 files changed, 20 insertions, 3 deletions
diff --git a/lua/conform/formatters/rustfmt.lua b/lua/conform/formatters/rustfmt.lua
index 34fb09b..62d2d78 100644
--- a/lua/conform/formatters/rustfmt.lua
+++ b/lua/conform/formatters/rustfmt.lua
@@ -1,3 +1,16 @@
+---@param manifest string
+---@return nil|string
+local function parse_edition(manifest)
+ for line in io.lines(manifest) do
+ if line:match("^edition *=") then
+ local edition = line:match("%d+")
+ if edition then
+ return edition
+ end
+ end
+ end
+end
+
---@type conform.FileFormatterConfig
return {
meta = {
@@ -11,12 +24,16 @@ return {
},
args = function(self, ctx)
local args = { "--emit=stdout" }
+ local edition
local manifest = vim.fs.find("Cargo.toml", { upward = true, path = ctx.dirname })[1]
if manifest then
- table.insert(args, "--manifest-path=" .. manifest)
- elseif self.options.default_edition then
- table.insert(args, "--edition=" .. self.options.default_edition)
+ edition = parse_edition(manifest)
+ end
+ if not edition then
+ edition = self.options.default_edition
end
+ table.insert(args, "--edition=" .. edition)
+
return args
end,
}