0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自分用メモ。なでしこに関する(公式以外の)ドキュメントって少なくて、ちょっと変わった使い方したい場合に、どうすればいいのか分からないのが難点だな、と思う今日この頃。

実現したいこと

なでしこ公式で紹介されているエディターはカラフルだし、とても使いやすい。しかし、完璧で究極という訳ではない。例えば、あるなでしこのコードを編集中に、そのコードの中で使用されている命令が一覧で表示され、押すだけで即座にその関数のリファレンスのページが開くと、とても便利であろう。
自作のエディターを製作する際に、そんな機能を実現したい場合、『任意のなでしこのコードが実行された時に呼び出されるであろう関数の一覧』を取得する必要がある。

方法

もっとも単純な考え方は、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,[]);

おわりに

もっといい方法があれば、教えてください。

 

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?