伺かAdventCalendar2021の8日の記事です。
作ってみたは良いものの、さとりすと使ってたら出番無いな!
lintとは静的解析ツールとも呼ばれるもので、ソースコード(…伺か的には辞書)に対して解析を行い、 「この変数使われてないよ」とか「ifの条件式が間違っていてifの中身が絶対に実行されないよ」とか教えてくれる奴です。 すごく便利。
いわゆる世間一般のlintより劣化したやつです。 まだまだ製作中につきバグ多め。
里々(さとり)のlintなのでsatorint(さとりんと)と命名しました。
-
辞書に構文エラーがあると一応エラーを吐きます
…が、このエラーはプログラムのバグである場合がかなりあります。
-
「未定義の変数」と「未使用の変数」をある程度列挙できます。
なお構文エラーが出た辞書が1つでもあるとまともに動かない模様
- 辞書の構文エラーの簡易チェック
- うっかり変数名間違えたりしたときに検出出来そう
- 使ってない変数を見つけられそう
-
変数の定義に変数を使用していると検出できない
$(R0)さわりカウント【タブ】((R0)さわりカウント)+1
のように書かれるとうまく検出できません。
-
不要なものまで変数扱いされる
特に「(このまま眺めているのもいいか…)」のように ()を変数呼び出しとして使っていないものまで変数として扱ってしまいます。
satorint.exe C:\path\to\GhostName\ghost\master\satori_conf.txt C:\path\to\GhostName\ghost\master\dic_foo.txt C:\path\to\GhostName\ghost\master\dic_bar.txt ...
をcmd.exeから実行するのが基本的な使い方ですが、いちいちcmd.exeを起動してdic_*.txtを書き連ねるのもアレなのでbatファイルを用意しました。
satorint.bat C:\path\to\GhostName\ghost\master\
で同様の処理を行うように出来ます。 batファイルにmasterフォルダをD&Dするだけ!便利!
#dic01_Boot.txt
*初回起動
$好感度【タブ】0
*0Headなでられ
$好感度=(高感度)+1
:えへへ
*0Headつつかれ
$好感度=(好感度)−1
:いたっ!
このような辞書があったとします。 よく見るとミスがありますね? 「好感度」ではなく「高感度」になっているところがあります。 この辞書をsatorint.exeに放り込むと…
undefined variable: 高感度 at dic01_Boot.txt 0Headなでられ 2行目
のような出力結果が得られます。
上記の出力結果は
undefined variable:【タブ】高感度【タブ】at【タブ】dic01_Boot.txt【タブ】0Headなでられ【タブ】2行目
となっているので出力結果を入力としてなんやかんやするプログラムが作りやすいかもしれません。
エラーは次の5つ。追々増えていくかもしれません。
not found: ファイル名
syntax error: ファイル名 before line 何行目 col 何列目
")" expected: ファイル名 before line 何行目 col 何列目
undefined variable: 変数名 at ファイル名 トーク名 トーク名からの行数
unused variable: 変数名 at ファイル名 トーク名 トーク名からの行数
それぞれ
ファイルが見つからない
何行何列目の直前で構文エラーが発生している
何行何列目の直前に"("に対応する")"が存在しない
未定義の変数が使用された
未使用の変数がある
となります。
手元にあるRポストと狛犬に使うとこんな感じです。
undefined variable: ごにょごにょ at dic08_RandomTalk.txt ランダムトーク 6行目
undefined variable: 省略可 at dic06_String.txt コメント 4行目
undefined variable: 省略可 at dic06_String.txt コメント 5行目
undefined variable: fill_red at dic09_Test.txt あか 1行目
undefined variable: バナナの色 at dic09_Test.txt 変数名を変数で作る 3行目
undefined variable: FMO1name at dic09_Test.txt 誰か隣にいる 1行目
undefined variable: FMO1sakura.surface at dic09_Test.txt 誰か隣にいる 1行目
undefined variable: FMO1keroname at dic09_Test.txt 誰か隣にいる 1行目
undefined variable: FMO1kero.surface at dic09_Test.txt 誰か隣にいる 1行目
undefined variable: FMO0name at dic09_Test.txt 誰か隣にいる 1行目
undefined variable: FMO0keroname at dic09_Test.txt 誰か隣にいる 1行目
undefined variable: Event at dic09_Test.txt リクエスト情報、文字列比較 1行目
まともに検出できてないのがよく分かりますね
実力が分かっていただけたかと思います。
こんな感じなので毎回使ってエラーが出ないように辞書を書き換えるのではなく、 うまく動かないときに使ってみて怪しいところがないか確認する感じで使うのがいいかと思います。
このプログラム群は自己責任で使ってください。
上で述べているとおりまだまだバグだらけなので 「このプログラムでエラーになってる部分を直したら動かなくなったじゃないか!」などと文句を言われても当方は責任を負いません。
また、万が一アンチウイルスソフトに引っかかったら除外設定にするか使うのを諦めましょう。
使ってみようかな…?と思われる方は こちらからダウンロードをお願いします。