public ArmTemplateSemanticModel(ArmTemplateFile sourceFile) { Trace.WriteLine($"Building semantic model for {sourceFile.FileUri}"); this.SourceFile = sourceFile; this.targetScopeLazy = new(() => { if (sourceFile.Template?.Schema is not { Value : var schema }) { return(ResourceScope.None); } if (!Uri.TryCreate(schema, UriKind.Absolute, out var schemaUri)) { return(ResourceScope.None); } return((schemaUri.AbsolutePath) switch { "/schemas/2019-08-01/tenantDeploymentTemplate.json" => ResourceScope.Tenant, "/schemas/2019-08-01/managementGroupDeploymentTemplate.json" => ResourceScope.ManagementGroup, "/schemas/2018-05-01/subscriptionDeploymentTemplate.json" => ResourceScope.Subscription, "/schemas/2014-04-01-preview/deploymentTemplate.json" or "/schemas/2015-01-01/deploymentTemplate.json" or "/schemas/2019-04-01/deploymentTemplate.json" => ResourceScope.ResourceGroup, _ => ResourceScope.None, });
public Compilation(IResourceTypeProvider resourceTypeProvider, SourceFileGrouping sourceFileGrouping, ImmutableDictionary <ISourceFile, ISemanticModel>?modelLookup = null) { this.SourceFileGrouping = sourceFileGrouping; this.ResourceTypeProvider = resourceTypeProvider; this.lazySemanticModelLookup = sourceFileGrouping.SourceFiles.ToImmutableDictionary( sourceFile => sourceFile, sourceFile => (modelLookup is not null && modelLookup.TryGetValue(sourceFile, out var existingModel)) ? new(existingModel) : new Lazy <ISemanticModel>(() => sourceFile switch { BicepFile bicepFile => new SemanticModel(this, bicepFile, SourceFileGrouping.FileResolver), ArmTemplateFile armTemplateFile => new ArmTemplateSemanticModel(armTemplateFile), _ => throw new ArgumentOutOfRangeException(nameof(sourceFile)), }));
public Compilation(INamespaceProvider namespaceProvider, SourceFileGrouping sourceFileGrouping, RootConfiguration configuration, ImmutableDictionary <ISourceFile, ISemanticModel>?modelLookup = null) { this.SourceFileGrouping = sourceFileGrouping; this.NamespaceProvider = namespaceProvider; this.Configuration = configuration; var fileResolver = SourceFileGrouping.FileResolver; this.lazySemanticModelLookup = sourceFileGrouping.SourceFiles.ToImmutableDictionary( sourceFile => sourceFile, sourceFile => (modelLookup is not null && modelLookup.TryGetValue(sourceFile, out var existingModel)) ? new(existingModel) : new Lazy <ISemanticModel>(() => sourceFile switch { BicepFile bicepFile => new SemanticModel(this, bicepFile, fileResolver, configuration), ArmTemplateFile armTemplateFile => new ArmTemplateSemanticModel(armTemplateFile), TemplateSpecFile templateSpecFile => new TemplateSpecSemanticModel(templateSpecFile), _ => throw new ArgumentOutOfRangeException(nameof(sourceFile)), }));