JavaScripting
runコマンドのバグ
https://github.com/workshopper/javascripting/issues/218
javascripting run hogohoge.js
を実行するとたしかに[object Object]
が表示されます。
javascriptingではrunコマンドは使っていません。
https://github.com/workshopper/workshopper-adventure/blob/master/index.js#L264 workshopper-adventure 経由です。 アンドキュメントなコマンド発見して実行して上手く動かないと言われるのは心外だが、不親切なのも確か。 こういうときはどうするのがいいのかなあ? コマンドをworkshopperに投げる前に検査してUsage表示するとか?
help
コマンドでrun
コマンドでの説明が出てくるのか・・・全然アンドキュメントじゃないな
~ bin/javascripting help # JAVASCRIPTING ## javascripting のワークショップに対して質問がありますか? エキスパートチームはあなたの質問を待っています。あなたもNode.jsのマスター になれるようにここに質問(New Issue)をしてみてください: https://github.com/nodeschool/discussions/issues どんな質問でもどうぞ! 一般的なNode.jsのヘルプが必要であればNode.jsの日本のGoogleグループがありま す: https://groups.google.com/forum/#!forum/nodejs_jp ## javascriptingのバグが見つかった場合または貢献したい場合: javascriptingのリポジトリはここにあります: https://github.com/sethvincent/javascripting.git バグの報告やPullリクエストは日本語でいつでもどうぞ! ## 使い方 javascripting ..................... ワークショップを選択する対話的メニューを表示します。 javascripting list ................ 登録されているすべてのワークショップの名称一覧を表示します。 javascripting select NAME ......... ワークショップを選択します。 javascripting current ............. 現在選択されているワークショップの名称を表示します。 javascripting print ............... 現在選択されているワークショップのガイドを表示します。 javascripting next ................ 現在選択されているワークショップの次の未修了のワークショップのガイドを表示 します。 javascripting reset ............... ワークショップの進捗状況をリセットします。 javascripting run program.js ...... あなたが作成したプログラムを実行します。 javascripting verify program.js ... あなたが作成したプログラムが正しいかを検証します。 javascripting -l <language> ....... システムで使用する言語を指定されたものに変更します。
ソースコードリーディング
javascripting
のソースコードからjavascripting
とworkshopper
の役割分担を読みときます。
https://github.com/workshopper/javascripting/blob/master/index.js で workshopper-adventure
のインスタンスを読み込んでいます。
サブコマンドによる分岐の全体的な制御フローは workshopper-adventure
が担当します。
https://github.com/workshopper/javascripting/blob/master/index.js#L8 で、 menu.json
に含まれる problem
の一覧を読む。
https://github.com/workshopper/javascripting/blob/master/index.js#L12-L14 でproblem
ごとに require('problems/introduction')
な処理をする関数を作る。
https://github.com/workshopper/javascripting/blob/master/problems/introduction/index.js は require("../../lib/problem")(__dirname)
なので
実質的に https://github.com/workshopper/javascripting/blob/master/lib/problem.js を実行している。
createProblem
関数で作った exercise
を引数にして https://github.com/workshopper/workshopper-adventure/blob/master/index.js#L345 が呼ばれます。
この辺は VSCode でデバッグしながら追いかけています。 https://code.visualstudio.com/docs/nodejs/nodejs-debugging
{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceFolder}/bin/javascripting", "args": ["verify", "index.js"] } ] }
修正案
https://github.com/workshopper/javascripting/blob/master/lib/problem.js ではrun
メソッドも呼んでいる。この辺をいじると、クリーンな修正ができるのだろうか?
デバッグするとたしかに run
メソッドは呼ばれています。ただし、出力文字列はこで作っているわけでは無さそうです。
https://github.com/workshopper/javascripting/blob/master/lib/problem.js#L53-L55
workshopper-adventure
が出力文字列は作っていそう、javascripting
側から上書きする方法があるのかな?
対処
単に run
メソッドの定義を消せばよいだけだった。こんなに簡単な話だったとはね、ふふ
~ bin/javascripting run index.js
run is not required for this exercise.