You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Elixir 1.6的.formatter.exs实现函数间空两行?

配置Elixir 1.6代码格式化工具 & 函数间保留两行空行

嘿,我来帮你搞定Elixir 1.6的代码格式化配置问题!

一、基础设置代码格式化工具

Elixir 1.6首次引入了mix format命令,自带代码格式化能力,配置起来很简单:

  1. 在项目根目录创建(如果还没有).formatter.exs文件,这是格式化工具的核心配置文件。
  2. 基础配置示例如下,你可以根据项目需求调整:
[
  # 指定要格式化的文件范围,覆盖项目常见的代码文件
  inputs: ["*.{ex,exs}", "priv/*/seeds.exs", "{config,lib,test}/**/*.{ex,exs}"],
  # 自定义行长度,默认是98
  line_length: 120,
  # 配置不需要加括号的本地函数,让代码更简洁
  locals_without_parens: [fetch: 1, update: 2]
]

配置好之后,直接在终端运行mix format就能格式化所有匹配的文件了。

二、让模块内函数间保留两行空行

这里要说明一下:Elixir 1.6的默认格式化工具会自动把函数定义之间的多个空行压缩成一行,而且当时的版本没有内置配置项直接修改这个行为。不过有两个变通方案可以实现你的需求:

方案1:用注释占位符(简单但不优雅)

如果你只是想在特定函数之间保留两行空行,可以在空行位置加一个无内容的注释(#),格式化工具不会移除它:

defmodule UserService do
  def get_user(id) do
    # 业务逻辑
  end

  #

  def update_user(id, params) do
    # 业务逻辑
  end
end

这个方法不需要复杂配置,适合快速实现需求,但会留下注释占位符,可能影响代码美观。

方案2:自定义格式化模块(灵活但需要开发)

如果你想要全局统一让函数间保留两行空行,可以自定义一个格式化模块,扩展默认的格式化逻辑:

  1. 在项目中创建一个自定义格式化模块,比如MyApp.Formatter,实现format/2函数,先调用默认格式化器处理代码,再修改输出内容,在函数定义之间插入额外的空行:
defmodule MyApp.Formatter do
  @behaviour Mix.Tasks.Format.Formatter

  @impl true
  def format(source, opts) do
    # 先用默认格式化器处理
    formatted = Mix.Tasks.Format.DefaultFormatter.format(source, opts)
    # 将函数定义之间的单个空行替换成两个空行
    String.replace(formatted, "\n\ndef ", "\n\n\ndef ")
  end

  @impl true
  def features, do: [sigils: [], extensions: [".ex", ".exs"]]
end
  1. 在.formatter.exs中指定使用这个自定义模块:
[
  formatter: MyApp.Formatter,
  # 其他基础配置...
]

这个方案更灵活,能全局统一处理,但需要你有一定的Elixir元编程和字符串处理经验。

额外建议:升级Elixir版本(最优解)

如果你的项目可以升级到Elixir 1.10及以上版本,事情会简单很多——新版本的格式化工具新增了newlines_between_functions配置项,直接在.formatter.exs里加一行就能搞定:

[
  # 其他配置...
  newlines_between_functions: 2
]

这是最简洁优雅的方案,推荐优先考虑升级(只要项目依赖允许的话)。

希望这些方法能帮到你!

内容的提问来源于stack exchange,提问作者Denys Klymenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:07:17