bouzuya.hatenablog.com

ぼうずやのにっき

bouzuya/yzrh 進捗

bouzuya/yzrh 0.1.0 を目指したけどそこまで進めず。代わりにコマンドラインオプションの解釈部分の使用感は 0.1.0 になったと言えそう。

module Test.Bouzuya.CommandLineOption
  ( tests
  ) where

import Bouzuya.CommandLineOption (parse)
import Bouzuya.CommandLineOption.OptionDefinition (booleanOption, stringOption)
import Data.Either (Either(..))
import Data.Maybe (Maybe(..))
import Prelude (discard)
import Test.Bouzuya.CommandLineOption.ObjectToRecord as ObjectToRecord
import Test.Bouzuya.CommandLineOption.OptionDefinition as OptionDefinition
import Test.Bouzuya.CommandLineOption.OptionObject as OptionObject
import Test.Bouzuya.CommandLineOption.OptionValue as OptionValue
import Test.Bouzuya.CommandLineOption.RecordToArray as RecordToArray
import Test.Unit (TestSuite, suite, test)
import Test.Unit.Assert as Assert

tests :: TestSuite
tests = suite "Bouzuya.CommandLineOption" do
  test "usage" do
    let
      defs =
        { s: stringOption "str" (Just 's') "<STRING>" "string option" "default"
        , b: booleanOption "bool" (Just 'b') "boolean option"
        }
      argv = ["--str", "a", "-b", "foo", "bar"]
    Assert.equal
      (Right { arguments: ["foo", "bar"], options: { s: "a", b: true } })
      (parse defs argv)

https://github.com/bouzuya/yzrh/blob/7243dc90ded7df3e9681ddbd5a4464afbcb9f84e/test/Bouzuya/CommandLineOption.purs#L1-L29

こんな感じ。値でコマンドラインオプションの定義 (Record a) を渡す。その型に対応する Either String { arguments :: Array String, options :: Record b } を返す。

パッケージへの抽出は yzrh 完了後かな……。内部実装をまだかなり直さないとごちゃごちゃしている。