Skip to content

Instantly share code, notes, and snippets.

@amachang
Last active August 8, 2023 14:46
Show Gist options
  • Save amachang/e4d23a18d918fa66d497f9b4f19fba9c to your computer and use it in GitHub Desktop.
Save amachang/e4d23a18d918fa66d497f9b4f19fba9c to your computer and use it in GitHub Desktop.
nushell_update_plan
# issue
https://github.com/nushell/nushell/issues/9939
# todo
## investigation
- type
- data type
- parameter type spec
- paramater type AST
- type casting
- type serialization to string
- points:
- data type と parameter type が一対一で決まっていて、キャスト可能か
- 上記が違う場合、明確な parameter type と casting のルールが決められるか
- 通常の custom command の parameter type は custom command の呼び出し時に、どのように使われているか
- もしパース時以外にも実行時など特別な役割があるなら、自分のコードがその挙動を壊さないようにテストを書く
- optional position parameters
- main に --arg_name と指定された場合に "--arg_name" という文字列を受け取れないようにしてはダメ
- なので script_file.nu --arg_name や script_file.nu --arg_name -- --arg_name として -- 以降の値は positional parameter として受け取られるようにうする必要がある。
- bash などでは "--" はどのように使われているのか調査する必要がある
- nu custom command では  "--" はどう扱われているか調べる必要がある
- nu が --arg_name a --arg_name b としたときどうなるんだっけ?
- もし list として扱われるなら type casting はどうなる?
- 全部 string として格納して、相手が望んでいる type cast をする。
- parameter type の定義がない場合は list of string とする
- --arg_name としたときに value がない場合ってどういう扱いになる?
- paramater type の定義が bool の場合だけ挙動が変わる?
- 変わるとしたら、 --arg_name a は相手が bool を指定した場合のみ a というパラメタが出てくることになる?
- 変わるとして、 --arg_name true のように true や false の文字列が特別扱いされることはある?
- あるとしたら true という文字列を受け取りたい場合に困る。 --arg_name $a とあったときに $a に特定のパターンがあった場合に引数の数が変わるそれは避けたい。なので、そのような仕様になっている場合は true は無視されるようにする。ドキュメントに明記する
- testing
- script file とパラメタ、結果のテストを行う場所があるか
- なければ作る
- documentation
- contributing ドキュメントを見る
# 雑
- 新しいプロセスから見るとすべて文字列、 nushell から渡されたものも、別の起動方法で渡されたものも判別不可能。
- その上で以下のことをしたい
- nushell から渡されたパラメータはできるかぎりその値や型を保持したい
- 型情報を裏口的に渡すことはできる?
- 複雑になるから別の手段?
- それとも all deserialize オプションを用意する?
- いやいや script name が nu という名前だったら、何か特別扱いするのは悪手だな
- `($a | into string)` してパラメータを渡す。 `($a | into [type])` すれば値は復元できる?
- nushell 以外から渡されたパラメータは、文字列としてはすべてのパターンの文字列を例外なく扱えるようにしたい
- こちらの要請については escape をちゃんとやればできそう
- Spanned<String> とかってなに
- span と pair になった値、これまでに読み込んだすべてのソースコードの中で一意の位置を指していて、エラーの時とかに役立つ
- miette という分析可能なエラー表示のためのライブラリで SourcSpan という struct が使われていて、それに変換されて使われているっぽい
- main の type hint を取るにはどうしたらいい?以下のような感じ?
- let decl_id = working_set.find_decl();
- let command = working_set.get_decl(decl_id);
- let signature = command.signature();
- signature から syntax_shape を以下のように取得できる
- signature: Signature
- PositionalArg
- shape: SyntaxShape
- Flag
- arg: Option<SyntaxShape>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment