kujirahand / nadesiko3

Japanese Programming Language Nadesiko v3 (JavaScript/TypeScript)
https://nadesi.com/
MIT License
240 stars 19 forks source link

インデント構文の弱点 - バリデーションを強化する #1629

Open kujirahand opened 7 months ago

kujirahand commented 7 months ago

インデント構文を使ったとき、正しくないインデント、壊れたインデントがあった時のエラーが分かりづらいです。

そこで、「もし」や「の間」「関数」など、インデント可能な構文かどうかをバリデーションでチェックする機構を入れたいと思います。

検出が分かりにくい例

以下、エラーになります。

●readyState待ち(videoの):
    変数 max  = videoの要素数
    変数 cnt
    真の間:
        cnt = 0
        videoを反復:
            もし対象["readyState"]>=4ならば:
                cnt = cnt +1
        もしcntがmaxならば:
            抜ける
        0.01秒待つ
    戻る

[1,2,3,4,5]のreadyState待ち

3行目を変数 cnt=0 とすると問題なく実行可能となる。 ただし、対象が[1,2,3,4,5]を返すのだが、対象["readyState"]としていることから、undefinedになり、いつまでも、cntアップされないため、無限ループとなる例。 実際のところ、インデント構文ではなく、変数の問題なのだが、インデント構文のエラーが表示されるのが問題。

kujirahand commented 7 months ago

https://discord.com/channels/1211143706783129692/1211143707269791801 より