Skip to content

Instantly share code, notes, and snippets.

@Tatakinov
Created December 7, 2021 13:34
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Tatakinov/61ab733b3f09d5106fbe7fda95bad944 to your computer and use it in GitHub Desktop.
Save Tatakinov/61ab733b3f09d5106fbe7fda95bad944 to your computer and use it in GitHub Desktop.
伺かAdventCalendar2021

里々のlintを作りたかった

伺かAdventCalendar2021の8日の記事です。

結論

作ってみたは良いものの、さとりすと使ってたら出番無いな!

lintとはなんぞや

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	ファイル名	トーク名	トーク名からの行数

それぞれ

ファイルが見つからない
何行何列目の直前で構文エラーが発生している
何行何列目の直前に"("に対応する")"が存在しない
未定義の変数が使用された
未使用の変数がある

となります。

Satorintとの付き合い方

手元にある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行目

まともに検出できてないのがよく分かりますね 実力が分かっていただけたかと思います。

こんな感じなので毎回使ってエラーが出ないように辞書を書き換えるのではなく、 うまく動かないときに使ってみて怪しいところがないか確認する感じで使うのがいいかと思います。

終わりに

このプログラム群は自己責任で使ってください

上で述べているとおりまだまだバグだらけなので 「このプログラムでエラーになってる部分を直したら動かなくなったじゃないか!」などと文句を言われても当方は責任を負いません。

また、万が一アンチウイルスソフトに引っかかったら除外設定にするか使うのを諦めましょう。

使ってみようかな…?と思われる方は こちらからダウンロードをお願いします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment