◆ 関数を REPL に入れた時に表示される宣言文をカスタマイズ
  ◆ 引数がわかるようにする
◆ どうせなら関数の説明を一行目にいれるとかしてもいいかも

関数の引数や中身どんな感じだったけと思った時に関数名をコンソールでタイプして toString で表示される情報をみることってありますよね

こんなの

console-fn-show

でも問題は 最初から JavaScript に用意されてる関数
同じように関数を表示してみると
> setTimeout
< function setTimeout() { [native code] }

中身が native code なのは仕方ないのですけど 引数がわかりません
使うときは引数が知りたいので 引数を表示してもらいたいです


IDE 使えば表示されるし なんて言うひともいますが みんなが IDE なんて重いものを普段から起動させてるとは限らないのですよ
私のように browser == IDE (=== でないところがポイントです) な人はコンソールにでできるサポート情報だけで済ませたいです

となれば 自分で表示させればいいのか と思ってこんなものを作りました



やっていることは単純に関数に toString プロパティを設定してます
関数も含めて全部のオブジェクトが toString を持っています
(関数の場合は Object.prototype じゃなくて Function.prototype のが使われてますけど)

そのおかげで関数も文字列化が可能です
どんな文字列にするかというところで関数の宣言を表示してくれているのがデフォルトの動きです
デフォルトだと引数情報がないので 引数も表示した関数の宣言を表示するようにしました


自動で引数情報をとれるといいのですけど さすがに変数名や省略可能がどうなっているかは無理だと思います
なので  自  力  で入力してます

この例だと Array, String, GeneratorFunction の 3 つだけにしています

使い方はコード最後の配列に オブジェクトを追加していきます
help に引数の () の中に入れる文字列を入れます
[] を使って省略を表したりするために全体を文字列にしています
配列にすると複数種類を受け付けられるということで複数表示するようになります

そして どの関数に設定するかを target か path で指定します
target だと value がそのまま関数が入ってる場合で path だと 設定する関数を返す関数か window からのパスです
{
path: "a.b[1].c['d']",
    help: "a [, b]"
}

なら window.a.b[1].c["d"] の関数に function name(a [, b]) { body } と言う風な表示を設定するということになります


あとは暇な時に このルールを使うだろう全部の関数に書いてロードするようにすれば 引数なんだっけ と困ることがなくなるはず……








ここまで作ってみたものの JavaScript の関数ってメソッドや DOM 関係も入れるとすごーく多いし class や => で宣言するとデフォルトの表示が変わるからパースが面倒だしと いきなりやる気がなくなってきました
とりあえず ネイティブな関数だけならデフォルトの表示は決まったパターンなはずなので自作やライブラリのものに 省略できる情報をつけようとかしなければこのままでいけるかな

最近は宣言時の引数で
var fn = (a, [b,{c:cc}, ...d], {e:ee,f=g=>g}, h, [[i]]) => {}
こんな無茶なものでも syntax 的には問題ないっていうのがねー