package b import ( "strings" . "github.com/alecthomas/chroma" // nolint "github.com/alecthomas/chroma/lexers/internal" ) // Bicep lexer. var Bicep = internal.Register(MustNewLazyLexer( &Config{ Name: "Bicep", Aliases: []string{"bicep"}, Filenames: []string{"*.bicep"}, }, bicepRules, )) func bicepRules() Rules { bicepFunctions := []string{ "any", "array", "concat", "contains", "empty", "first", "intersection", "items", "last", "length", "min", "max", "range", "skip", "take", "union", "dateTimeAdd", "utcNow", "deployment", "environment", "loadFileAsBase64", "loadTextContent", "int", "json", "extensionResourceId", "getSecret", "list", "listKeys", "listKeyValue", "listAccountSas", "listSecrets", "pickZones", "reference", "resourceId", "subscriptionResourceId", "tenantResourceId", "managementGroup", "resourceGroup", "subscription", "tenant", "base64", "base64ToJson", "base64ToString", "dataUri", "dataUriToString", "endsWith", "format", "guid", "indexOf", "lastIndexOf", "length", "newGuid", "padLeft", "replace", "split", "startsWith", "string", "substring", "toLower", "toUpper", "trim", "uniqueString", "uri", "uriComponent", "uriComponentToString", } return Rules{ "root": { {`//[^\n\r]+`, CommentSingle, nil}, {`/\*.*?\*/`, CommentMultiline, nil}, {`([']?\w+[']?)(:)`, ByGroups(NameProperty, Punctuation), nil}, {`\b('(resourceGroup|subscription|managementGroup|tenant)')\b`, KeywordNamespace, nil}, {`'[\w\$\{\(\)\}\.]{1,}?'`, LiteralStringInterpol, nil}, {`('''|').*?('''|')`, LiteralString, nil}, {`\b(allowed|batchSize|description|maxLength|maxValue|metadata|minLength|minValue|secure)\b`, NameDecorator, nil}, {`\b(az|sys)\.`, NameNamespace, nil}, {`\b(` + strings.Join(bicepFunctions, "|") + `)\b`, NameFunction, nil}, // https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/bicep-functions-logical {`\b(bool)(\()`, ByGroups(NameFunction, Punctuation), nil}, {`\b(for|if|in)\b`, Keyword, nil}, {`\b(module|output|param|resource|var)\b`, KeywordDeclaration, nil}, {`\b(array|bool|int|object|string)\b`, KeywordType, nil}, // https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/operators {`(>=|>|<=|<|==|!=|=~|!~|::|&&|\?\?|!|-|%|\*|\/|\+)`, Operator, nil}, {`[\(\)\[\]\.:\?{}@=]`, Punctuation, nil}, {`[\w_-]+`, Text, nil}, {`\s+`, TextWhitespace, nil}, }, } }