有没有办法将 IDEA "malformed format string" 意图应用于自定义方法?

Is there a way to apply IDEA "malformed format string" intention to custom methods?

编写表单代码时:

String.format("blah %s %s", value1);

IntelliJ 将警告格式模式数量与实际参数不匹配:too few arguments for format string (found:1, expected: 2).

有没有办法将此逻辑应用于自定义方法? 例如:

/** @see String#format(String, Object...) */
public String myMethod(String msg, Object... args){
  return String.format("blah " + msg, args);
}
...

myMethod("%s %s", value1);

重点是我希望 IDEA 告诉我我搞砸了。

如示例所示,我已经记录了这些委托给 String.format() 的方法。

理想情况下,我宁愿避免重复该文档 - 尽管我愿意将其转换为自定义格式,或者可能是注释(但最好不是 IDEA 注释)。

您可以在检查设置中配置额外的"formatter methods":

如果您将检查配置文件配置为 "Project Default",并检查相关文件(在 .idea 文件夹中),那么检查该项目并使用 IDEA 的每个人都会从中受益。

Stephen Friedrich 的回答指向了正确的方向,但屏幕截图不足以了解如何使用该功能。下面是如何让它工作,更详细一点:

  1. 在 "Additional formatter classes" 框中输入您创建的包含自定义 format() 方法的任何自定义 classes。因此,在 OP 的情况下,如果他们的 myMethod() 方法属于某些 com.acme.MyClass class,那么他们将在那里输入 com.acme.MyClass

如果他们的自定义格式化方法被调用 format(),这就是 OP 需要做的所有事情。但是,他们的自定义格式化方法有不同的名称,因此他们还需要执行第二步。

  1. 在 "Additional formatter methods" 框中输入您创建的任何自定义方法的名称,这些方法的工作方式类似于 format()。因此,在 OP 的情况下,字符串 myMethod 将被添加到那里。请注意,您不需要包含 class 限定符、括号或参数,只需包含方法名称。

从外观上看,在 "Additional formatter methods" 框中输入的每个方法名称都适用于在 "Additional formatter classes" 框中输入的所有 classes,即使只有其中一个classes其实包含了这样一个方法。此外,即使 class 中的 none 包含这样的方法,或者具有这样名称的方法存在,但它们没有 void (String format, Object... arguments) 的必要签名,也不会出现错误.

因此,此功能的实现方式似乎非常古怪,是我们不习惯从 JetBrains 看到的那种方式。另外值得注意的是,功能实现中的黑客行为使用户更难弄清楚如何使用该功能。

我认为最好通过在格式化方法上添加额外注释来实现此功能。 (但我们不要在这里争论这个,这是一个问答网站。)