swift 컴파일러는 오류를 포함한 구조화 된 출력을 생성하는 -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이 식을 구문 분석에 대한 빠른 컴파일러 인스턴스를 사용하는 반면, 그것을 받아들이고 "추가 합격 할 수있는 방법이 없습니다 플래그 "컴파일러, 그래서 현재 REPL이이 형식으로 오류를 방출하는 방법이 있다고 생각하지 않습니다.
이 기능에 관심이 있으시면 swift.org JIRA로 개선 요청을 보내주십시오. 모험이라면 직접 추가 할 수도 있습니다. 이 옵션을 lldb에 전달하고 lldb를 파싱하여 컴파일러에 전달하려면 신속한 드라이버를 얻어야합니다. 아마도 또한 출력에서만 오류를 추출해야하거나 너무 시끄 럽습니다.
좋은 정보입니다. 나는 똑같은 결론에 도달했고 이제는 확증된다. LLDB를 사용하기 위해 Python 스크립트를 작성할 수 있다고 생각하십니까? 아니면 Swift 소스 코드를 확실히 확장해야합니까? – firedev
lldb Python API를 사용하여 컴파일 오류를 얻을 수는 있지만 구조화되지 않은 양식이 될 수 있습니다. Swift 컴파일러가 생성 한 구조화 된 형식을 사용하려면 lldb에 생성 방법을 가르쳐야합니다. –