自分用メモ。なでしこに関する(公式以外の)ドキュメントって少なくて、ちょっと変わった使い方したい場合に、どうすればいいのか分からないのが難点だな、と思う今日この頃。
実現したいこと
なでしこ公式で紹介されているエディターはカラフルだし、とても使いやすい。しかし、完璧で究極という訳ではない。例えば、あるなでしこのコードを編集中に、そのコードの中で使用されている命令が一覧で表示され、押すだけで即座にその関数のリファレンスのページが開くと、とても便利であろう。
自作のエディターを製作する際に、そんな機能を実現したい場合、『任意のなでしこのコードが実行された時に呼び出されるであろう関数の一覧』を取得する必要がある。
方法
もっとも単純な考え方は、navigator.nako3.__varslist[0].keys()
でそのwnakoに読み込まれている命令一覧を取得できるので、ユーザーが編集中のコードにこれらの命令が含まれていないか検索することである。ただし、単純に検索すると、例えば《リスト》に空配列を代入
というコードについて、空
と空配列
と両方が引っかかってしまう。
そこで、なでしこに元々備わっている、構文解析の機能を(勝手に)利用させてもらう。以下のJavaScriptを実行することで、実際にコードを実行することなく、実行される可能性のある命令を取得できる。
const nadeshiko_code="5回繰り返す\n「{回数に5を足す}」と言う\nここまで";
const func_list=navigator.nako3.lex(nadeshiko_code).tokens.reduce((old,now)=>now.type=="func"?[...old,now.value]:old,[]);
おわりに
もっといい方法があれば、教えてください。
以上