Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

正規表現キーワードの一致判定が0文字マッチをマッチとみなさないように変更する #1030

Merged

Conversation

berryzplus
Copy link
Contributor

PR の目的

正規表現キーワードのパターン一致条件を追加することにより、
0文字マッチをマッチと認識することによる不具合を解消します。

改修に当たっては、コード理解のために「未使用プリプロセッサの除去」と「部分式をローカル変数に切り出して意味を予測しやすい名前を付ける」の対応を行っています。レビューでも必要な情報だと思うので、あえて変更を残したままPRします。

カテゴリ

  • 不具合修正
  • 仕様変更
  • リファクタリング

PR の背景

改修根拠については #1020 (comment) を見てください。

そもそも、仕様的に、正規表現キーワードって0文字マッチさせたらダメじゃね? がこのPRの趣旨です。iniの読込みや設定画面にチェックを入れる話にするとややこしくなるので、設定に関しては従来通りとし、マッチ検出時に「マッチ幅が0文字だったらそのマッチを無視する」という変更を入れます。

PR のメリット

PR のデメリット (トレードオフとかあれば)

  • メインの修正内容よりも、前提作業で行ったリファクタリングのほうが修正量が多いです。
  • 他にはとくにありません。

PR の影響範囲

  • アプリ(=サクラエディタ)の機能に影響があります。
  • 正規表現キーワードを使って0文字マッチになりうるパターンを指定したときの描画処理に影響します。
    • 従来:0文字マッチは色替えが行われて空振り
    • 今後:0文字マッチはマッチ扱いにならない
  • 正規表現キーワードで色指定に「URL」を設定し、0文字マッチになりうるパターンを指定したときの挙動に影響します。
    • 従来:0文字マッチで無限ループ発生
    • 今後:0文字マッチはマッチ扱いにならないので無限ループも発生しない

関連チケット

#1027
#1028

参考資料

@AppVeyorBot
Copy link

Copy link
Contributor

@beru beru left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRegexKeyword::RegexKeyCompile でコンパイルする際に 0 文字マッチと判別出来るなら、RK_NOMATCHREGEX_INFO::nFlag に指定するというのはどうでしょうか?

Copy link
Contributor

@beru beru left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

リファクタするなとはいいませんが不具合修正のPRで行わなくても良いんじゃないかな…と思いました。

@berryzplus
Copy link
Contributor Author

CRegexKeyword::RegexKeyCompile でコンパイルする際に 0 文字マッチと判別出来るなら、RK_NOMATCH を REGEX_INFO::nFlag に指定するというのはどうでしょうか?

コンパイルする段階では何文字マッチになるか分からないと思ってます。


m/(http)?s?(://)?\w*/i

リファクタするなとはいいませんが不具合修正のPRで行わなくても良いんじゃないかな…と思いました。

どこ直したらいいか、リファクタしてみて始めて分かった感じです。
これはみんなもきっと辛いだろうと思って、あえて一緒に出してみました(確信犯

Copy link
Contributor

@beru beru left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

動作確認した感じ問題無いと思います。

@berryzplus
Copy link
Contributor Author

レビューありがとうございます。
何か問題が見つかったら別で対応します。

@berryzplus berryzplus merged commit 4014723 into sakura-editor:master Sep 1, 2019
@berryzplus berryzplus deleted the feature/ignore_zero_width_match branch September 1, 2019 16:46
@berryzplus
Copy link
Contributor Author

変更内容に問題はないと考えていますが、懸念が一つ。

正規表現キーワードの0文字マッチ時の挙動を応用したウラ技がある、という自慢げなカキコミをいつかどこかでみかけたような気がしています。ざっと探してみた限り発見できなかったのでマージしてしまいましたが、もしかしたら「動作を変えられたら困る!」って人がいるかも知れません。

まぁ、そん時はそん時でちゃんと解決策を考えることにします。

@beru beru added the 🐛bug🦋 ■バグ修正(Something isn't working) label Sep 2, 2019
@m-tmatma m-tmatma added this to the v2.4.0 milestone Dec 29, 2019
HoppingTappy pushed a commit to HoppingTappy/sakura that referenced this pull request Jun 16, 2020
…zero_width_match

正規表現キーワードの一致判定が0文字マッチをマッチとみなさないように変更する
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛bug🦋 ■バグ修正(Something isn't working)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants