如何捕获JSON格式的Swift REPL编译器错误

消防员

我希望从JSON或XML等可读格式中捕获Swift REPL中的Swift编译器错误

我能做的最好的事情就是通过标准输入/输出管道将它读为字符串。我几乎swiftc没有运气就尝试过几乎所有参数/选项

我读到可以编写扩展LLDB的Python脚本,但不知道从哪里开始。

目前,格式为:

/Users/joeblow/Desktop/pre-compiled.swift:1:38: error: cannot convert value of type 'Int' to specified type 'String'
var age = 10; var name: String = 12;
                                 ^~

但是我对这样的事情更感兴趣:

{
  path: "/Users/joeblow/Desktop/compiled.swift",
  line: 1,
  position: 38,
  error: "cannot convert value of type 'Int' to specified type 'String'"
}

我不想使用正则表达式/字符串操作。

吉姆·英厄姆(Jim Ingham)

快速编译器接受-parseable-output标志,该标志产生包含错误的结构化输出。例如,如果wrong.swift有您示例的内容,我将看到:

 > swiftc -g -Onone -parseable-output wrong.swift
1149
{
  "kind": "began",
  "name": "compile",
  "command": "\/Applications\/Xcode.app\/Contents\/Developer\/Toolchains\/XcodeDefault.xctoolchain\/usr\/bin\/swift -frontend -c -primary-file wrong.swift -target x86_64-apple-macosx10.9 -enable-objc-interop -sdk \/Applications\/Xcode.app\/Contents\/Developer\/Platforms\/MacOSX.platform\/Developer\/SDKs\/MacOSX10.13.sdk -g -emit-module-doc-path \/var\/folders\/zc\/dp8ptx_10pg8m6pnwpbnjms00000gp\/T\/wrong-bc5f07.swiftdoc -color-diagnostics -Onone -module-name wrong -emit-module-path \/var\/folders\/zc\/dp8ptx_10pg8m6pnwpbnjms00000gp\/T\/wrong-bc5f07.swiftmodule -o \/var\/folders\/zc\/dp8ptx_10pg8m6pnwpbnjms00000gp\/T\/wrong-bc5f07.o",
  "inputs": [
    "wrong.swift"
  ],
  "outputs": [
    {
      "type": "object",
      "path": "\/var\/folders\/zc\/dp8ptx_10pg8m6pnwpbnjms00000gp\/T\/wrong-bc5f07.o"
    },
    {
      "type": "swiftmodule",
      "path": "\/var\/folders\/zc\/dp8ptx_10pg8m6pnwpbnjms00000gp\/T\/wrong-bc5f07.swiftmodule"
    },
    {
      "type": "swiftdoc",
      "path": "\/var\/folders\/zc\/dp8ptx_10pg8m6pnwpbnjms00000gp\/T\/wrong-bc5f07.swiftdoc"
    }
  ],
  "pid": 33440
}
306
{
  "kind": "finished",
  "name": "compile",
  "pid": 33440,
  "output": "\u001B[1mwrong.swift:1:21: \u001B[0;1;31merror: \u001B[0m\u001B[1mcannot convert value of type 'Int' to specified type 'String'\n\u001B[0mvar name : String = 12\n\u001B[0;1;32m                    ^~\n\u001B[0m",
  "exit-status": 1
}

但是,尽管REPL使用swift编译器实例来解析表达式,但它没有办法接受“额外的标志”并将其传递给该编译器,因此目前我不认为有任何方法可以使REPL达到以这种形式发出错误。

如果您对此功能感兴趣,请向swift.org JIRA提出增强请求。如果您喜欢冒险,甚至可以尝试自己添加它。您将必须获得swift驱动程序将此选项传递给lldb,然后使lldb解析并将其传递给其编译器。可能还必须仅从输出中提取错误,否则可能会太嘈杂。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章