Skip to content

Indexed array property access in resource name throws ArgumentException #18213

@maikvandergaag

Description

@maikvandergaag

Bicep version
Bicep CLI version 0.37.4 (27cc8db)
Bicep CLI version 0.38.3 (2b1a61d)

Describe the bug
Exception when building bicep:

Unhandled exception. System.ArgumentException: Unable to determine parent of specified node of type 'PropertyAccessSyntax' at span '[1580:1597]' because it has not been indexed.
at Bicep.Core.Syntax.SyntaxHierarchy.GetParent(SyntaxBase node) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\SyntaxHierarchy.cs:line 31
at Bicep.Core.Syntax.SyntaxHierarchy.IsDescendant(SyntaxBase node, SyntaxBase potentialAncestor) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\SyntaxHierarchy.cs:line 42
at Bicep.Core.Semantics.Binder.IsDescendant(SyntaxBase node, SyntaxBase potentialAncestor) in C:__w\1\s\bicep\src\Bicep.Core\Semantics\Binder.cs:line 130
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.GetAccessedType(AccessExpressionSyntax syntax, IDiagnosticWriter diagnostics) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 1945
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.<>c__DisplayClass95_0.b__0(IDiagnosticWriter diagnostics) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 1885
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.<>c__DisplayClass18_0.b__0() in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 97
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.<>c__DisplayClass16_0.b__0(SyntaxBase key) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 86
at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey, Func2)
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.AssignTypeWithCaching(SyntaxBase syntax, Func1 assignFunc) in C:\__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 85 at Bicep.Core.TypeSystem.TypeAssignmentVisitor.AssignTypeWithDiagnostics(SyntaxBase syntax, Func2 assignFunc) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 94
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.VisitPropertyAccessSyntax(PropertyAccessSyntax syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 1885
at Bicep.Core.Syntax.PropertyAccessSyntax.Accept(ISyntaxVisitor visitor) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\PropertyAccessSyntax.cs:line 32
at Bicep.Core.Syntax.SyntaxVisitor.VisitInternal(SyntaxBase node) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\SyntaxVisitor.cs:line 203
at Bicep.Core.Syntax.SyntaxVisitor.Visit(SyntaxBase node) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\SyntaxVisitor.cs:line 198
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.GetTypeAssignment(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 51
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.GetTypeInfo(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 62
at Bicep.Core.TypeSystem.TypeManager.GetTypeInfo(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeManager.cs:line 37
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.<>c__DisplayClass85_0.b__0() in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 1490
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.<>c__DisplayClass17_0.b__0() in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 91
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.<>c__DisplayClass16_0.b__0(SyntaxBase key) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 86
at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey, Func2)
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.AssignTypeWithCaching(SyntaxBase syntax, Func1 assignFunc) in C:\__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 85 at Bicep.Core.TypeSystem.TypeAssignmentVisitor.AssignType(SyntaxBase syntax, Func1 assignFunc) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 91
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.VisitFunctionArgumentSyntax(FunctionArgumentSyntax syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 1490
at Bicep.Core.Syntax.FunctionArgumentSyntax.Accept(ISyntaxVisitor visitor) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\FunctionArgumentSyntax.cs:line 16
at Bicep.Core.Syntax.SyntaxVisitor.VisitInternal(SyntaxBase node) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\SyntaxVisitor.cs:line 203
at Bicep.Core.Syntax.SyntaxVisitor.Visit(SyntaxBase node) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\SyntaxVisitor.cs:line 198
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.GetTypeAssignment(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 51
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.GetTypeInfo(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 62
at Bicep.Core.TypeSystem.TypeManager.GetTypeInfo(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeManager.cs:line 37
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.b__119_0(FunctionArgumentSyntax syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 2596
at System.Linq.Enumerable.SelectIListIterator2.Fill(IList1, Span1, Func2)
at System.Linq.Enumerable.SelectIListIterator2.ToArray() at System.Linq.Enumerable.ToArray[TSource](IEnumerable1)
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.<>c__DisplayClass105_0.b__0(IDiagnosticWriter diagnostics) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 2118
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.<>c__DisplayClass18_0.b__0() in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 97
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.<>c__DisplayClass16_0.b__0(SyntaxBase key) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 86
at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey, Func2)
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.AssignTypeWithCaching(SyntaxBase syntax, Func1 assignFunc) in C:\__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 85 at Bicep.Core.TypeSystem.TypeAssignmentVisitor.AssignTypeWithDiagnostics(SyntaxBase syntax, Func2 assignFunc) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 94
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.VisitFunctionCallSyntax(FunctionCallSyntax syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 2114
at Bicep.Core.Syntax.FunctionCallSyntax.Accept(ISyntaxVisitor visitor) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\FunctionCallSyntax.cs:line 16
at Bicep.Core.Syntax.SyntaxVisitor.VisitInternal(SyntaxBase node) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\SyntaxVisitor.cs:line 203
at Bicep.Core.Syntax.SyntaxVisitor.Visit(SyntaxBase node) in C:__w\1\s\bicep\src\Bicep.Core\Syntax\SyntaxVisitor.cs:line 198
at Bicep.Core.TypeSystem.TypeAssignmentVisitor.GetMatchedFunctionResultValue(FunctionCallSyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeAssignmentVisitor.cs:line 80
at Bicep.Core.TypeSystem.TypeManager.GetMatchedFunctionResultValue(FunctionCallSyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\TypeSystem\TypeManager.cs:line 82
at Bicep.Core.Intermediate.ExpressionBuilder.ConvertFunction(FunctionCallSyntaxBase functionCall) in C:__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 919
at Bicep.Core.Intermediate.ExpressionBuilder.ConvertWithoutLowering(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 122
at Bicep.Core.Intermediate.ExpressionBuilder.Convert(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\Intermediate\ExpressionBuilder.cs:line 61
at Bicep.Core.Emit.ExpressionConverter.ConvertToIntermediateExpression(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionConverter.cs:line 40
at Bicep.Core.Emit.ExpressionConverter.ConvertExpression(SyntaxBase syntax) in C:__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionConverter.cs:line 44
at Bicep.Core.Emit.ExpressionConverter.<>c__DisplayClass16_1.b__1(ResourceAncestor x, Int32 i) in C:__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionConverter.cs:line 578
at System.Linq.Enumerable.SelectManyIterator[TSource,TResult](IEnumerable1, Func3)+MoveNext()
at System.Linq.Enumerable.ConcatIterator1.MoveNext() at System.Linq.Enumerable.SelectIterator[TSource,TResult](IEnumerable1, Func3)+MoveNext() at System.String.Join(String separator, IEnumerable1 values)
at Bicep.Core.Emit.ExpressionConverter.GetFullyQualifiedResourceName(DeclaredResourceMetadata resource) in C:__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionConverter.cs:line 625
at Bicep.Core.Emit.ExpressionEmitter.GetFullyQualifiedResourceName(DeclaredResourceMetadata resource) in C:__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionEmitter.cs:line 148
at Bicep.Core.Emit.TemplateWriter.<>c__DisplayClass69_0.b__0() in C:__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 1275
at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WriteObjectWithPosition(IPositionable sourcePosition, Action propertiesFunc) in C:__w\1\s\bicep\src\Bicep.Core\Emit\PositionTrackingJsonTextWriter.cs:line 92
at Bicep.Core.Emit.ExpressionEmitter.EmitObject(Action writePropertiesFunc, IPositionable position) in C:__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionEmitter.cs:line 456
at Bicep.Core.Emit.TemplateWriter.EmitResource(ExpressionEmitter emitter, ImmutableArray1 extensions, DeclaredResourceExpression resource) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 1214 at Bicep.Core.Emit.TemplateWriter.<>c__DisplayClass67_0.<EmitResources>b__0() in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 1166 at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WriteArrayWithPosition(IPositionable sourcePosition, Action itemsFunc) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\PositionTrackingJsonTextWriter.cs:line 103 at Bicep.Core.Emit.ExpressionEmitter.EmitArray(Action writeItemsFunc, IPositionable position) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionEmitter.cs:line 459 at Bicep.Core.Emit.ExpressionEmitter.<>c__DisplayClass35_0.<EmitArrayProperty>b__0() in C:\__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionEmitter.cs:line 453 at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WritePropertyWithPosition(IPositionable keyPosition, String name, Action valueFunc) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\PositionTrackingJsonTextWriter.cs:line 114 at Bicep.Core.Emit.ExpressionEmitter.EmitProperty(String propertyName, Action writeValueFunc, IPositionable position) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionEmitter.cs:line 444 at Bicep.Core.Emit.ExpressionEmitter.EmitArrayProperty(String propertyName, Action writeItemsFunc, IPositionable position) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\ExpressionEmitter.cs:line 453 at Bicep.Core.Emit.TemplateWriter.EmitResources(PositionTrackingJsonTextWriter jsonWriter, ExpressionEmitter emitter, ImmutableArray1 extensions, ImmutableArray1 resources, ImmutableArray1 modules) in C:__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 1157
at Bicep.Core.Emit.TemplateWriter.GenerateTemplateWithoutHash(PositionTrackingJsonTextWriter jsonWriter) in C:__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 145
at Bicep.Core.Emit.TemplateWriter.Write(SourceAwareJsonTextWriter writer) in C:__w\1\s\bicep\src\Bicep.Core\Emit\TemplateWriter.cs:line 85
at Bicep.Core.Emit.TemplateEmitter.<>c__DisplayClass8_0.b__0() in C:__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 116
at Bicep.Core.Emit.TemplateEmitter.EmitOrFail(Func1 write) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 137 at Bicep.Core.Emit.TemplateEmitter.Emit(TextWriter textWriter) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\TemplateEmitter.cs:line 102 at Bicep.Core.Emit.CompilationEmitter.Template(SemanticModel model) in C:\__w\1\s\bicep\src\Bicep.Core\Emit\CompilationEmitter.cs:line 106 at Bicep.Core.Emit.CompilationEmitter.Template() in C:\__w\1\s\bicep\src\Bicep.Core\Emit\CompilationEmitter.cs:line 98 at Bicep.Cli.Services.OutputWriter.TemplateToFileAsync(Compilation compilation, IOUri outputUri) in C:\__w\1\s\bicep\src\Bicep.Cli\Services\OutputWriter.cs:line 96 at Bicep.Cli.Commands.BuildCommand.Compile(IOUri inputUri, IOUri outputUri, Boolean noRestore, Nullable1 diagnosticsFormat, Boolean outputToStdOut) in C:__w\1\s\bicep\src\Bicep.Cli\Commands\BuildCommand.cs:line 55
at Bicep.Cli.Commands.BuildCommand.RunAsync(BuildArguments args) in C:__w\1\s\bicep\src\Bicep.Cli\Commands\BuildCommand.cs:line 31
at Bicep.Cli.Program.RunAsync(String[] args, CancellationToken cancellationToken) in C:__w\1\s\bicep\src\Bicep.Cli\Program.cs:line 75
at Bicep.Cli.Program.<>c__DisplayClass3_0.<

b__0>d.MoveNext() in C:__w\1\s\bicep\src\Bicep.Cli\Program.cs:line 62
--- End of stack trace from previous location ---
at Bicep.Cli.Program.RunWithCancellationAsync(Func`2 runFunc) in C:__w\1\s\bicep\src\Bicep.Cli\Program.cs:line 169
at Bicep.Cli.Program.Main(String[] args) in C:__w\1\s\bicep\src\Bicep.Cli\Program.cs:line 44
at Bicep.Cli.Program.(String[] args)

To Reproduce
run bicep build for the below bicep file:

metadata info = {
  title: 'CosmosDB module'
  version: '1.0.2'
  author: '3fifty'
}

metadata description = '''
Module for the creation of a Cosmos DB in a Azure Subscription. 
The CosmosDB also creates SQL based databases as specified in the databases parameter.
'''

@description('The name of the resource')
param name string

@allowed([
  'tst'
  'prd'
  'dev'
  'acc'
])
@description('The environment were the service is beign deployed to (tst, acc, prd, dev)')
param env string

@description('The location of the resource')
param location string = resourceGroup().location

@description('''
Databases to create can be specified with a specific format: 
```bicep
  [{
   name: "test" 
   containername: "test" 
   partitionKeyPaths: 
    [ 
      "/_partitionKey" 
    ] 
    indexingPolicyPathInclude: 
    [ 
      { 
        path: "/*"
      }
    ] 
    indexingPolicyPathExclude: 
    [
      { 
        path: "/\'_etag\'/?" 
      } 
    ]
  }]
  ```
''')
param databases array

var resourcename = 'cosno-${name}-${env}'

resource account 'Microsoft.DocumentDB/databaseAccounts@2025-04-15' = {
  name: resourcename
  location: location
  kind: 'GlobalDocumentDB'
  properties: {
    minimalTlsVersion: 'Tls12'
    locations: [
      {
        locationName: location
        failoverPriority: 0
      }
    ]
    databaseAccountOfferType: 'Standard'
  }
}

resource db 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2025-04-15' = [
  for i in range(0, length(databases)): {
    name: toLower(databases[i].name)
    parent: account
    properties: {
      resource: {
        id: databases[i].name
      }
      options: {
        throughput: 400
      }
    }
  }
]

resource containers 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2025-04-15' = [
  for i in range(0, length(databases)): {
    name: databases[i].containername
    parent: db[i]
    properties: {
      resource: {
        id: databases[i].containername
        partitionKey: {
          paths: databases[i].partitionKeyPaths
          kind: 'Hash'
        }
        indexingPolicy: {
          indexingMode: 'consistent'
          includedPaths: databases[i].?indexingPolicyPathInclude ?? []
          excludedPaths: databases[i].?indexingPolicyPathExclude ?? []
        }
      }
    }
  }
]

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions