File.fnmatchで実際の挙動と異なる表記を削除
File::FNM_PATHNAMEは1.8.0から導入されたので**は使用できるはずです。
File::FNM_EXTGLOBは2.0.0から導入なので残します。
Pathname#fnmatchおよびPathname#fnmatch?のワイルドカードの記述は厳密にはバージョン分岐するべきですが、File.fnmatchおよび``File#fnmatch?`と二重管理になるので削除し、くわしくは参照を見ていただくのが良いと思います。
"[[m:Dir.glob]] とは違って `**/' は使用できません。"は17年前のcommitから入っている文言が今まで引き継がれていたようです。 https://github.com/rurema/doctree/commit/f6eb65532aa7ccd63b203ce4f3e2410fc2768104
**/ 対応は ruby 1.8.5 からのようです。
$ nerdctl run --rm -it ghcr.io/ruby/all-ruby env LANG=C.UTF-8 ALL_RUBY_SINCE=ruby-1.6 ./all-ruby -e 'p File.fnmatch("/*/*.rb", "/foo/bar/baz.rb"), File.fnmatch("/**/*.rb", "/foo/bar/baz.rb"), File.fnmatch("/*/*.rb", "/foo/bar/baz.rb", File::FNM_PATHNAME), File.fnmatch("/**/*.rb", "/foo/bar/baz.rb", File::FNM_PATHNAME)'
ruby-1.6.0 -e:1: undefined method `fnmatch' for File:Class (NameError)
exit 1
...
ruby-1.6.8 -e:1: undefined method `fnmatch' for File:Class (NameError)
exit 1
ruby-1.8.0 true
true
false
false
...
ruby-1.8.5-p231 true
true
false
false
ruby-1.8.6-preview1 true
true
false
true
...
ruby-3.3.0-preview1 true
true
false
true
doc/ChangeLog/ChangeLog-1.9.3 に
* dir.c (fnmatch): directory recursion '**/' can be used with
File::FNM_PATHNAME. [ruby-dev:22901]
とあって、http://blade.ruby-lang.org/ruby-dev/22901 には
うーん、「fnmatchはパターンマッチャ」であるという観点からは
逆に「**/があるのでFNM_PATHNAMEは要らない」というのは受け入
れがたいです。「FNM_PATHNAMEが指定されていない時には**は*と
同じ意味」ならOK。
とあるので、詳しく説明するなら、 FNM_PATHNAME が指定されたときは glob と同じ意味になって、 FNM_PATHNAME が指定されていないときは * が / にもマッチするので、 **/ は */ と同じ意味になる (のでわざわざ **/ と書く必要性はない) ということになりそうです。
いっそfnmatchの"ワイルドカードとして〜"の部分を削除して、オプション定数に説明を委ねるのはいかがでしょう?
いっそfnmatchの"ワイルドカードとして〜"の部分を削除して、オプション定数に説明を委ねるのはいかがでしょう?
完全に削除してしまうと大まかに知りたいだけの時に不便になりそうなので、 else の方からも [[m:Dir.glob]] とは違って`{}' は使用できません。 を削ってオプション定数に詳細な説明を追加するぐらいが良さそうかなと思いました。