bcdice / BCDice

The most popular TRPG dice command engine in Japan
https://bcdice.org
BSD 3-Clause "New" or "Revised" License
138 stars 183 forks source link

command_patternがPreprocessorで数式展開する前のコマンドに利用できない #412

Open blhsrwznrghfzpr opened 3 years ago

blhsrwznrghfzpr commented 3 years ago

command_pattern

応答するコマンド全てにマッチする正規表現を返す 正規表現を一度生成したら、以後コマンドの登録はできないようにする https://yard.bcdice.org/BCDice/Base.html#command_pattern-class_method

command_patternはBCDiceで処理できるかもしれないコマンドかどうかを、 外部のツールから判定するために用意されている正規表現だと認識しています。

が、システム固有のコマンドの一部に対しては、Preprocessorによって処理された後のパターンしか登録されていません。 そのため、Preprocessorで処理(括弧数式展開)される前のコマンドがcommand_patternにマッチしないことがあります。 例としては下記のようなものなどです

register_prefix('IP\d+')
input = "IP(1+2)"

調査のために下記のような変更を入れてみたところ、現状では4システムが発見できます。 https://github.com/blhsrwznrghfzpr/BCDice/commit/d7fee31e1c9118e7fcbd6830997e81ad2ea98ffb テストケースに書かれていないものも含めるともっと多いかと思います。

command_patternPreprocessorで前処理する前のコマンドに対しても利用できるように強制するようなテストなどを用意できたりしないでしょうか?

ysakasin commented 3 years ago

ありがとうございます。 command_pattern の活用にはこの問題の解決が必須だと思うので、まずは何をゴールとするか考えてみます。