[前][次][番号順一覧][スレッド一覧]

ruby-changes:66277

From: Nobuyoshi <ko1@a...>
Date: Fri, 21 May 2021 09:01:20 +0900 (JST)
Subject: [ruby-changes:66277] a35d137a37 (master): [DOC] Moved `File.fnmatch?` to dir.rb

https://git.ruby-lang.org/ruby.git/commit/?id=a35d137a37

From a35d137a37a0c12cb5694e419284b9e0ab718467 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Thu, 20 May 2021 22:57:33 +0900
Subject: [DOC] Moved `File.fnmatch?` to dir.rb

So that no longer disturbed by C comment delimiters.
---
 dir.c  | 95 +---------------------------------------------------------------
 dir.rb | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 99 insertions(+), 94 deletions(-)

diff --git a/dir.c b/dir.c
index 812cb7c..8748391 100644
--- a/dir.c
+++ b/dir.c
@@ -3180,100 +3180,7 @@ fnmatch_brace(const char *pattern, VALUE val, void *enc) https://github.com/ruby/ruby/blob/trunk/dir.c#L3180
     return (fnmatch(pattern, enc, RSTRING_PTR(path), arg->flags) == 0);
 }
 
-/*
- *  call-seq:
- *     File.fnmatch( pattern, path, [flags] ) -> (true or false)
- *     File.fnmatch?( pattern, path, [flags] ) -> (true or false)
- *
- *  Returns true if +path+ matches against +pattern+.  The pattern is not a
- *  regular expression; instead it follows rules similar to shell filename
- *  globbing.  It may contain the following metacharacters:
- *
- *  <code>*</code>::
- *    Matches any file. Can be restricted by other values in the glob.
- *    Equivalent to <code>/ .* /x</code> in regexp.
- *
- *    <code>*</code>::    Matches all files regular files
- *    <code>c*</code>::   Matches all files beginning with <code>c</code>
- *    <code>*c</code>::   Matches all files ending with <code>c</code>
- *    <code>\*c*</code>:: Matches all files that have <code>c</code> in them
- *                        (including at the beginning or end).
- *
- *    To match hidden files (that start with a <code>.</code> set the
- *    File::FNM_DOTMATCH flag.
- *
- *  <code>**</code>::
- *    Matches directories recursively or files expansively.
- *
- *  <code>?</code>::
- *    Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
- *
- *  <code>[set]</code>::
- *    Matches any one character in +set+.  Behaves exactly like character sets
- *    in Regexp, including set negation (<code>[^a-z]</code>).
- *
- *  <code> \ </code>::
- *    Escapes the next metacharacter.
- *
- *  <code>{a,b}</code>::
- *    Matches pattern a and pattern b if File::FNM_EXTGLOB flag is enabled.
- *    Behaves like a Regexp union (<code>(?:a|b)</code>).
- *
- *  +flags+ is a bitwise OR of the <code>FNM_XXX</code> constants. The same
- *  glob pattern and flags are used by Dir::glob.
- *
- *  Examples:
- *
- *     File.fnmatch('cat',       'cat')        #=> true  # match entire string
- *     File.fnmatch('cat',       'category')   #=> false # only match partial string
- *
- *     File.fnmatch('c{at,ub}s', 'cats')                    #=> false # { } isn't supported by default
- *     File.fnmatch('c{at,ub}s', 'cats', File::FNM_EXTGLOB) #=> true  # { } is supported on FNM_EXTGLOB
- *
- *     File.fnmatch('c?t',     'cat')          #=> true  # '?' match only 1 character
- *     File.fnmatch('c??t',    'cat')          #=> false # ditto
- *     File.fnmatch('c*',      'cats')         #=> true  # '*' match 0 or more characters
- *     File.fnmatch('c*t',     'c/a/b/t')      #=> true  # ditto
- *     File.fnmatch('ca[a-z]', 'cat')          #=> true  # inclusive bracket expression
- *     File.fnmatch('ca[^t]',  'cat')          #=> false # exclusive bracket expression ('^' or '!')
- *
- *     File.fnmatch('cat', 'CAT')                     #=> false # case sensitive
- *     File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=> true  # case insensitive
- *     File.fnmatch('cat', 'CAT', File::FNM_SYSCASE)  #=> true or false # depends on the system default
- *
- *     File.fnmatch('?',   '/', File::FNM_PATHNAME)  #=> false # wildcard doesn't match '/' on FNM_PATHNAME
- *     File.fnmatch('*',   '/', File::FNM_PATHNAME)  #=> false # ditto
- *     File.fnmatch('[/]', '/', File::FNM_PATHNAME)  #=> false # ditto
- *
- *     File.fnmatch('\?',   '?')                       #=> true  # escaped wildcard becomes ordinary
- *     File.fnmatch('\a',   'a')                       #=> true  # escaped ordinary remains ordinary
- *     File.fnmatch('\a',   '\a', File::FNM_NOESCAPE)  #=> true  # FNM_NOESCAPE makes '\' ordinary
- *     File.fnmatch('[\?]', '?')                       #=> true  # can escape inside bracket expression
- *
- *     File.fnmatch('*',   '.profile')                      #=> false # wildcard doesn't match leading
- *     File.fnmatch('*',   '.profile', File::FNM_DOTMATCH)  #=> true  # period by default.
- *     File.fnmatch('.*',  '.profile')                      #=> true
- *
- *     rbfiles = '**' '/' '*.rb' # you don't have to do like this. just write in single string.
- *     File.fnmatch(rbfiles, 'main.rb')                    #=> false
- *     File.fnmatch(rbfiles, './main.rb')                  #=> false
- *     File.fnmatch(rbfiles, 'lib/song.rb')                #=> true
- *     File.fnmatch('**.rb', 'main.rb')                    #=> true
- *     File.fnmatch('**.rb', './main.rb')                  #=> false
- *     File.fnmatch('**.rb', 'lib/song.rb')                #=> true
- *     File.fnmatch('*',     'dave/.profile')              #=> true
- *
- *     pattern = '*' '/' '*'
- *     File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME)  #=> false
- *     File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true
- *
- *     pattern = '**' '/' 'foo'
- *     File.fnmatch(pattern, 'a/b/c/foo', File::FNM_PATHNAME)     #=> true
- *     File.fnmatch(pattern, '/a/b/c/foo', File::FNM_PATHNAME)    #=> true
- *     File.fnmatch(pattern, 'c:/a/b/c/foo', File::FNM_PATHNAME)  #=> true
- *     File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME)    #=> false
- *     File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true
- */
+/* :nodoc: */
 static VALUE
 file_s_fnmatch(int argc, VALUE *argv, VALUE obj)
 {
diff --git a/dir.rb b/dir.rb
index eb46305..ad52bec 100644
--- a/dir.rb
+++ b/dir.rb
@@ -134,3 +134,101 @@ class Dir https://github.com/ruby/ruby/blob/trunk/dir.rb#L134
     Primitive.dir_s_glob(pattern, flags, base, sort)
   end
 end
+
+class << File
+  # call-seq:
+  #    File.fnmatch( pattern, path, [flags] ) -> (true or false)
+  #    File.fnmatch?( pattern, path, [flags] ) -> (true or false)
+  #
+  # Returns true if +path+ matches against +pattern+.  The pattern is not a
+  # regular expression; instead it follows rules similar to shell filename
+  # globbing.  It may contain the following metacharacters:
+  #
+  # <code>*</code>::
+  #   Matches any file. Can be restricted by other values in the glob.
+  #   Equivalent to <code>/ .* /x</code> in regexp.
+  #
+  #   <code>*</code>::    Matches all files regular files
+  #   <code>c*</code>::   Matches all files beginning with <code>c</code>
+  #   <code>*c</code>::   Matches all files ending with <code>c</code>
+  #   <code>\*c*</code>:: Matches all files that have <code>c</code> in them
+  #                       (including at the beginning or end).
+  #
+  #   To match hidden files (that start with a <code>.</code> set the
+  #   File::FNM_DOTMATCH flag.
+  #
+  # <code>**</code>::
+  #   Matches directories recursively or files expansively.
+  #
+  # <code>?</code>::
+  #   Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
+  #
+  # <code>[set]</code>::
+  #   Matches any one character in +set+.  Behaves exactly like character sets
+  #   in Regexp, including set negation (<code>[^a-z]</code>).
+  #
+  # <code> \ </code>::
+  #   Escapes the next metacharacter.
+  #
+  # <code>{a,b}</code>::
+  #   Matches pattern a and pattern b if File::FNM_EXTGLOB flag is enabled.
+  #   Behaves like a Regexp union (<code>(?:a|b)</code>).
+  #
+  # +flags+ is a bitwise OR of the <code>FNM_XXX</code> constants. The same
+  # glob pattern and flags are used by Dir::glob.
+  #
+  # Examples:
+  #
+  #    File.fnmatch('cat',       'cat')        #=> true  # match entire string
+  #    File.fnmatch('cat',       'category')   #=> false # only match partial string
+  #
+  #    File.fnmatch('c{at,ub}s', 'cats')                    #=> false # { } isn't supported by default
+  #    File.fnmatch('c{at,ub}s', 'cats', File::FNM_EXTGLOB) #=> true  # { } is supported on FNM_EXTGLOB
+  #
+  #    File.fnmatch('c?t',     'cat')          #=> true  # '?' match only 1 character
+  #    File.fnmatch('c??t',    'cat')          #=> false # ditto
+  #    File.fnmatch('c*',      'cats')         #=> true  # '*' match 0 or more characters
+  #    File.fnmatch('c*t',     'c/a/b/t')      #=> true  # ditto
+  #    File.fnmatch('ca[a-z]', 'cat')          #=> true  # inclusive bracket expression
+  #    File.fnmatch('ca[^t]',  'cat')          #=> false # exclusive bracket expression ('^' or '!')
+  #
+  #    File.fnmatch('cat', 'CAT')                     #=> false # case sensitive
+  #    File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=> true  # case insensitive
+  #    File.fnmatch('cat', 'CAT', File::FNM_SYSCASE)  #=> true or false # depends on the system default
+  #
+  #    File.fnmatch('?',   '/', File::FNM_PATHNAME)  #=> false # wildcard doesn't match '/' on FNM_PATHNAME
+  #    File.fnmatch('*',   '/', File::FNM_PATHNAME)  #=> false # ditto
+  #    File.fnmatch('[/]', '/', File::FNM_PATHNAME)  #=> false # ditto
+  #
+  #    File.fnmatch('\?',   '?')                       #=> true  # escaped wildcard becomes ordinary
+  #    File.fnmatch('\a',   'a')                       #=> true  # escaped ordinary remains ordinary
+  #    File.fnmatch('\a',   '\a', File::FNM_NOESCAPE)  #=> true  # FNM_NOESCAPE makes '\' ordinary
+  #    File.fnmatch('[\?]', '?')                       #=> true  # can escape inside bracket expression
+  #
+  #    File.fnmatch('*',   '.profile')                      #=> false # wildcard doesn't match leading
+  #    File.fnmatch('*',   '.profile', File::FNM_DOTMATCH)  #=> true  # period by default.
+  #    File.fnmatch('.*',  '.profile')                  (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]