try! Swift San Joseの作業メモ

WWDC18 に付随して行われた try! Swift San Jose に参加してきた。前半は Swift コミッターによるパネルディスカッション、後半は Open Source Swift にコントリビュートするというワークショップだった。このワークショップを通して apple/swiftPull Request を送ることができた。

最近読んだ id:higepon さんの ログのすすめ をとても良いと感じていて、ワークショップの作業はログを書きながら行ってみた。ログを残すことによって、自分が今取り組んでいる課題は何か、次に行うべき作業は何か、かなり明確にすることができた。特に Swift コンパイラという普段自分が扱っているコードベースとは全く異なる環境ではかなり助けになる実感があった。 せっかくなので、その時の作業メモを残しておく。


バグチケット

https://bugs.swift.org/browse/SR-7844?filter=10451

<stdin>:3:3: error: computed property must have accessors specified
  }
  ^

こうしたい

<stdin>:3:3: error: subscript must have accessors specified
  }
  ^

ゴール

  • [x]subscript の diagnostics が computed property になっているのを修正する
    • [x]どういう時に出るエラーか
      • getter がない時に出る

分からないこと

  • [x] 開発環境
  • [x] デバッグの仕方
    • バグを再現するテストを書いて、直ったことを確認する
    • PRにはテストが必要
    • テストは短ければ短いほどいい
  • [x]テストの書き方

やること

  • [x] issue に自分をアサインする
  • [x] bug をバイナリで reproduce する
    • ビルドした swift を実行する
      • :0: error: Swift does not support the SDK 'MacOSX10.13.sdk
      • xcode-select で Xcode10beta見るようにしたら直った
  • [x] テストを動かす
  • [x] バグを再現するテスト書く
      - test/decl/subscript/subscripting.swift 173行目
    
  • [x] computed property の方のテストが壊れていないことを確認する
      - test/decl/var/properties.swift 379行目
    
  • [x] どこをどうやって修正するか

    • include/swift/AST/DiagnosticsParse.def
      • 251行目、プレースホルダを使うように文言を修正する
      • "%select{variable|subscript}0 must provide either a getter or “ こういうやつ???
    • [x] %select を使って修正する
    • [x] 呼び元で引数を渡す
      • lib/Parse/ParseDecl.cpp
        • computed propertyとsubscriptを区別する
        • bool Parser::parseGetSetImpl 多分ここにisSubscript を渡さないといけない
        • static void diagnoseRedundantAccessors の引数に isSubscript というのがある (lib/Parse/ParseDecl.cpp 4016行目)
  • [x] 自分の環境に fork して clone する

  • [x] 自分がforkした方に修正を入れる
  • [ ] 自分がforkした方でビルドする
  • [ ] 自分がforkした方でテストを通す
    • [x] fork し直すのではなく、git の remote origin を変更した
  • [x] PRを作る

このようにゴール、分からないこと、やることのアウトラインを先に書いて、作業を進めながら詳細を書き足していった。