Azure / bicep

Bicep is a declarative language for describing and deploying Azure resources
MIT License
3.21k stars 745 forks source link

Request textDocument/codeAction failed. Failed to find a 'name' property for resource 'resourceGroup' #5530

Closed rouke-broersma closed 2 years ago

rouke-broersma commented 2 years ago

Bicep version VS Code extension: v0.4.1124

Describe the bug Bicep syntax parsing seems to fail in a very specific scenario

To Reproduce Steps to reproduce the behavior:

Create a bicep file with as contents:

targetScope = 'subscription'

resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' 

Now try to use the autocomplete and the Bicep interpreter crashes with the below exception and keeps restarting and crashing.

Additional context

[Error - 3:12:26 PM] Request textDocument/codeAction failed.
  Message: Internal Error - System.InvalidOperationException: Failed to find a 'name' property for resource 'resourceGroup'
   at Bicep.Core.Semantics.Metadata.ResourceMetadata.get_NameSyntax() in C:\__w\1\s\src\Bicep.Core\Semantics\Metadata\ResourceMetadata.cs:line 26
   at Bicep.Core.Emit.ScopeHelper.ValidateScope(SemanticModel semanticModel, LogInvalidScopeDiagnostic logInvalidScopeFunc, ResourceScope supportedScopes, SyntaxBase bodySyntax, SyntaxBase scopeValue) in C:\__w\1\s\src\Bicep.Core\Emit\ScopeHelper.cs:line 57
   at Bicep.Core.Emit.ScopeHelper.GetResourceScopeInfo(SemanticModel semanticModel, IDiagnosticWriter diagnosticWriter)
   at Bicep.Core.Emit.EmitLimitationCalculator.Calculate(SemanticModel model) in C:\__w\1\s\src\Bicep.Core\Emit\EmitLimitationCalculator.cs:line 38
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
--- End of stack trace from previous location ---
   at System.Lazy`1.CreateValue()
   at Bicep.Core.Semantics.SemanticModel.GetSemanticDiagnostics() in C:\__w\1\s\src\Bicep.Core\Semantics\SemanticModel.cs:line 164
   at Bicep.Core.Semantics.SemanticModel.AssembleDiagnostics() in C:\__w\1\s\src\Bicep.Core\Semantics\SemanticModel.cs:line 193
   at Bicep.LanguageServer.Handlers.BicepCodeActionHandler.Handle(CodeActionParams request, CancellationToken cancellationToken) in C:\__w\1\s\src\Bicep.LangServer\Handlers\BicepCodeActionHandler.cs:line 52
   at OmniSharp.Extensions.JsonRpc.JsonRpcServerServiceCollectionExtensions.RequestHandlerDecorator`2.Handle(T request, CancellationToken cancellationToken)
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.SemanticTokensDeltaPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.ResolveCommandPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.<RouteRequest>g__InnerRoute|7_0(IServiceScopeFactory serviceScopeFactory, Request request, TDescriptor descriptor, Object params, CancellationToken token, ILogger logger)
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.RouteRequest(IRequestDescriptor`1 descriptors, Request request, CancellationToken token)
   at OmniSharp.Extensions.JsonRpc.InputHandler.<>c__DisplayClass38_0.<<RouteRequest>b__5>d.MoveNext()
  Code: -32603 
alex-frankel commented 2 years ago

I am not able to repro with this same version on Windows 11. What OS are you using? Are you using a WSL/remote environment setup?

rouke-broersma commented 2 years ago

Yes sorry, this was in vscode with a remote connection to Ubuntu wsl.

anthony-c-martin commented 2 years ago

Took a look through the Bicep code - the error occurs when calculating the scope created by a partially-typed resourceGroup resource. I couldn't repro this with the above sample, but I could repro with the following:

targetScope = 'subscription'

resource foo 'Microsoft.AAD/domainServices@2021-05-01' existing = {
  scope: resourceGroup
  name: 'foo'
}

resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01'