2017-11-17 24 views
1

標準イン/アウトパイプを介してStringとして出力されます。ほぼすべての議論/オプションをswiftcで試してみました。は、どのように私はJSON形式でスウィフトREPLコンパイラエラーをつかむことができ、私は私ができる最善のは、それを読まれる</p> <p>なJSONやXMLなどの読みやすい形式でスウィフトREPLからスウィフトコンパイルエラーをつかむために探しています

私は、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; 
           ^~ 

しかし、私はこのようなものに興味がmoresoだ:私は正規表現/文字列操作を使用したくない

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

答えて

2

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を解析してコンパイラに渡すには、素早いドライバを入手する必要があります。おそらく出力からエラーだけを抽出しなければならないか、あまりにもノイズが多いでしょう。

+0

これは素晴らしい情報です。私は同じ結論に達し、今それが確認されます。 LLDBで動作するようにPythonスクリプトを書くことができると思いますか、またはSwiftソースコードを確実に拡張する必要がありますか? – firedev

+1

lldb Python APIを使用してコンパイルからエラーを取得することはできますが、それらは構造化されていないフォームになります。あなたは手でそれらを解析する必要がないと言ったので、Swiftコンパイラによって生成された構造化されたフォームを利用したい場合は、lldbにそれらを生成する方法を教える必要があります。 –

関連する問題