cuelang.org/go@v0.13.0/cue/testdata/references/labels.txtar (about)

     1  -- in.cue --
     2  // Label aliases
     3  
     4  // direct
     5  a: [X=string]: X
     6  a: bar:        _
     7  
     8  // in struct
     9  b: [X=string]: {X}
    10  b: bar: _
    11  
    12  // in structs
    13  c: [X=string]: X
    14  c: [Y=string]: {{{Y}}}
    15  c: bar: _
    16  
    17  // in sub field
    18  d: [X=string]: name: X
    19  d: bar: {}
    20  
    21  // nested
    22  e: [X=string]: [Y=string]: X + Y
    23  e: foo: bar:               _
    24  
    25  patternField: t1: {
    26  	r=[string]: {b: r | null}
    27  	a: {r: 0}
    28  }
    29  
    30  patternField: t2: {
    31  	a: {r: 0}
    32  	x=[string]: {z: 1, b: x.z}
    33  }
    34  
    35  // Field aliases
    36  
    37  bar: 3
    38  f1: C="foo\(bar)": {
    39  	name: "xx"
    40  	foo:  C.name
    41  }
    42  
    43  // nested
    44  f1: D="foo\(bar)": E="foo\(bar)baz": {
    45  	name: "xx"
    46  	a:    D["foo\(bar)baz"].name
    47  	b:    E.name
    48  }
    49  
    50  // Combo
    51  
    52  c1: C="foo\(bar)": [D=string]: {
    53  	name: D
    54  	foo:  C.x.name
    55  }
    56  c1: foo3: x: _
    57  
    58  emptyLabel: {
    59  	"": 1
    60  	a:  emptyLabel[""]
    61  }
    62  
    63  underscore: a: {
    64  	// Issue #1454
    65  	foo: #Foo
    66  	foo: "_":     "bar"
    67  	#Foo: [=~""]: string
    68  }
    69  
    70  underscore: c: {
    71  	foo: "_":    "any"
    72  	foo: [=~""]: string
    73  }
    74  
    75  underscore: d: {
    76  	bar: "_":       "any"
    77  	#bar: [string]: string
    78  	bar: #bar
    79  }
    80  
    81  underscore: e: {
    82  	baz: "_h":     "any"
    83  	#baz: [=~"_"]: string
    84  	baz: #baz
    85  }
    86  
    87  // TODO: support. Also not yet supported in old implementation.
    88  // c10: {
    89  //  C=[string]: {
    90  //   name: "x"
    91  //   foo: C.name
    92  //  }
    93  // }
    94  // c2: c1 & { x: _ }
    95  
    96  invalidPattern: {
    97  	[=~"BAD)" & =~"x"]: string
    98  	y: 123
    99  }
   100  -- out/eval/stats --
   101  Leaks:  1
   102  Freed:  61
   103  Reused: 56
   104  Allocs: 6
   105  Retain: 4
   106  
   107  Unifications: 60
   108  Conjuncts:    109
   109  Disjuncts:    65
   110  -- out/evalalpha --
   111  Errors:
   112  invalidPattern: invalid regexp: error parsing regexp: unexpected ): `BAD)`:
   113      ./in.cue:96:22
   114  
   115  Result:
   116  (_|_){
   117    // [eval]
   118    a: (struct){
   119      bar: (string){ "bar" }
   120    }
   121    b: (struct){
   122      bar: (string){ "bar" }
   123    }
   124    c: (struct){
   125      bar: (string){ "bar" }
   126    }
   127    d: (struct){
   128      bar: (struct){
   129        name: (string){ "bar" }
   130      }
   131    }
   132    e: (struct){
   133      foo: (struct){
   134        bar: (string){ "foobar" }
   135      }
   136    }
   137    patternField: (struct){
   138      t1: (struct){
   139        a: (struct){
   140          r: (int){ 0 }
   141          b: (null){ null }
   142        }
   143      }
   144      t2: (struct){
   145        a: (struct){
   146          r: (int){ 0 }
   147          z: (int){ 1 }
   148          b: (int){ 1 }
   149        }
   150      }
   151    }
   152    bar: (int){ 3 }
   153    f1: (struct){
   154      foo3: (struct){
   155        name: (string){ "xx" }
   156        foo: (string){ "xx" }
   157        foo3baz: (struct){
   158          name: (string){ "xx" }
   159          a: (string){ "xx" }
   160          b: (string){ "xx" }
   161        }
   162      }
   163    }
   164    c1: (struct){
   165      foo3: (struct){
   166        x: (struct){
   167          name: (string){ "x" }
   168          foo: (string){ "x" }
   169        }
   170      }
   171    }
   172    emptyLabel: (struct){
   173      "": (int){ 1 }
   174      a: (int){ 1 }
   175    }
   176    underscore: (struct){
   177      a: (struct){
   178        foo: (#struct){
   179          "_": (string){ "bar" }
   180        }
   181        #Foo: (#struct){
   182        }
   183      }
   184      c: (struct){
   185        foo: (struct){
   186          "_": (string){ "any" }
   187        }
   188      }
   189      d: (struct){
   190        bar: (#struct){
   191          "_": (string){ "any" }
   192        }
   193        #bar: (#struct){
   194        }
   195      }
   196      e: (struct){
   197        baz: (#struct){
   198          "_h": (string){ "any" }
   199        }
   200        #baz: (#struct){
   201        }
   202      }
   203    }
   204    invalidPattern: (_|_){
   205      // [eval] invalidPattern: invalid regexp: error parsing regexp: unexpected ): `BAD)`:
   206      //     ./in.cue:96:22
   207      y: (int){ 123 }
   208    }
   209  }
   210  -- diff/explanation --
   211  The new evaluator correctly points out that the pattern matching regular expression has invalid syntax.
   212  -- diff/-out/evalalpha<==>+out/eval --
   213  diff old new
   214  --- old
   215  +++ new
   216  @@ -1,4 +1,10 @@
   217  -(struct){
   218  +Errors:
   219  +invalidPattern: invalid regexp: error parsing regexp: unexpected ): `BAD)`:
   220  +    ./in.cue:96:22
   221  +
   222  +Result:
   223  +(_|_){
   224  +  // [eval]
   225     a: (struct){
   226       bar: (string){ "bar" }
   227     }
   228  @@ -85,7 +91,9 @@
   229         }
   230       }
   231     }
   232  -  invalidPattern: (struct){
   233  +  invalidPattern: (_|_){
   234  +    // [eval] invalidPattern: invalid regexp: error parsing regexp: unexpected ): `BAD)`:
   235  +    //     ./in.cue:96:22
   236       y: (int){ 123 }
   237     }
   238   }
   239  -- out/eval --
   240  (struct){
   241    a: (struct){
   242      bar: (string){ "bar" }
   243    }
   244    b: (struct){
   245      bar: (string){ "bar" }
   246    }
   247    c: (struct){
   248      bar: (string){ "bar" }
   249    }
   250    d: (struct){
   251      bar: (struct){
   252        name: (string){ "bar" }
   253      }
   254    }
   255    e: (struct){
   256      foo: (struct){
   257        bar: (string){ "foobar" }
   258      }
   259    }
   260    patternField: (struct){
   261      t1: (struct){
   262        a: (struct){
   263          r: (int){ 0 }
   264          b: (null){ null }
   265        }
   266      }
   267      t2: (struct){
   268        a: (struct){
   269          r: (int){ 0 }
   270          z: (int){ 1 }
   271          b: (int){ 1 }
   272        }
   273      }
   274    }
   275    bar: (int){ 3 }
   276    f1: (struct){
   277      foo3: (struct){
   278        name: (string){ "xx" }
   279        foo: (string){ "xx" }
   280        foo3baz: (struct){
   281          name: (string){ "xx" }
   282          a: (string){ "xx" }
   283          b: (string){ "xx" }
   284        }
   285      }
   286    }
   287    c1: (struct){
   288      foo3: (struct){
   289        x: (struct){
   290          name: (string){ "x" }
   291          foo: (string){ "x" }
   292        }
   293      }
   294    }
   295    emptyLabel: (struct){
   296      "": (int){ 1 }
   297      a: (int){ 1 }
   298    }
   299    underscore: (struct){
   300      a: (struct){
   301        foo: (#struct){
   302          "_": (string){ "bar" }
   303        }
   304        #Foo: (#struct){
   305        }
   306      }
   307      c: (struct){
   308        foo: (struct){
   309          "_": (string){ "any" }
   310        }
   311      }
   312      d: (struct){
   313        bar: (#struct){
   314          "_": (string){ "any" }
   315        }
   316        #bar: (#struct){
   317        }
   318      }
   319      e: (struct){
   320        baz: (#struct){
   321          "_h": (string){ "any" }
   322        }
   323        #baz: (#struct){
   324        }
   325      }
   326    }
   327    invalidPattern: (struct){
   328      y: (int){ 123 }
   329    }
   330  }
   331  -- out/compile --
   332  --- in.cue
   333  {
   334    a: {
   335      [string]: 〈0;-〉
   336    }
   337    a: {
   338      bar: _
   339    }
   340    b: {
   341      [string]: {
   342        〈1;-〉
   343      }
   344    }
   345    b: {
   346      bar: _
   347    }
   348    c: {
   349      [string]: 〈0;-〉
   350    }
   351    c: {
   352      [string]: {
   353        {
   354          {
   355            〈3;-〉
   356          }
   357        }
   358      }
   359    }
   360    c: {
   361      bar: _
   362    }
   363    d: {
   364      [string]: {
   365        name: 〈1;-〉
   366      }
   367    }
   368    d: {
   369      bar: {}
   370    }
   371    e: {
   372      [string]: {
   373        [string]: (〈1;-〉 + 〈0;-〉)
   374      }
   375    }
   376    e: {
   377      foo: {
   378        bar: _
   379      }
   380    }
   381    patternField: {
   382      t1: {
   383        [string]: {
   384          b: (〈1;(〈0;-〉)〉|null)
   385        }
   386        a: {
   387          r: 0
   388        }
   389      }
   390    }
   391    patternField: {
   392      t2: {
   393        a: {
   394          r: 0
   395        }
   396        [string]: {
   397          z: 1
   398          b: 〈1;(〈0;-〉)〉.z
   399        }
   400      }
   401    }
   402    bar: 3
   403    f1: {
   404      "foo\(〈1;bar〉)": {
   405        name: "xx"
   406        foo: 〈1;("foo\(〈1;bar〉)")〉.name
   407      }
   408    }
   409    f1: {
   410      "foo\(〈1;bar〉)": {
   411        "foo\(〈2;bar〉)baz": {
   412          name: "xx"
   413          a: 〈2;("foo\(〈1;bar〉)")〉["foo\(〈3;bar〉)baz"].name
   414          b: 〈1;("foo\(〈2;bar〉)baz")〉.name
   415        }
   416      }
   417    }
   418    c1: {
   419      "foo\(〈1;bar〉)": {
   420        [string]: {
   421          name: 〈1;-〉
   422          foo: 〈2;("foo\(〈1;bar〉)")〉.x.name
   423        }
   424      }
   425    }
   426    c1: {
   427      foo3: {
   428        x: _
   429      }
   430    }
   431    emptyLabel: {
   432      "": 1
   433      a: 〈1;emptyLabel〉[""]
   434    }
   435    underscore: {
   436      a: {
   437        foo: 〈0;#Foo〉
   438        foo: {
   439          "_": "bar"
   440        }
   441        #Foo: {
   442          [=~""]: string
   443        }
   444      }
   445    }
   446    underscore: {
   447      c: {
   448        foo: {
   449          "_": "any"
   450        }
   451        foo: {
   452          [=~""]: string
   453        }
   454      }
   455    }
   456    underscore: {
   457      d: {
   458        bar: {
   459          "_": "any"
   460        }
   461        #bar: {
   462          [string]: string
   463        }
   464        bar: 〈0;#bar〉
   465      }
   466    }
   467    underscore: {
   468      e: {
   469        baz: {
   470          "_h": "any"
   471        }
   472        #baz: {
   473          [=~"_"]: string
   474        }
   475        baz: 〈0;#baz〉
   476      }
   477    }
   478    invalidPattern: {
   479      [(=~"BAD)" & =~"x")]: string
   480      y: 123
   481    }
   482  }