Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: pkg/glob/README.md

Issue 506993004: Create a glob package. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 `glob` is a file and directory globbing library that supports both checking
2 whether a path matches a glob and listing all entities that match a glob.
3
4 A "glob" is a pattern designed specifically to match files and directories. Most
5 shells support globs natively.
6
7 ## Usage
8
9 To construct a glob, just use `new Glob()`. As with `RegExp`s, it's a good idea
10 to keep around a glob if you'll be using it more than once so that it doesn't
11 have to be compiled over and over. You can check whether a path matches the glob
12 using `Glob.matches()`:
13
14 ```dart
15 import 'package:glob/glob.dart';
16
17 final dartFile = new Glob("**.dart");
18
19 // Print all command-line arguments that are Dart files.
20 void main(List<String> arguments) {
21 for (var argument in arguments) {
22 if (dartFile.matches(argument)) print(argument);
23 }
24 }
25 ```
26
27 You can also list all files that match a glob using `Glob.list()` or
28 `Glob.listSync()`:
29
30 ```dart
31 import 'package:glob/glob.dart';
32
33 final dartFile = new Glob("**.dart");
34
35 // Recursively list all Dart files in the current directory.
36 void main(List<String> arguments) {
37 for (var entity in dartFile.listSync()) {
38 print(entity.path);
39 }
40 }
41 ```
42
43 ## Syntax
44
45 The glob syntax hews closely to the widely-known Bash glob syntax, with a few
46 exceptions that will be outlined below.
Bob Nystrom 2014/08/27 00:42:04 "will be" -> "are".
nweiz 2014/08/27 01:36:32 Done.
47
48 In order to be as cross-platform and as close to the Bash syntax as possible,
49 all globs use POSIX path syntax, including using `/` as a directory separator
50 regardless of which platform they're on. This is true even for Windows roots;
51 for example, a glob matching all files in the C drive would be `C:/*`.
Bob Nystrom 2014/08/27 00:42:04 This means r"C:\foo.txt" will not match the file C
nweiz 2014/08/27 01:36:32 That's correct. r"C:\foo.txt" is already a well-fo
52
53 ### Match any characters in a filename: `*`
54
55 The `*` character matches any character other than `/`. This means that it can
Bob Nystrom 2014/08/27 00:42:04 "any" -> "zero or more of any"
nweiz 2014/08/27 01:36:32 Done.
56 be used to match all files in a given directory that match a pattern without
57 also matching files in a subdirectory. For example, `lib/*.dart` will match
58 `lib/glob.dart` but not `lib/src/utils.dart`.
59
60 ### Match any characters across directories: `**`
61
62 `**` is like `*`, but matches `/` as well. It's useful for matching files or
Bob Nystrom 2014/08/27 00:42:03 Does this mean "a**b" will match "azzzb", "a/zzb",
nweiz 2014/08/27 01:36:32 Yes. It's useful to use ** without surrounding sep
63 listing directories recursively. For example, `lib/**.dart` will match both
64 `lib/glob.dart` and `lib/src/utils.dart`.
65
66 If `**` appears at the beginning of a glob, it will not match absolute paths.
67 For example, `**.dart` won't match `/foo.dart`, although `/**.dart` will. This
68 is to ensure that listing a bunch of paths and checking whether they matches a
69 glob produces the same results as listing that glob.
Bob Nystrom 2014/08/27 00:42:04 I don't understand this. Can you explain why this
nweiz 2014/08/27 01:36:32 I explain in the text: it ensures that the list be
Bob Nystrom 2014/08/27 22:16:44 Right, but you don't say *why* the behavior betwee
nweiz 2014/09/02 19:48:15 Added some more clarification.
70
71 This is an extension to Bash glob syntax that's widely supported by other glob
72 implementations.
73
74 ### Match any single character: `?`
75
76 The `?` character matches a single character other than `/`. Unlike `*`, it
77 won't match any more or fewer than one character. For example, `test?.dart` will
78 match `test1.dart` but not `test10.dart` or `test.dart`.
79
80 ### Match a range of characters: `[...]`
81
82 The `[...]` construction matches one of several characters. It can contain
83 individual characters, such as `[abc]`, in which case it will match any of those
84 characters; it can contain ranges, such as `[a-zA-Z]`, in which case it will
85 match any characters that fall within the range; or it can contain a mix of
86 both. It will only ever match a single character. For example,
87 `test[a-zA-Z_].dart` will match `testx.dart`, `testA.dart`, and `test_.dart`,
88 but not `test-.dart`.
89
90 If it starts with `^` or `!`, the construction will instead match all characters
91 *not* mentioned. For example, `test[^a-z].dart` will match `test1.dart` but not
92 `testa.dart`.
93
94 This construction never matches `/`.
95
96 ### Match one of several possibilities: `{...,...}`
97
98 The `{...,...}` construction matches one of several options, each of which is a
99 glob itself. For example, `lib/{*.dart,src/*}` matches `lib/glob.dart` and
100 `lib/src/data.txt`. It can contain any number of options greater than one, and
101 can even contain nested options.
102
103 This is an extension to Bash glob syntax, although it is supported by other
104 layers of Bash and is often used in conjunction with globs.
105
106 ### Escaping a character: `\`
107
108 The `\` character can be used in any context to escape a character that would
109 otherwise be semantically meaningful. For example, `\*.dart` matches `*.dart`
110 but not `test.dart`.
111
112 ### Syntax errors
113
114 Because they're used as part of the shell, almost all strings are valid Bash
115 globs. This implementation is more picky, and performs some validation to ensure
116 that globs are meaningful. For instance, unclosed `{` and `[` are disallowed.
117
118 ### Reserved syntax: `(...)`
119
120 Parentheses are reserved in case this package adds support for Bash extended
121 globbing in the future. For the time being, using them will throw an error
122 unless they're escaped.
OLDNEW
« no previous file with comments | « pkg/glob/LICENSE ('k') | pkg/glob/lib/glob.dart » ('j') | pkg/glob/lib/glob.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698