src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/glob_test.elvts (about)

     1  ////////////
     2  # globbing #
     3  ////////////
     4  
     5  //each:in-temp-dir
     6  
     7  ## simple patterns ##
     8  ~> use os
     9     put z z2 | each $os:mkdir~
    10     put bar foo ipsum lorem | each {|x| echo > $x}
    11  ~> put *
    12  ▶ bar
    13  ▶ foo
    14  ▶ ipsum
    15  ▶ lorem
    16  ▶ z
    17  ▶ z2
    18  ~> put z*
    19  ▶ z
    20  ▶ z2
    21  ~> put ?
    22  ▶ z
    23  ~> put ????m
    24  ▶ ipsum
    25  ▶ lorem
    26  
    27  ## glob applies after brace ##
    28  ~> put xy.u xy.v xy.w xz.w | each {|x| echo > $x}
    29  ~> put x*.{u v w}
    30  ▶ xy.u
    31  ▶ xy.v
    32  ▶ xy.w
    33  ▶ xz.w
    34  
    35  ## recursive patterns ##
    36  ~> use os
    37     put 1 1/2 1/2/3 | each $os:mkdir~
    38     put a.go 1/a.go 1/2/3/a.go | each {|x| echo > $x}
    39  ~> put **
    40  ▶ 1/2/3/a.go
    41  ▶ 1/2/3
    42  ▶ 1/2
    43  ▶ 1/a.go
    44  ▶ 1
    45  ▶ a.go
    46  ~> put **.go
    47  ▶ 1/2/3/a.go
    48  ▶ 1/a.go
    49  ▶ a.go
    50  ~> put 1**.go
    51  ▶ 1/2/3/a.go
    52  ▶ 1/a.go
    53  
    54  ## no match ##
    55  ~> put a/b/nonexistent*
    56  Exception: wildcard has no match
    57    [tty]:1:5-20: put a/b/nonexistent*
    58  ~> put a/b/nonexistent*[nomatch-ok]
    59  
    60  ## hidden files ##
    61  ~> use os
    62     put d .d | each $os:mkdir~
    63     put a .a d/a d/.a .d/a .d/.a | each {|x| echo > $x}
    64  ~> put *
    65  ▶ a
    66  ▶ d
    67  ~> put *[match-hidden]
    68  ▶ .a
    69  ▶ .d
    70  ▶ a
    71  ▶ d
    72  ~> put *[match-hidden]/*
    73  ▶ .d/a
    74  ▶ d/a
    75  ~> put */*[match-hidden]
    76  ▶ d/.a
    77  ▶ d/a
    78  ~> put *[match-hidden]/*[match-hidden]
    79  ▶ .d/.a
    80  ▶ .d/a
    81  ▶ d/.a
    82  ▶ d/a
    83  
    84  ## rune matchers ##
    85  ~> put a1 a2 b1 c1 ipsum lorem | each {|x| echo > $x}
    86  ~> put *[letter]
    87  ▶ ipsum
    88  ▶ lorem
    89  ~> put ?[set:ab]*
    90  ▶ a1
    91  ▶ a2
    92  ▶ b1
    93  ~> put ?[range:a-c]*
    94  ▶ a1
    95  ▶ a2
    96  ▶ b1
    97  ▶ c1
    98  ~> put ?[range:a~c]*
    99  ▶ a1
   100  ▶ a2
   101  ▶ b1
   102  ~> put *[range:a-z]
   103  ▶ ipsum
   104  ▶ lorem
   105  ~> put *[range:a-zz]
   106  Exception: bad range modifier: a-zz
   107    [tty]:1:5-17: put *[range:a-zz]
   108  ~> put *[range:foo]
   109  Exception: bad range modifier: foo
   110    [tty]:1:5-16: put *[range:foo]
   111  
   112  ## but ##
   113  ~> put bar foo ipsum lorem | each {|x| echo > $x}
   114  ~> put *[but:ipsum]
   115  ▶ bar
   116  ▶ foo
   117  ▶ lorem
   118  // Nonexistent files can also be excluded
   119  ~> put *[but:foobar][but:ipsum]
   120  ▶ bar
   121  ▶ foo
   122  ▶ lorem
   123  
   124  ## type ##
   125  ~> use os
   126     put d1 d2 .d b b/c | each $os:mkdir~
   127     put bar foo ipsum lorem d1/f1 d2/fm | each {|x| echo > $x}
   128  ~> put **[type:dir]
   129  ▶ b/c
   130  ▶ b
   131  ▶ d1
   132  ▶ d2
   133  ~> put **[type:regular]m
   134  ▶ d2/fm
   135  ▶ ipsum
   136  ▶ lorem
   137  ~> put **[type:regular]f*
   138  ▶ d1/f1
   139  ▶ d2/fm
   140  ▶ foo
   141  ~> put **f*[type:regular]
   142  ▶ d1/f1
   143  ▶ d2/fm
   144  ▶ foo
   145  ~> put *[type:dir][type:regular]
   146  Exception: only one type modifier allowed
   147    [tty]:1:5-29: put *[type:dir][type:regular]
   148  ~> put **[type:dir]f*[type:regular]
   149  Exception: only one type modifier allowed
   150    [tty]:1:5-32: put **[type:dir]f*[type:regular]
   151  ~> put **[type:unknown]
   152  Exception: unknown type modifier
   153    [tty]:1:5-20: put **[type:unknown]
   154  
   155  ## bad operations ##
   156  ~> put *[[]]
   157  Exception: modifier must be string
   158    [tty]:1:5-9: put *[[]]
   159  ~> put *[bad-mod]
   160  Exception: unknown modifier bad-mod
   161    [tty]:1:5-14: put *[bad-mod]
   162  ~> put *{ }
   163  Exception: cannot concatenate glob-pattern and fn
   164    [tty]:1:5-8: put *{ }
   165  ~> put { }*
   166  Exception: cannot concatenate fn and glob-pattern
   167    [tty]:1:5-8: put { }*