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

More RDoc for Dir.glob #8088

Merged
merged 7 commits into from
Jul 20, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
92 changes: 77 additions & 15 deletions dir.rb
Original file line number Diff line number Diff line change
Expand Up @@ -224,13 +224,20 @@ def self.[](*args, base: nil, sort: true)
end

# call-seq:
# Dir.glob(*patterns, _flags = 0, flags: _flags, base: nil, sort: true) -> array
# Dir.glob(*patterns, _flags = 0, flags: _flags, base: nil, sort: true) {|entry_name| ... } -> nil
# Dir.glob(*patterns, flags: 0, base: nil, sort: true) -> array
# Dir.glob(*patterns, flags: 0, base: nil, sort: true) {|entry_name| ... } -> nil
#
# Forms an array _entry_names_ of the entry names selected by the arguments.
#
# Argument +patterns+ is a pattern string or an array of pattern strings;
# note that these are not regexps.
# Argument +patterns+ is a string pattern or an array of string patterns;
# note that these are not regexps; see below.
#
# Notes for the following examples:
#
# - <tt>'*'</tt> is the pattern that matches any entry name
# except those that begin with <tt>'.'</tt>.
# - We use method Array#take to shorten returned arrays
# that otherwise would be very large.
#
# With no block, returns array _entry_names_;
# example (using the {simple file tree}[rdoc-ref:Dir@About+the+Examples]):
Expand All @@ -248,10 +255,30 @@ def self.[](*args, base: nil, sort: true)
# lib
# main.rb
#
# If optional keyword argument +flags+ is given,
# the value modifies the matching; see below.
#
# If optional keyword argument +base+ is given,
# its value specifies the base directory.
# Each pattern string specifies entries relative to the base directory;
# the default is <tt>'.'</tt>.
# The base directory is not prepended to the entry names in the result:
#
# Dir.glob(pattern, base: 'lib').take(5)
# # => ["abbrev.gemspec", "abbrev.rb", "base64.gemspec", "base64.rb", "benchmark.gemspec"]
# Dir.glob(pattern, base: 'lib/irb').take(5)
# # => ["cmd", "color.rb", "color_printer.rb", "completion.rb", "context.rb"]
#
# If optional keyword +sort+ is given, its value specifies whether
# the array is to be sorted; the default is +true+.
# Passing value +false+ with that keyword disables sorting
# (though the underlying file system may already have sorted the array).
#
# <b>Patterns</b>
#
# Each pattern string is expanded
# according to certain metacharacters;
# examples below use the
# {Ruby project file tree}[https://github.com/ruby/ruby]:
# examples below use the {Ruby file tree}[rdoc-ref:Dir@About+the+Examples]:
#
# - <tt>'*'</tt>: Matches any substring in an entry name,
# similar in meaning to regexp <tt>/.*/mx</tt>;
Expand Down Expand Up @@ -313,15 +340,6 @@ def self.[](*args, base: nil, sort: true)
# in a string pattern:
# <tt>Dir['c:\\foo*']</tt> will not work, use <tt>Dir['c:/foo*']</tt> instead.
#
# If optional keyword argument +base+ is given,
# each pattern string specifies entries relative to the specified directory;
# the default is <tt>'.'</tt>.
# The base directory is not prepended to the entry names in the result.
#
# If optional keyword +sort+ is given, its value specifies whether
# the array is to be sorted;
# the default is +true+.
#
# More examples (using the {simple file tree}[rdoc-ref:Dir@About+the+Examples]):
#
# # We're in the example directory.
Expand All @@ -345,6 +363,50 @@ def self.[](*args, base: nil, sort: true)
#
# Dir.glob('**/lib/*.rb') # => ["lib/song.rb"]
#
# <b>Flags</b>
#
# If optional keyword argument +flags+ is given (the default is zero -- no flags),
# its value should be the bitwise OR of one or more of the constants
# defined in module File::Constants.
#
# Example:
#
# flags = File::FNM_EXTGLOB | File::FNM_DOTMATCH
#
# Specifying flags can extend, restrict, or otherwise modify the matching.
#
# The flags for this method (other constants in File::Constants do not apply):
#
# - File::FNM_DOTMATCH:
# specifies that entry names beginning with <tt>'.'</tt>
# should be considered for matching:
#
# Dir.glob('*').take(5)
# # => ["BSDL", "CONTRIBUTING.md", "COPYING", "COPYING.ja", "GPL"]
# Dir.glob('*', flags: File::FNM_DOTMATCH).take(5)
# # => [".", ".appveyor.yml", ".cirrus.yml", ".dir-locals.el", ".document"]
#
# - File::FNM_EXTGLOB:
# enables the pattern extension
# <tt>'{_a_,_b_}'</tt>, which matches pattern _a_ and pattern _b_;
# behaves like a
# {regexp union}[https://docs.ruby-lang.org/en/master/Regexp.html#method-c-union]
# (e.g., <tt>'(?:_a_|_b_)'</tt>):
#
# pattern = '{LEGAL,BSDL}'
# Dir.glob(pattern) # => ["LEGAL", "BSDL"]
#
# - File::FNM_NOESCAPE:
# specifies that escaping with the backslash character <tt>'\'</tt>
# is disabled; the character is not an escape character.
#
# - File::FNM_PATHNAME:
# specifies that metacharacters <tt>'*'</tt> and <tt>'?'</tt>
# do not match directory separators.
#
# - File::FNM_SHORTNAME:
# specifies that patterns may match short names if they exist; Windows only.
#
def self.glob(pattern, _flags = 0, flags: _flags, base: nil, sort: true)
Primitive.dir_s_glob(pattern, flags, base, sort)
end
Expand Down