从 Scala 调用时无法将复杂样式传递给 clang 格式
Can't pass complex -style to clang-format when invoking from Scala
在 Scala 中,我调用命令行 clang-format
如下:
val formatterParams = List("-i", "-sort-includes", s"-style=llvm", headerFile.getAbsolutePath)
Process("clang-format", formatterParams).!
这很好用。从命令行我可以调用它作为
clang-format -style='{BasedOnStyle: llvm, IndentWidth: 4}' library-api/src/main/resources/Cols.hpp
这也很好用。所以我写
val formatterParams = List("-i", "-sort-includes", "-style='{BasedOnStyle: llvm, IndentWidth: 4}'", headerFile.getAbsolutePath)
Process("clang-format", formatterParams).!
并...得到
Invalid value for -style, using LLVM style.
我也尝试将整个命令传递给 Process.apply
,但没有用。
编辑:使用 Java ProcessBuilder
确实可以作为解决方法。我仍然想要 Scala Process
.
的答案
尝试删除 -style
参数值周围的 single-quotes。
这些单引号是特殊的 Bash 语法,您需要在命令行上停止 Bash 解释同样是特殊 Bash 语法的大括号。 Bash 在调用 clang-format
.
时从参数的最终值中删除单引号
但是 Process
不使用 Bash 到 运行 子进程,所以 single-quotes 被转发到 clang-format
本身,这可能不会理解他们。
在 Scala 中,我调用命令行 clang-format
如下:
val formatterParams = List("-i", "-sort-includes", s"-style=llvm", headerFile.getAbsolutePath)
Process("clang-format", formatterParams).!
这很好用。从命令行我可以调用它作为
clang-format -style='{BasedOnStyle: llvm, IndentWidth: 4}' library-api/src/main/resources/Cols.hpp
这也很好用。所以我写
val formatterParams = List("-i", "-sort-includes", "-style='{BasedOnStyle: llvm, IndentWidth: 4}'", headerFile.getAbsolutePath)
Process("clang-format", formatterParams).!
并...得到
Invalid value for -style, using LLVM style.
我也尝试将整个命令传递给 Process.apply
,但没有用。
编辑:使用 Java ProcessBuilder
确实可以作为解决方法。我仍然想要 Scala Process
.
尝试删除 -style
参数值周围的 single-quotes。
这些单引号是特殊的 Bash 语法,您需要在命令行上停止 Bash 解释同样是特殊 Bash 语法的大括号。 Bash 在调用 clang-format
.
但是 Process
不使用 Bash 到 运行 子进程,所以 single-quotes 被转发到 clang-format
本身,这可能不会理解他们。