Last active
August 8, 2023 14:46
-
-
Save amachang/e4d23a18d918fa66d497f9b4f19fba9c to your computer and use it in GitHub Desktop.
nushell_update_plan
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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