aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

Variableに型とattributeの情報を付与

Open FineArchs opened this issue 1 year ago • 12 comments

  • type.tsを整理
  • 使用されていなかった型の情報をVariableに付与
  • Valueに付いていたattributeの情報をVariableに付け替え

FineArchs avatar Sep 21 '23 10:09 FineArchs

Codecov Report

Patch coverage: 63.01% and project coverage change: +0.26% :tada:

Comparison is base (d4071dd) 88.47% compared to head (bb4ae63) 88.73%. Report is 2 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #370      +/-   ##
==========================================
+ Coverage   88.47%   88.73%   +0.26%     
==========================================
  Files          21       21              
  Lines        3452     3461       +9     
  Branches      572      573       +1     
==========================================
+ Hits         3054     3071      +17     
+ Misses        386      378       -8     
  Partials       12       12              
Files Changed Coverage Δ
src/type.ts 56.05% <47.91%> (+4.47%) :arrow_up:
src/interpreter/index.ts 93.39% <87.50%> (+0.21%) :arrow_up:
src/interpreter/variable.ts 86.48% <92.85%> (+1.87%) :arrow_up:
src/index.ts 100.00% <100.00%> (ø)
src/interpreter/value.ts 100.00% <100.00%> (ø)

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov[bot] avatar Sep 21 '23 10:09 codecov[bot]

isCompatibleType()がちょっと変更しづらそうです 短くはなっていますが...

marihachi avatar Sep 21 '23 14:09 marihachi

今の&&を繋げる形式だと、例えば後で例外を投げる処理を入れたくなった時とかに拡張しづらいみたいな感じですか?

FineArchs avatar Sep 21 '23 20:09 FineArchs

そのあたりはより複雑な処理に変わる可能性が高いので、文を入れ込めるようにしたほうが良さそうです

marihachi avatar Sep 21 '23 22:09 marihachi

修正しました。問題ないでしょうか?

FineArchs avatar Sep 21 '23 23:09 FineArchs

そういえばなんですが、isCompatibleType()は元々どのような目的で作られたものなんでしょうか? 「型bの値は型aに代入可能である」ことをチェックするものなら、 https://github.com/syuilo/aiscript/blob/242731801efc3d9129accc20dfeb1fd5614a62d3/src/type.ts#L56 ここは修正する必要があります。

FineArchs avatar Sep 21 '23 23:09 FineArchs

元々はインタプリタの実行時エラーだけあって、Type系は静的に型チェックも任意でできるようにしようっていう試みで追加しました。 現状は明示的に型を付けた場合だけ、型チェックが走ったはずです。それ以外の場合はデフォルトでany型として処理されます。

marihachi avatar Sep 22 '23 03:09 marihachi

型は全部付ける、推論もできるようにする、っていう方向で変えていくのであればanyを除去することもできるかもしれません。大変かも...

marihachi avatar Sep 22 '23 03:09 marihachi

anyを除去するつもりはないですが、型推論に使用するのであれば let a:any = <num型>は許容すべきですが、 let a:num= <any型>は禁止すべきであるため、 isCompatible()がそのチェックの関数であれば修正すべきです。 ですが、そうでないなら本来の用途を知りたいです。

FineArchs avatar Sep 22 '23 13:09 FineArchs

代入ができるかどうかの判定、比較の判定で使うつもりで書きました これまだどこからも使ってないですね...

marihachi avatar Sep 22 '23 23:09 marihachi

型チェックは機能していないので、ある程度しっかりしたものにするには仕様検討から進めることになると思います。

marihachi avatar Sep 23 '23 01:09 marihachi

代入可能判定で使えるように https://github.com/syuilo/aiscript/blob/242731801efc3d9129accc20dfeb1fd5614a62d3/src/type.ts#L56 は https://github.com/syuilo/aiscript/blob/bb4ae63c7d34e87a6da300ca12904fe1dd2b0ea8/src/type.ts#L60-L61 に修正しました。

FineArchs avatar Sep 23 '23 02:09 FineArchs