作ったよ
sters/markdown-table-formatter: markdown-table-formatter
|hoge |huga|
|--------------|------|
|its|confusing |markdown|
|table |so|crazy|table|.|
みたいなガタガタテーブルが書かれているテキストをキレイに揃えてくれるやつ。
|hoge |huga | | | |
|-----|---------|--------|-----|-|
|its |confusing|markdown| | |
|table|so |crazy |table|.|
何も考えずにこんな要素が必要では?とテストを書いていって、それに合わせて実装をしていったので、同じことを何度もやっているような部分もあって、 アーキテクチャ的には再考の余地あり。
struct に中間データ的なものを閉じ込めてバケツリレーするのが簡単かなあ。 テストがいるので、ここからリファクタしがいありますね、って感じで。
書いてみて、ポインタとかまったく気にしなくて良いってことがわかってきた。 出番はほぼないのと、あっても波線出たときにどうにかする、ということだけを、とりあえず、それでよさそう。
リリースの配布
タグを設定すると Circle CI が動いてリリースが作られるようにしてみた。 (go get に必要なのかな?と思ったけどそういうわけではなかったみたい)
goreleaser を使ったリリースというタスクを作って、ワークフローで制御している。
goreleaser/goreleaser: Deliver Go binaries as fast and easily as possible
設定はここみて。
markdown-table-formatter/config.yml at master · sters/markdown-table-formatter
詰まったポイント
テスト時の assert を見やすくするために gopwt を使ってみたんですが、-cover したときにカバレッジが出なくなる問題があり、そこで無駄に詰まった。 gopwt のソースを調査するのはまたの機会にして、カバレッジ測定では gopwt を無効にした。
markdown-table-formatter/Makefile at master · sters/markdown-table-formatter
あと go get したときにそのままバイナリができる方法がわからなかった。ググってもそれっぽい回答が見つからない。。公式ドキュメントのどこかにいるのかなあ…
わからなかったので、リリースを作ってみたが違った ./main.go にして見たらバイナリが作られるようになった。 ディレクトリ切るとだめなんかな。いや、./formatter.go がいたからダメだったのかな、、 ドキュメントどこーー
そのほか
カバレッジ出ると楽しい。 100%にするのが完璧なテストというわけではないけど、そもそもココのテストできてなくね?とかが可視化されるの便利。