Why is this an issue?

An unused parameter is a parameter that has been declared but is not used anywhere in the block of code where it is defined. It is dead code, contributing to unnecessary complexity and leading to confusion when reading the code. Therefore, it should be removed from your code to maintain clarity and efficiency.

What is the potential impact?

Having unused parameters in your code can lead to several issues:

In summary, unused local parameters can make your code less readable, more confusing, and harder to maintain, and they can potentially lead to bugs. Therefore, it is best to remove them.

How to fix it in ARM Templates

The fix for this issue is straightforward. Once you ensure the unused parameter is not part of an incomplete implementation leading to bugs, you just need to remove it.

Code examples

Noncompliant code example

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "parameters": {
      "unusedParameter": {
          "type": "string"
      },
      "virtualMachinesName": {
          "type": "string"
      }
  },
  "resources": [
    {
      "type": "Microsoft.Compute/virtualMachines",
      "name": "[parameters('virtualMachinesName')]",
      "apiVersion": "2023-09-01",
      "location": "[resourceGroup().location]"
    }
  ]
}

Compliant solution

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "parameters": {
      "virtualMachinesName": {
          "type": "string"
      }
  },
  "resources": [
    {
      "type": "Microsoft.Compute/virtualMachines",
      "name": "[parameters('virtualMachinesName')]",
      "apiVersion": "2023-09-01",
      "location": "[resourceGroup().location]"
    }
  ]
}

How to fix it in Bicep

The fix for this issue is straightforward. Once you ensure the unused parameter is not part of an incomplete implementation leading to bugs, you just need to remove it.

Code examples

Noncompliant code example

param unusedParameter string // Noncompliant
param virtualMachinesName string = '${uniqueString(resourceGroup().id)}'

resource vm 'Microsoft.Compute/virtualMachines@2023-09-01' = {
  name: virtualMachinesName
  location: resourceGroup().location
}

Compliant solution

param virtualMachinesName string = '${uniqueString(resourceGroup().id)}'

resource vm 'Microsoft.Compute/virtualMachines@2023-09-01' = {
  name: virtualMachinesName
  location: resourceGroup().location
}

Resources

Documentation