""" Curated signature database for Bicep's built-in functions. Bicep.LangServer (as of 0.46.1) does not implement textDocument/signatureHelp, so iLSP provides its own for the most commonly used built-in functions. Not exhaustive — covers the functions people actually type day to day. """ from typing import Any # name -> list of parameter labels (one entry per overload, simplest form first) BUILTIN_FUNCTIONS: dict[str, dict[str, Any]] = { "resourceId": { "params": ["resourceType", "resourceName1", "resourceName2..."], "doc": "Returns the unique identifier of a resource. Also usable with a subscriptionId/resourceGroupName prefix.", }, "subscriptionResourceId": { "params": ["subscriptionId", "resourceType", "resourceName1", "resourceName2..."], "doc": "Returns the unique identifier for a resource deployed at the subscription level.", }, "tenantResourceId": { "params": ["resourceType", "resourceName1", "resourceName2..."], "doc": "Returns the unique identifier for a resource deployed at the tenant level.", }, "extensionResourceId": { "params": ["resourceId", "resourceType", "resourceName1", "resourceName2..."], "doc": "Returns the resource ID for an extension resource, which is applied to another resource.", }, "guid": { "params": ["baseString1", "baseString2..."], "doc": "Creates a deterministic GUID based on the values passed as parameters.", }, "uniqueString": { "params": ["baseString1", "baseString2..."], "doc": "Creates a deterministic hash string based on the values passed as parameters (13 chars).", }, "take": { "params": ["originalValue", "count"], "doc": "Returns a string or array with the specified number of elements from the start.", }, "skip": { "params": ["originalValue", "count"], "doc": "Returns a string or array with all the elements after the specified number skipped.", }, "first": { "params": ["arg1"], "doc": "Returns the first element of an array, or first character of a string.", }, "last": { "params": ["arg1"], "doc": "Returns the last element of an array, or last character of a string.", }, "length": { "params": ["arg1"], "doc": "Returns the number of elements in an array, characters in a string, or properties in an object.", }, "concat": { "params": ["arg1", "arg2..."], "doc": "Combines multiple arrays or strings.", }, "union": { "params": ["arg1", "arg2..."], "doc": "Returns a single array/object with all elements from the parameters, merging objects.", }, "contains": { "params": ["container", "itemToFind"], "doc": "Checks whether an array contains a value, an object contains a key, or a string contains a substring.", }, "empty": { "params": ["itemToTest"], "doc": "Determines if an array, object, or string is empty.", }, "format": { "params": ["formatString", "arg1..."], "doc": "Creates a formatted string using .NET-style {0} placeholders.", }, "join": { "params": ["inputArray", "delimiter"], "doc": "Joins multiple strings from an array into a single string, separated by delimiter.", }, "split": { "params": ["inputString", "delimiter"], "doc": "Splits a string into an array using a delimiter.", }, "replace": { "params": ["originalString", "oldString", "newString"], "doc": "Returns a new string with all instances of oldString replaced by newString.", }, "toLower": { "params": ["stringToChange"], "doc": "Converts a string to lowercase.", }, "toUpper": { "params": ["stringToChange"], "doc": "Converts a string to uppercase.", }, "trim": { "params": ["stringToTrim"], "doc": "Removes leading/trailing whitespace from a string.", }, "substring": { "params": ["stringToParse", "startIndex", "length"], "doc": "Returns a substring starting at the specified position.", }, "padLeft": { "params": ["valueToPad", "totalLength", "paddingCharacter"], "doc": "Pads a string to a fixed total length by adding characters to the left.", }, "startsWith": { "params": ["stringToSearch", "stringToFind"], "doc": "Checks whether a string starts with a value (case-insensitive).", }, "endsWith": { "params": ["stringToSearch", "stringToFind"], "doc": "Checks whether a string ends with a value (case-insensitive).", }, "indexOf": { "params": ["stringToSearch", "stringToFind"], "doc": "Returns the first position of a value within a string (case-insensitive).", }, "reference": { "params": ["resourceNameOrIdentifier", "apiVersion", "'Full'"], "doc": "Returns an object representing a resource's runtime state.", }, "listKeys": { "params": ["resourceNameOrIdentifier", "apiVersion"], "doc": "Returns the keys for a resource (e.g. storage account access keys).", }, "listSecrets": { "params": ["resourceNameOrIdentifier", "apiVersion"], "doc": "Returns the secrets for a resource.", }, "resourceGroup": { "params": [], "doc": "Returns an object representing the current resource group.", }, "subscription": { "params": [], "doc": "Returns an object representing the current subscription.", }, "deployment": { "params": [], "doc": "Returns an object representing the current deployment operation.", }, "environment": { "params": [], "doc": "Returns an object describing the Azure cloud environment.", }, "az": { "params": [], "doc": "Namespace for Azure Bicep built-in functions.", }, "json": { "params": ["jsonString"], "doc": "Converts a valid JSON string into a JSON object / array.", }, "string": { "params": ["valueToConvert"], "doc": "Converts the specified value to a string.", }, "int": { "params": ["valueToConvert"], "doc": "Converts the specified value to an integer.", }, "bool": { "params": ["value"], "doc": "Converts the specified value to a boolean.", }, "array": { "params": ["valueToConvert"], "doc": "Converts the specified value to an array.", }, "base64": { "params": ["inputString"], "doc": "Returns the base64 representation of the input string.", }, "base64ToString": { "params": ["base64Value"], "doc": "Converts a base64 representation to a string.", }, "dateTimeAdd": { "params": ["base", "duration", "format"], "doc": "Adds a time duration to a base UTC datetime value.", }, "utcNow": { "params": ["format"], "doc": "Returns the current UTC datetime in the specified format.", }, "loadTextContent": { "params": ["filePath", "encoding"], "doc": "Loads the content of the specified file as a string at compile time.", }, "loadJsonContent": { "params": ["filePath", "jsonPath", "encoding"], "doc": "Loads the content of the specified JSON file at compile time.", }, "loadFileAsBase64": { "params": ["filePath"], "doc": "Loads the specified file as a base64 string at compile time.", }, "managementGroup": { "params": ["name"], "doc": "Returns an object representing the current or specified management group.", }, "newGuid": { "params": [], "doc": "Returns a new (random, non-deterministic) GUID. Only valid for param defaults.", }, "filter": { "params": ["array", "lambdaExpression"], "doc": "Filters an array using a custom filtering lambda expression.", }, "map": { "params": ["array", "lambdaExpression"], "doc": "Applies a custom mapping lambda expression to each element of an array.", }, "reduce": { "params": ["array", "initialValue", "lambdaExpression"], "doc": "Reduces an array with a custom lambda expression.", }, "sort": { "params": ["array", "lambdaExpression"], "doc": "Sorts an array with a custom lambda expression comparator.", }, "min": { "params": ["arg1", "arg2..."], "doc": "Returns the minimum value from an array of integers, or a comma-separated list.", }, "max": { "params": ["arg1", "arg2..."], "doc": "Returns the maximum value from an array of integers, or a comma-separated list.", }, "range": { "params": ["startIndex", "count"], "doc": "Creates an array of integers from startIndex to startIndex+count-1.", }, "items": { "params": ["object"], "doc": "Returns an array of key/value pair objects that represent the properties of an object.", }, "pickZones": { "params": ["providerNamespace", "resourceType", "location", "numberOfZones", "offset"], "doc": "Determines which availability zones are recommended for a resource type/location.", }, } def get_signature(name: str) -> dict[str, Any] | None: return BUILTIN_FUNCTIONS.get(name)