From 8e2f1e71bfc6a4d581956e8d08200359a0b118e1 Mon Sep 17 00:00:00 2001 From: Novus Nota <68142933+novusnota@users.noreply.github.com> Date: Thu, 15 Feb 2024 23:14:32 +0100 Subject: [PATCH] feat: Updates towards Tact version 1.2.0 * Underscores for numeric separators * Minor fixes of literals --- components/prism-tact.js | 17 ++++++++++------- components/prism-tact.min.js | 2 +- tests/languages/tact/complete.test | 22 ++++++++++++++-------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/components/prism-tact.js b/components/prism-tact.js index b5ea8f591..a20f9f79c 100644 --- a/components/prism-tact.js +++ b/components/prism-tact.js @@ -61,17 +61,20 @@ 'number': [ { // hexadecimal, case-insensitive /i - pattern: /\b0x[0-9a-f]+\b/i, + pattern: /\b0x[0-9a-f](?:_?[0-9a-f])*\b/i, }, { // octal, case-insensitive /i - pattern: /\b0o[0-7]+\b/i, - }, - { // decimal integers - pattern: /\b\d+\b/, + pattern: /\b0o[0-7](?:_?[0-7])*\b/i, }, { // binary, case-insensitive /i - pattern: /\b0b[01]+\b/i, - } + pattern: /\b0b[01](?:_?[01])*\b/i, + }, + { // decimal integers, starting with 0 + pattern: /\b0\d*\b/, + }, + { // other decimal integers + pattern: /\b[1-9](?:_?\d)*\b/, + }, ], 'string': undefined, diff --git a/components/prism-tact.min.js b/components/prism-tact.min.js index 19d33b992..e4b41c7cc 100644 --- a/components/prism-tact.min.js +++ b/components/prism-tact.min.js @@ -1 +1 @@ -!function(t){t.languages.tact={keyword:[{pattern:/\b(?:abstract|as|const|contract(?!:)|do|else|extend|extends|fun|get|if|import|initOf|inline|let|message(?!:)|mutates|native|override|primitive|public|repeat|return|self|struct(?!:)|trait(?!:)|until|virtual|while|with)\b/},{pattern:/(\bas\s+)\w+/,lookbehind:!0,greedy:!0},{pattern:/\b(?:bounced|external|init|receive)\b/}],builtin:{pattern:/\b(?:Address|Bool|Builder|Cell|Int|Slice|String|StringBuilder)\b/},constant:[{pattern:/\bnull\b/},{pattern:/\b[A-Z][A-Z0-9_]*\b/}],"class-name":{pattern:/\b[A-Z]\w*\b/},attribute:[{pattern:/@name/,inside:{function:/.+/}},{pattern:/@interface/,inside:{function:/.+/}}],function:{pattern:/\b\w+(?=\()/},boolean:{pattern:/\b(?:false|true)\b/},number:[{pattern:/\b0x[0-9a-f]+\b/i},{pattern:/\b\d+\b/}],string:void 0,punctuation:{pattern:/[{}[\]();,.:?]/},comment:[{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0}],operator:{pattern:/![!=]?|\*|\/|%|-|\+|==?|[<>]=|<>?|\|\|?|&&?/}},t.languages.insertBefore("tact","string",{"string-literal":{pattern:/(?:(")(?:\\.|(?!\1)[^\\\r\n])*\1(?!\1))/,greedy:!0,inside:{string:{pattern:/[\s\S]+/}}}}),t.languages.insertBefore("tact","keyword",{generics:{pattern:/(?:\b(?:bounced|map)\b<[^\\\r\n]*>)/,greedy:!0,inside:{builtin:[t.languages.tact.builtin,{pattern:/\b(?:bounced(?=<)|map(?=<))\b/}],"class-name":t.languages.tact["class-name"],punctuation:{pattern:/[<>(),.?]/},keyword:[{pattern:/\bas\b/},{pattern:/(\bas\s+)\w+/,lookbehind:!0,greedy:!0}]}}})}(Prism); \ No newline at end of file +!function(t){t.languages.tact={keyword:[{pattern:/\b(?:abstract|as|const|contract(?!:)|do|else|extend|extends|fun|get|if|import|initOf|inline|let|message(?!:)|mutates|native|override|primitive|public|repeat|return|self|struct(?!:)|trait(?!:)|until|virtual|while|with)\b/},{pattern:/(\bas\s+)\w+/,lookbehind:!0,greedy:!0},{pattern:/\b(?:bounced|external|init|receive)\b/}],builtin:{pattern:/\b(?:Address|Bool|Builder|Cell|Int|Slice|String|StringBuilder)\b/},constant:[{pattern:/\bnull\b/},{pattern:/\b[A-Z][A-Z0-9_]*\b/}],"class-name":{pattern:/\b[A-Z]\w*\b/},attribute:[{pattern:/@name/,inside:{function:/.+/}},{pattern:/@interface/,inside:{function:/.+/}}],function:{pattern:/\b\w+(?=\()/},boolean:{pattern:/\b(?:false|true)\b/},number:[{pattern:/\b0x[0-9a-f](?:_?[0-9a-f])*\b/i},{pattern:/\b0o[0-7](?:_?[0-7])*\b/i},{pattern:/\b0b[01](?:_?[01])*\b/i},{pattern:/\b0\d*\b/},{pattern:/\b[1-9](?:_?\d)*\b/}],string:void 0,punctuation:{pattern:/[{}[\]();,.:?]/},comment:[{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0}],operator:{pattern:/![!=]?|[+\-*/%=]=?|[<>]=|<>?|\|\|?|&&?/}},t.languages.insertBefore("tact","string",{"string-literal":{pattern:/(?:(")(?:\\.|(?!\1)[^\\\r\n])*\1(?!\1))/,greedy:!0,inside:{string:{pattern:/[\s\S]+/}}}}),t.languages.insertBefore("tact","keyword",{generics:{pattern:/(?:\b(?:bounced|map)\b<[^\\\r\n]*>)/,greedy:!0,inside:{builtin:[t.languages.tact.builtin,{pattern:/\b(?:bounced(?=<)|map(?=<))\b/}],"class-name":t.languages.tact["class-name"],punctuation:{pattern:/[<>(),.?]/},keyword:[{pattern:/\bas\b/},{pattern:/(\bas\s+)\w+/,lookbehind:!0,greedy:!0}]}}})}(Prism); \ No newline at end of file diff --git a/tests/languages/tact/complete.test b/tests/languages/tact/complete.test index d6bdc8f8c..a587dcbd6 100644 --- a/tests/languages/tact/complete.test +++ b/tests/languages/tact/complete.test @@ -12,8 +12,8 @@ message(0x1234) MyMessage { } trait MyTrait { + const CONST_VAL: Int = 42 + true ? 0x1 : 0x2; get fun traitState(): Int { - const CONST_VAL: Int = 42; return 0; } } @@ -98,6 +98,19 @@ contract MyContract with MyTrait, Ownable? { ["keyword", "trait"], ["class-name", "MyTrait"], ["punctuation", "{"], + ["keyword", "const"], + ["constant", "CONST_VAL"], + ["punctuation", ":"], + ["builtin", "Int"], + ["operator", "="], + ["number", "42"], + ["operator", "+"], + ["boolean", "true"], + ["punctuation", "?"], + ["number", "0x1"], + ["punctuation", ":"], + ["number", "0x2"], + ["punctuation", ";"], ["keyword", "get"], ["keyword", "fun"], ["function", "traitState"], @@ -106,13 +119,6 @@ contract MyContract with MyTrait, Ownable? { ["punctuation", ":"], ["builtin", "Int"], ["punctuation", "{"], - ["keyword", "const"], - ["constant", "CONST_VAL"], - ["punctuation", ":"], - ["builtin", "Int"], - ["operator", "="], - ["number", "42"], - ["punctuation", ";"], ["keyword", "return"], ["number", "0"], ["punctuation", ";"],