寄付窓口はこちら

SwiftSyntax で便利を実現する基礎 | try! Swift Tokyo 2019 2-5

SwiftSyntax を使うと、Swift のコード生成や書き換え、静的検査などを実現できます。しかし、SwiftSyntax の使い方はほとんど知られていません。この方法をダイジェストで紹介します。

f:id:niwatako:20190322115452j:plain

f:id:niwatako:20190322115458j:plain

f:id:niwatako:20190322115504j:plain

f:id:niwatako:20190322115510j:plain

f:id:niwatako:20190322115518j:plain

2つの機能

f:id:niwatako:20190322115528j:plain

まず読み書きしやすいデータにする部分

f:id:niwatako:20190322115548j:plain

よくあるif分。条件と複文の2つから構成されている

条件にはオプション束縛条件が含まれている。

オプション束縛条件はさらに分解できる。

コードを分解して下へたどりました。木構造です。

f:id:niwatako:20190322115628j:plain

f:id:niwatako:20190322115642j:plain

コードを木構造で扱えるようにしたものが構文木

f:id:niwatako:20190322115709j:plain

if文は取りにくいのであとで

f:id:niwatako:20190322115714j:plain

f:id:niwatako:20190322115722j:plain

textから変数名が読み取れる

f:id:niwatako:20190322115739j:plain

応用すると

f:id:niwatako:20190322115751j:plain

オレオレSwiftLintができる

f:id:niwatako:20190322115807j:plain

のこり

f:id:niwatako:20190322115812j:plain

これができれば便利でsね

f:id:niwatako:20190322115821j:plain

実現するコードです

f:id:niwatako:20190322115830j:plain

f:id:niwatako:20190322115839j:plain

実際にコードを修正している部分

SyntaxRewriterを継承している

f:id:niwatako:20190322115853j:plain

今回書き換えたいのは変数パターンなのでオーバーライド

thisのときだけ書き換える

f:id:niwatako:20190322115917j:plain

f:id:niwatako:20190322115933j:plain

f:id:niwatako:20190322115954j:plain

f:id:niwatako:20190322120010j:plain