From c4246919087a2132d51adf26b7bc1ddbaa24bae8 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Thu, 5 Aug 2021 21:48:25 +0200 Subject: [PATCH 1/4] Bicep: Resolved TODO + improvements --- components/prism-bicep.js | 67 ++++++++++++++++--- components/prism-bicep.min.js | 2 +- tests/languages/bicep/class-name_feature.test | 47 +++++++++++++ tests/languages/bicep/comment_feature.test | 18 +++++ tests/languages/bicep/decorator_feature.test | 42 +++++++++++- tests/languages/bicep/function_feature.test | 37 +++++++++- tests/languages/bicep/keyword_feature.test | 12 ++-- tests/languages/bicep/string_feature.test | 62 ++++++++++++++++- tests/languages/bicep/var_feature.test | 2 +- 9 files changed, 270 insertions(+), 19 deletions(-) create mode 100644 tests/languages/bicep/class-name_feature.test create mode 100644 tests/languages/bicep/comment_feature.test diff --git a/components/prism-bicep.js b/components/prism-bicep.js index 08ffdcdf92..6cf0b6c33a 100644 --- a/components/prism-bicep.js +++ b/components/prism-bicep.js @@ -14,16 +14,67 @@ Prism.languages.bicep = { greedy: true } ], - 'string': { - // this doesn't handle string interpolalation or multiline strings as yet - pattern: /'(?:\\.|[^'\\\r\n])*'/, - greedy: true + + 'property': [ + { + pattern: /([\r\n][ \t]*)[a-z_]\w*(?=[ \t]*:)/i, + lookbehind: true + }, + { + pattern: /([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/i, + lookbehind: true, + greedy: true + } + ], + 'string': [ + { + pattern: /'''[^'][\s\S]*?'''/, + greedy: true + }, + { + pattern: /(^|[^\\'])'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'/, + lookbehind: true, + greedy: true, + } + ], + 'interpolated-string': { + pattern: /(^|[^\\'])'(?:\\.|\$(?:(?!\{)|\{[^{}\r\n]*\})|[^'\\\r\n$])*'/, + lookbehind: true, + greedy: true, + inside: { + 'interpolation': { + pattern: /\$\{[^{}\r\n]*\}/, + inside: { + 'expression': { + pattern: /(^\$\{)[\s\S]+(?=\}$)/, + lookbehind: true + }, + 'punctuation': /^\$\{|\}$/, + } + }, + 'string': /[\s\S]+/ + } }, - 'number': /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i, + + 'class-name': { + pattern: /(\b(?:output|param)\b[ \t]+\w+[ \t]+)\w+\b/, + lookbehind: true + }, + 'boolean': /\b(?:true|false)\b/, - 'keyword': /\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/, // https://github.com/Azure/bicep/blob/114a3251b4e6e30082a58729f19a8cc4e374ffa6/src/textmate/bicep.tmlanguage#L184 - 'function': /\b(?:array|concat|contains|createArray|empty|first|intersection|last|length|max|min|range|skip|take|union)(?:\$|\b)/, // https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-array + // https://github.com/Azure/bicep/blob/114a3251b4e6e30082a58729f19a8cc4e374ffa6/src/textmate/bicep.tmlanguage#L184 + 'keyword': /\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/, + + 'decorator': /@\w+\b/, + // https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-array + 'function': [ + /\b[a-z_]\w*(?=[ \t]*\()/i, + /\b(?:array|concat|contains|createArray|empty|first|intersection|last|length|max|min|range|skip|take|union)(?:\$|\b)/ + ], + + 'number': /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i, 'operator': /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/, 'punctuation': /[{}[\];(),.:]/, - 'decorator': /@\w+\b/ }; + +Prism.languages.bicep['interpolated-string'].inside['interpolation'].inside['expression'].inside = Prism.languages.bicep; diff --git a/components/prism-bicep.min.js b/components/prism-bicep.min.js index c04dde1f00..87dab82220 100644 --- a/components/prism-bicep.min.js +++ b/components/prism-bicep.min.js @@ -1 +1 @@ -Prism.languages.bicep={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/'(?:\\.|[^'\\\r\n])*'/,greedy:!0},number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,boolean:/\b(?:true|false)\b/,keyword:/\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/,function:/\b(?:array|concat|contains|createArray|empty|first|intersection|last|length|max|min|range|skip|take|union)(?:\$|\b)/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,punctuation:/[{}[\];(),.:]/,decorator:/@\w+\b/}; \ No newline at end of file +Prism.languages.bicep={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],property:[{pattern:/([\r\n][ \t]*)[a-z_]\w*(?=[ \t]*:)/i,lookbehind:!0},{pattern:/([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/i,lookbehind:!0,greedy:!0}],string:[{pattern:/'''[^'][\s\S]*?'''/,greedy:!0},{pattern:/(^|[^\\'])'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0}],"interpolated-string":{pattern:/(^|[^\\'])'(?:\\.|\$(?:(?!\{)|\{[^{}\r\n]*\})|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/\$\{[^{}\r\n]*\}/,inside:{expression:{pattern:/(^\$\{)[\s\S]+(?=\}$)/,lookbehind:!0},punctuation:/^\$\{|\}$/}},string:/[\s\S]+/}},"class-name":{pattern:/(\b(?:output|param)\b[ \t]+\w+[ \t]+)\w+\b/,lookbehind:!0},boolean:/\b(?:true|false)\b/,keyword:/\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/,decorator:/@\w+\b/,function:[/\b[a-z_]\w*(?=[ \t]*\()/i,/\b(?:array|concat|contains|createArray|empty|first|intersection|last|length|max|min|range|skip|take|union)(?:\$|\b)/],number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,punctuation:/[{}[\];(),.:]/},Prism.languages.bicep["interpolated-string"].inside.interpolation.inside.expression.inside=Prism.languages.bicep; \ No newline at end of file diff --git a/tests/languages/bicep/class-name_feature.test b/tests/languages/bicep/class-name_feature.test new file mode 100644 index 0000000000..c3fe386da5 --- /dev/null +++ b/tests/languages/bicep/class-name_feature.test @@ -0,0 +1,47 @@ +param myString string +param myInt int +param myBool bool +param myObject object +param myArray array + +output myHardcodedOutput int = 42 +output myLoopyOutput array = [for myItem in myArray: { + myProperty: myItem.myOtherProperty +}] + +---------------------------------------------------- + +[ + ["keyword", "param"], " myString ", ["class-name", "string"], + ["keyword", "param"], " myInt ", ["class-name", "int"], + ["keyword", "param"], " myBool ", ["class-name", "bool"], + ["keyword", "param"], " myObject ", ["class-name", "object"], + ["keyword", "param"], " myArray ", ["class-name", "array"], + + ["keyword", "output"], + " myHardcodedOutput ", + ["class-name", "int"], + ["operator", "="], + ["number", "42"], + + ["keyword", "output"], + " myLoopyOutput ", + ["class-name", "array"], + ["operator", "="], + ["punctuation", "["], + ["keyword", "for"], + " myItem ", + ["keyword", "in"], + " myArray", + ["operator", ":"], + ["punctuation", "{"], + + ["property", "myProperty"], + ["operator", ":"], + " myItem", + ["punctuation", "."], + "myOtherProperty\r\n", + + ["punctuation", "}"], + ["punctuation", "]"] +] diff --git a/tests/languages/bicep/comment_feature.test b/tests/languages/bicep/comment_feature.test new file mode 100644 index 0000000000..3d3a84ce63 --- /dev/null +++ b/tests/languages/bicep/comment_feature.test @@ -0,0 +1,18 @@ +// this is a comment + +/* this +is a +multi line comment */ + +/* so is +this */ + +---------------------------------------------------- + +[ + ["comment", "// this is a comment"], + + ["comment", "/* this\r\nis a\r\nmulti line comment */"], + + ["comment", "/* so is\r\nthis */"] +] diff --git a/tests/languages/bicep/decorator_feature.test b/tests/languages/bicep/decorator_feature.test index 524b557ba3..72577f5cb7 100644 --- a/tests/languages/bicep/decorator_feature.test +++ b/tests/languages/bicep/decorator_feature.test @@ -6,16 +6,54 @@ param demoPassword string ]) param demoEnum string +@minLength(3) +@maxLength(24) +@description('Name of the storage account') +param storageAccountName string = concat(uniqueString(resourceGroup().id), 'sa') + ---------------------------------------------------- [ ["decorator", "@secure"], ["punctuation", "("], ["punctuation", ")"], - ["keyword", "param"], " demoPassword string\r\n", + ["keyword", "param"], " demoPassword ", ["class-name", "string"], ["decorator", "@allowed"], ["punctuation", "("], ["punctuation", "["], ["string", "'one'"], ["string", "'two'"], ["punctuation", "]"], ["punctuation", ")"], - ["keyword", "param"], " demoEnum string" + ["keyword", "param"], " demoEnum ", ["class-name", "string"], + + ["decorator", "@minLength"], + ["punctuation", "("], + ["number", "3"], + ["punctuation", ")"], + + ["decorator", "@maxLength"], + ["punctuation", "("], + ["number", "24"], + ["punctuation", ")"], + + ["decorator", "@description"], + ["punctuation", "("], + ["string", "'Name of the storage account'"], + ["punctuation", ")"], + + ["keyword", "param"], + " storageAccountName ", + ["class-name", "string"], + ["operator", "="], + ["function", "concat"], + ["punctuation", "("], + ["function", "uniqueString"], + ["punctuation", "("], + ["function", "resourceGroup"], + ["punctuation", "("], + ["punctuation", ")"], + ["punctuation", "."], + "id", + ["punctuation", ")"], + ["punctuation", ","], + ["string", "'sa'"], + ["punctuation", ")"] ] ---------------------------------------------------- diff --git a/tests/languages/bicep/function_feature.test b/tests/languages/bicep/function_feature.test index 4fab9203e8..129ef97de7 100644 --- a/tests/languages/bicep/function_feature.test +++ b/tests/languages/bicep/function_feature.test @@ -14,6 +14,9 @@ skip take union +param location string = resourceGroup().location +var hostingPlanName = 'hostingplan${uniqueString(resourceGroup().id)}' + ---------------------------------------------------- [ @@ -31,7 +34,39 @@ union ["function", "range"], ["function", "skip"], ["function", "take"], - ["function", "union"] + ["function", "union"], + + ["keyword", "param"], + " location ", + ["class-name", "string"], + ["operator", "="], + ["function", "resourceGroup"], + ["punctuation", "("], + ["punctuation", ")"], + ["punctuation", "."], + "location\r\n", + + ["keyword", "var"], + " hostingPlanName ", + ["operator", "="], + ["interpolated-string", [ + ["string", "'hostingplan"], + ["interpolation", [ + ["punctuation", "${"], + ["expression", [ + ["function", "uniqueString"], + ["punctuation", "("], + ["function", "resourceGroup"], + ["punctuation", "("], + ["punctuation", ")"], + ["punctuation", "."], + "id", + ["punctuation", ")"] + ]], + ["punctuation", "}"] + ]], + ["string", "'"] + ]] ] ---------------------------------------------------- diff --git a/tests/languages/bicep/keyword_feature.test b/tests/languages/bicep/keyword_feature.test index 738ee5b875..6b800ae281 100644 --- a/tests/languages/bicep/keyword_feature.test +++ b/tests/languages/bicep/keyword_feature.test @@ -31,7 +31,7 @@ null ["punctuation", ")"], ["punctuation", "{"], - "\r\n name", + ["property", "name"], ["operator", ":"], " logAnalyticsWsName\r\n", @@ -43,14 +43,15 @@ null ["operator", "="], ["punctuation", "{"], - "\r\n name", + ["property", "name"], ["operator", ":"], ["string", "'cosmosDbDeploy'"], ["punctuation", "}"], ["keyword", "param"], - " env string\r\n", + " env ", + ["class-name", "string"], ["keyword", "var"], " oneNumber ", @@ -58,7 +59,8 @@ null ["number", "123"], ["keyword", "output"], - " databaseName string ", + " databaseName ", + ["class-name", "string"], ["operator", "="], " cosmosdbDatabaseName\r\n", @@ -69,7 +71,7 @@ null ["operator", ":"], ["punctuation", "{"], - "\r\n\tipAddressOrRange", + ["property", "ipAddressOrRange"], ["operator", ":"], " item\r\n", diff --git a/tests/languages/bicep/string_feature.test b/tests/languages/bicep/string_feature.test index b9a6f9861d..7d69ba79e1 100644 --- a/tests/languages/bicep/string_feature.test +++ b/tests/languages/bicep/string_feature.test @@ -1,11 +1,71 @@ +'' +'hello!' +'what\'s up?' +'steve' +'hello ${name}!' +'😁\u{1F642}' 'Microsoft.Web/sites/config@2020-12-01' 'https://${frontDoorName}.azurefd.net/.auth/login/aad/callback' +'''hello!''' +var myVar2 = ''' +hello!''' +''' +hello! +''' +''' + this + is + indented +''' + +''' +comments // are included +/* because everything is read as-is */ +''' + +'''interpolation +is ${blocked}''' + ---------------------------------------------------- [ + ["string", "''"], + ["string", "'hello!'"], + ["string", "'what\\'s up?'"], + ["string", "'steve'"], + ["interpolated-string", [ + ["string", "'hello "], + ["interpolation", [ + ["punctuation", "${"], + ["expression", ["name"]], + ["punctuation", "}"] + ]], + ["string", "!'"] + ]], + ["string", "'😁\\u{1F642}'"], ["string", "'Microsoft.Web/sites/config@2020-12-01'"], - ["string", "'https://${frontDoorName}.azurefd.net/.auth/login/aad/callback'"] + ["interpolated-string", [ + ["string", "'https://"], + ["interpolation", [ + ["punctuation", "${"], + ["expression", ["frontDoorName"]], + ["punctuation", "}"] + ]], + ["string", ".azurefd.net/.auth/login/aad/callback'"] + ]], + + ["string", "'''hello!'''"], + ["keyword", "var"], + " myVar2 ", + ["operator", "="], + ["string", "'''\r\nhello!'''"], + ["string", "'''\r\nhello!\r\n'''"], + ["string", "'''\r\n this\r\n is\r\n indented\r\n'''"], + + ["string", "'''\r\ncomments // are included\r\n/* because everything is read as-is */\r\n'''"], + + ["string", "'''interpolation\r\nis ${blocked}'''"] ] ---------------------------------------------------- diff --git a/tests/languages/bicep/var_feature.test b/tests/languages/bicep/var_feature.test index 481a9ac811..87c0a888e2 100644 --- a/tests/languages/bicep/var_feature.test +++ b/tests/languages/bicep/var_feature.test @@ -16,7 +16,7 @@ var oneObject = { ["number", "123"], ["punctuation", "]"], ["keyword", "var"], " oneObject ", ["operator", "="], ["punctuation", "{"], - "\r\n\tabc", ["operator", ":"], ["number", "123"], + ["property", "abc"], ["operator", ":"], ["number", "123"], ["punctuation", "}"] ] From c53769b0cf42ba763536c89fccd2f5495d2975b4 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Thu, 5 Aug 2021 21:52:05 +0200 Subject: [PATCH 2/4] Moved comment --- components/prism-bicep.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/prism-bicep.js b/components/prism-bicep.js index 6cf0b6c33a..a2cc88b8c6 100644 --- a/components/prism-bicep.js +++ b/components/prism-bicep.js @@ -66,9 +66,9 @@ Prism.languages.bicep = { 'keyword': /\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/, 'decorator': /@\w+\b/, - // https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-array 'function': [ /\b[a-z_]\w*(?=[ \t]*\()/i, + // https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-array /\b(?:array|concat|contains|createArray|empty|first|intersection|last|length|max|min|range|skip|take|union)(?:\$|\b)/ ], From e66e7e44c58793ff0e8f08495ad6beb1863a6ee8 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Thu, 5 Aug 2021 23:01:24 +0200 Subject: [PATCH 3/4] Renamed `class-name` and simplified `function` --- components/prism-bicep.js | 11 ++-- components/prism-bicep.min.js | 2 +- ...ame_feature.test => datatype_feature.test} | 14 ++--- tests/languages/bicep/decorator_feature.test | 6 +- tests/languages/bicep/function_feature.test | 56 ++++++++----------- tests/languages/bicep/keyword_feature.test | 4 +- 6 files changed, 39 insertions(+), 54 deletions(-) rename tests/languages/bicep/{class-name_feature.test => datatype_feature.test} (67%) diff --git a/components/prism-bicep.js b/components/prism-bicep.js index a2cc88b8c6..a88e60fa2f 100644 --- a/components/prism-bicep.js +++ b/components/prism-bicep.js @@ -56,9 +56,10 @@ Prism.languages.bicep = { } }, - 'class-name': { + 'datatype': { pattern: /(\b(?:output|param)\b[ \t]+\w+[ \t]+)\w+\b/, - lookbehind: true + lookbehind: true, + alias: 'class-name' }, 'boolean': /\b(?:true|false)\b/, @@ -66,11 +67,7 @@ Prism.languages.bicep = { 'keyword': /\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/, 'decorator': /@\w+\b/, - 'function': [ - /\b[a-z_]\w*(?=[ \t]*\()/i, - // https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-array - /\b(?:array|concat|contains|createArray|empty|first|intersection|last|length|max|min|range|skip|take|union)(?:\$|\b)/ - ], + 'function': /\b[a-z_]\w*(?=[ \t]*\()/i, 'number': /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i, 'operator': /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/, diff --git a/components/prism-bicep.min.js b/components/prism-bicep.min.js index 87dab82220..4d3fc497ab 100644 --- a/components/prism-bicep.min.js +++ b/components/prism-bicep.min.js @@ -1 +1 @@ -Prism.languages.bicep={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],property:[{pattern:/([\r\n][ \t]*)[a-z_]\w*(?=[ \t]*:)/i,lookbehind:!0},{pattern:/([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/i,lookbehind:!0,greedy:!0}],string:[{pattern:/'''[^'][\s\S]*?'''/,greedy:!0},{pattern:/(^|[^\\'])'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0}],"interpolated-string":{pattern:/(^|[^\\'])'(?:\\.|\$(?:(?!\{)|\{[^{}\r\n]*\})|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/\$\{[^{}\r\n]*\}/,inside:{expression:{pattern:/(^\$\{)[\s\S]+(?=\}$)/,lookbehind:!0},punctuation:/^\$\{|\}$/}},string:/[\s\S]+/}},"class-name":{pattern:/(\b(?:output|param)\b[ \t]+\w+[ \t]+)\w+\b/,lookbehind:!0},boolean:/\b(?:true|false)\b/,keyword:/\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/,decorator:/@\w+\b/,function:[/\b[a-z_]\w*(?=[ \t]*\()/i,/\b(?:array|concat|contains|createArray|empty|first|intersection|last|length|max|min|range|skip|take|union)(?:\$|\b)/],number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,punctuation:/[{}[\];(),.:]/},Prism.languages.bicep["interpolated-string"].inside.interpolation.inside.expression.inside=Prism.languages.bicep; \ No newline at end of file +Prism.languages.bicep={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],property:[{pattern:/([\r\n][ \t]*)[a-z_]\w*(?=[ \t]*:)/i,lookbehind:!0},{pattern:/([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/i,lookbehind:!0,greedy:!0}],string:[{pattern:/'''[^'][\s\S]*?'''/,greedy:!0},{pattern:/(^|[^\\'])'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0}],"interpolated-string":{pattern:/(^|[^\\'])'(?:\\.|\$(?:(?!\{)|\{[^{}\r\n]*\})|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/\$\{[^{}\r\n]*\}/,inside:{expression:{pattern:/(^\$\{)[\s\S]+(?=\}$)/,lookbehind:!0},punctuation:/^\$\{|\}$/}},string:/[\s\S]+/}},datatype:{pattern:/(\b(?:output|param)\b[ \t]+\w+[ \t]+)\w+\b/,lookbehind:!0,alias:"class-name"},boolean:/\b(?:true|false)\b/,keyword:/\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/,decorator:/@\w+\b/,function:/\b[a-z_]\w*(?=[ \t]*\()/i,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,punctuation:/[{}[\];(),.:]/},Prism.languages.bicep["interpolated-string"].inside.interpolation.inside.expression.inside=Prism.languages.bicep; \ No newline at end of file diff --git a/tests/languages/bicep/class-name_feature.test b/tests/languages/bicep/datatype_feature.test similarity index 67% rename from tests/languages/bicep/class-name_feature.test rename to tests/languages/bicep/datatype_feature.test index c3fe386da5..882430f6fd 100644 --- a/tests/languages/bicep/class-name_feature.test +++ b/tests/languages/bicep/datatype_feature.test @@ -12,21 +12,21 @@ output myLoopyOutput array = [for myItem in myArray: { ---------------------------------------------------- [ - ["keyword", "param"], " myString ", ["class-name", "string"], - ["keyword", "param"], " myInt ", ["class-name", "int"], - ["keyword", "param"], " myBool ", ["class-name", "bool"], - ["keyword", "param"], " myObject ", ["class-name", "object"], - ["keyword", "param"], " myArray ", ["class-name", "array"], + ["keyword", "param"], " myString ", ["datatype", "string"], + ["keyword", "param"], " myInt ", ["datatype", "int"], + ["keyword", "param"], " myBool ", ["datatype", "bool"], + ["keyword", "param"], " myObject ", ["datatype", "object"], + ["keyword", "param"], " myArray ", ["datatype", "array"], ["keyword", "output"], " myHardcodedOutput ", - ["class-name", "int"], + ["datatype", "int"], ["operator", "="], ["number", "42"], ["keyword", "output"], " myLoopyOutput ", - ["class-name", "array"], + ["datatype", "array"], ["operator", "="], ["punctuation", "["], ["keyword", "for"], diff --git a/tests/languages/bicep/decorator_feature.test b/tests/languages/bicep/decorator_feature.test index 72577f5cb7..36d29bc222 100644 --- a/tests/languages/bicep/decorator_feature.test +++ b/tests/languages/bicep/decorator_feature.test @@ -15,12 +15,12 @@ param storageAccountName string = concat(uniqueString(resourceGroup().id), 'sa') [ ["decorator", "@secure"], ["punctuation", "("], ["punctuation", ")"], - ["keyword", "param"], " demoPassword ", ["class-name", "string"], + ["keyword", "param"], " demoPassword ", ["datatype", "string"], ["decorator", "@allowed"], ["punctuation", "("], ["punctuation", "["], ["string", "'one'"], ["string", "'two'"], ["punctuation", "]"], ["punctuation", ")"], - ["keyword", "param"], " demoEnum ", ["class-name", "string"], + ["keyword", "param"], " demoEnum ", ["datatype", "string"], ["decorator", "@minLength"], ["punctuation", "("], @@ -39,7 +39,7 @@ param storageAccountName string = concat(uniqueString(resourceGroup().id), 'sa') ["keyword", "param"], " storageAccountName ", - ["class-name", "string"], + ["datatype", "string"], ["operator", "="], ["function", "concat"], ["punctuation", "("], diff --git a/tests/languages/bicep/function_feature.test b/tests/languages/bicep/function_feature.test index 129ef97de7..91b75bf547 100644 --- a/tests/languages/bicep/function_feature.test +++ b/tests/languages/bicep/function_feature.test @@ -1,44 +1,15 @@ -array -concat -contains -createArray -empty -first -intersection -last -length -max -min -range -skip -take -union - param location string = resourceGroup().location var hostingPlanName = 'hostingplan${uniqueString(resourceGroup().id)}' +array(parameters('stringToConvert')) +createArray(1, 2, 3) + ---------------------------------------------------- [ - ["function", "array"], - ["function", "concat"], - ["function", "contains"], - ["function", "createArray"], - ["function", "empty"], - ["function", "first"], - ["function", "intersection"], - ["function", "last"], - ["function", "length"], - ["function", "max"], - ["function", "min"], - ["function", "range"], - ["function", "skip"], - ["function", "take"], - ["function", "union"], - ["keyword", "param"], " location ", - ["class-name", "string"], + ["datatype", "string"], ["operator", "="], ["function", "resourceGroup"], ["punctuation", "("], @@ -66,7 +37,24 @@ var hostingPlanName = 'hostingplan${uniqueString(resourceGroup().id)}' ["punctuation", "}"] ]], ["string", "'"] - ]] + ]], + + ["function", "array"], + ["punctuation", "("], + ["function", "parameters"], + ["punctuation", "("], + ["string", "'stringToConvert'"], + ["punctuation", ")"], + ["punctuation", ")"], + + ["function", "createArray"], + ["punctuation", "("], + ["number", "1"], + ["punctuation", ","], + ["number", "2"], + ["punctuation", ","], + ["number", "3"], + ["punctuation", ")"] ] ---------------------------------------------------- diff --git a/tests/languages/bicep/keyword_feature.test b/tests/languages/bicep/keyword_feature.test index 6b800ae281..9a548ae875 100644 --- a/tests/languages/bicep/keyword_feature.test +++ b/tests/languages/bicep/keyword_feature.test @@ -51,7 +51,7 @@ null ["keyword", "param"], " env ", - ["class-name", "string"], + ["datatype", "string"], ["keyword", "var"], " oneNumber ", @@ -60,7 +60,7 @@ null ["keyword", "output"], " databaseName ", - ["class-name", "string"], + ["datatype", "string"], ["operator", "="], " cosmosdbDatabaseName\r\n", From 18ff75fdf4124329cc8541d18b9e5b6808a6586f Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Thu, 5 Aug 2021 23:05:16 +0200 Subject: [PATCH 4/4] Removed useless i flag --- components/prism-bicep.js | 2 +- components/prism-bicep.min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/prism-bicep.js b/components/prism-bicep.js index a88e60fa2f..36317a46ea 100644 --- a/components/prism-bicep.js +++ b/components/prism-bicep.js @@ -21,7 +21,7 @@ Prism.languages.bicep = { lookbehind: true }, { - pattern: /([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/i, + pattern: /([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/, lookbehind: true, greedy: true } diff --git a/components/prism-bicep.min.js b/components/prism-bicep.min.js index 4d3fc497ab..7be82b9a97 100644 --- a/components/prism-bicep.min.js +++ b/components/prism-bicep.min.js @@ -1 +1 @@ -Prism.languages.bicep={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],property:[{pattern:/([\r\n][ \t]*)[a-z_]\w*(?=[ \t]*:)/i,lookbehind:!0},{pattern:/([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/i,lookbehind:!0,greedy:!0}],string:[{pattern:/'''[^'][\s\S]*?'''/,greedy:!0},{pattern:/(^|[^\\'])'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0}],"interpolated-string":{pattern:/(^|[^\\'])'(?:\\.|\$(?:(?!\{)|\{[^{}\r\n]*\})|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/\$\{[^{}\r\n]*\}/,inside:{expression:{pattern:/(^\$\{)[\s\S]+(?=\}$)/,lookbehind:!0},punctuation:/^\$\{|\}$/}},string:/[\s\S]+/}},datatype:{pattern:/(\b(?:output|param)\b[ \t]+\w+[ \t]+)\w+\b/,lookbehind:!0,alias:"class-name"},boolean:/\b(?:true|false)\b/,keyword:/\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/,decorator:/@\w+\b/,function:/\b[a-z_]\w*(?=[ \t]*\()/i,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,punctuation:/[{}[\];(),.:]/},Prism.languages.bicep["interpolated-string"].inside.interpolation.inside.expression.inside=Prism.languages.bicep; \ No newline at end of file +Prism.languages.bicep={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],property:[{pattern:/([\r\n][ \t]*)[a-z_]\w*(?=[ \t]*:)/i,lookbehind:!0},{pattern:/([\r\n][ \t]*)'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'(?=[ \t]*:)/,lookbehind:!0,greedy:!0}],string:[{pattern:/'''[^'][\s\S]*?'''/,greedy:!0},{pattern:/(^|[^\\'])'(?:\\.|\$(?!\{)|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0}],"interpolated-string":{pattern:/(^|[^\\'])'(?:\\.|\$(?:(?!\{)|\{[^{}\r\n]*\})|[^'\\\r\n$])*'/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/\$\{[^{}\r\n]*\}/,inside:{expression:{pattern:/(^\$\{)[\s\S]+(?=\}$)/,lookbehind:!0},punctuation:/^\$\{|\}$/}},string:/[\s\S]+/}},datatype:{pattern:/(\b(?:output|param)\b[ \t]+\w+[ \t]+)\w+\b/,lookbehind:!0,alias:"class-name"},boolean:/\b(?:true|false)\b/,keyword:/\b(?:targetScope|resource|module|param|var|output|for|in|if|existing|null)\b/,decorator:/@\w+\b/,function:/\b[a-z_]\w*(?=[ \t]*\()/i,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,punctuation:/[{}[\];(),.:]/},Prism.languages.bicep["interpolated-string"].inside.interpolation.inside.expression.inside=Prism.languages.bicep; \ No newline at end of file