From e43732560344b44c67869c9262f587b999f75372 Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Fri, 10 Dec 2021 14:43:25 +0100 Subject: [PATCH] V: Use standard `char` token (#3260) --- components/prism-v.js | 51 ++++++++++++++------------- components/prism-v.min.js | 2 +- tests/languages/v/char_feature.test | 11 ++++++ tests/languages/v/string_feature.test | 10 ++---- 4 files changed, 40 insertions(+), 34 deletions(-) create mode 100644 tests/languages/v/char_feature.test diff --git a/components/prism-v.js b/components/prism-v.js index 9541123a3d..6fc41b8fae 100644 --- a/components/prism-v.js +++ b/components/prism-v.js @@ -5,34 +5,28 @@ }; Prism.languages.v = Prism.languages.extend('clike', { - 'string': [ - { - pattern: /`(?:\\`|\\?[^`]{1,2})`/, // using {1,2} instead of `u` flag for compatibility - alias: 'rune' - }, - { - pattern: /r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, - alias: 'quoted-string', - greedy: true, - inside: { - 'interpolation': { - pattern: /((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/, - lookbehind: true, - inside: { - 'interpolation-variable': { - pattern: /^\$\w[\s\S]*$/, - alias: 'variable' - }, - 'interpolation-punctuation': { - pattern: /^\$\{|\}$/, - alias: 'punctuation' - }, - 'interpolation-expression': interpolationExpr - } + 'string': { + pattern: /r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + alias: 'quoted-string', + greedy: true, + inside: { + 'interpolation': { + pattern: /((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/, + lookbehind: true, + inside: { + 'interpolation-variable': { + pattern: /^\$\w[\s\S]*$/, + alias: 'variable' + }, + 'interpolation-punctuation': { + pattern: /^\$\{|\}$/, + alias: 'punctuation' + }, + 'interpolation-expression': interpolationExpr } } } - ], + }, 'class-name': { pattern: /(\b(?:enum|interface|struct|type)\s+)(?:C\.)?\w+/, lookbehind: true @@ -45,6 +39,13 @@ interpolationExpr.inside = Prism.languages.v; + Prism.languages.insertBefore('v', 'string', { + 'char': { + pattern: /`(?:\\`|\\?[^`]{1,2})`/, // using {1,2} instead of `u` flag for compatibility + alias: 'rune' + } + }); + Prism.languages.insertBefore('v', 'operator', { 'attribute': { pattern: /(^[\t ]*)\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\]/m, diff --git a/components/prism-v.min.js b/components/prism-v.min.js index 736e32a01d..db0c0f5add 100644 --- a/components/prism-v.min.js +++ b/components/prism-v.min.js @@ -1 +1 @@ -!function(e){var n={pattern:/[\s\S]+/,inside:null};e.languages.v=e.languages.extend("clike",{string:[{pattern:/`(?:\\`|\\?[^`]{1,2})`/,alias:"rune"},{pattern:/r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,alias:"quoted-string",greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/,lookbehind:!0,inside:{"interpolation-variable":{pattern:/^\$\w[\s\S]*$/,alias:"variable"},"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},"interpolation-expression":n}}}}],"class-name":{pattern:/(\b(?:enum|interface|struct|type)\s+)(?:C\.)?\w+/,lookbehind:!0},keyword:/(?:\b(?:__global|as|asm|assert|atomic|break|chan|const|continue|defer|else|embed|enum|fn|for|go(?:to)?|if|import|in|interface|is|lock|match|module|mut|none|or|pub|return|rlock|select|shared|sizeof|static|struct|type(?:of)?|union|unsafe)|\$(?:else|for|if)|#(?:flag|include))\b/,number:/\b(?:0x[a-f\d]+(?:_[a-f\d]+)*|0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?)\b/i,operator:/~|\?|[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\.?/,builtin:/\b(?:any(?:_float|_int)?|bool|byte(?:ptr)?|charptr|f(?:32|64)|i(?:8|16|64|128|nt)|rune|size_t|string|u(?:16|32|64|128)|voidptr)\b/}),n.inside=e.languages.v,e.languages.insertBefore("v","operator",{attribute:{pattern:/(^[\t ]*)\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\]/m,lookbehind:!0,alias:"annotation",inside:{punctuation:/[\[\]]/,keyword:/\w+/}},generic:{pattern:/<\w+>(?=\s*[\)\{])/,inside:{punctuation:/[<>]/,"class-name":/\w+/}}}),e.languages.insertBefore("v","function",{"generic-function":{pattern:/\b\w+\s*<\w+>(?=\()/,inside:{function:/^\w+/,generic:{pattern:/<\w+>/,inside:e.languages.v.generic.inside}}}})}(Prism); \ No newline at end of file +!function(e){var n={pattern:/[\s\S]+/,inside:null};e.languages.v=e.languages.extend("clike",{string:{pattern:/r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,alias:"quoted-string",greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/,lookbehind:!0,inside:{"interpolation-variable":{pattern:/^\$\w[\s\S]*$/,alias:"variable"},"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},"interpolation-expression":n}}}},"class-name":{pattern:/(\b(?:enum|interface|struct|type)\s+)(?:C\.)?\w+/,lookbehind:!0},keyword:/(?:\b(?:__global|as|asm|assert|atomic|break|chan|const|continue|defer|else|embed|enum|fn|for|go(?:to)?|if|import|in|interface|is|lock|match|module|mut|none|or|pub|return|rlock|select|shared|sizeof|static|struct|type(?:of)?|union|unsafe)|\$(?:else|for|if)|#(?:flag|include))\b/,number:/\b(?:0x[a-f\d]+(?:_[a-f\d]+)*|0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?)\b/i,operator:/~|\?|[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\.?/,builtin:/\b(?:any(?:_float|_int)?|bool|byte(?:ptr)?|charptr|f(?:32|64)|i(?:8|16|64|128|nt)|rune|size_t|string|u(?:16|32|64|128)|voidptr)\b/}),n.inside=e.languages.v,e.languages.insertBefore("v","string",{char:{pattern:/`(?:\\`|\\?[^`]{1,2})`/,alias:"rune"}}),e.languages.insertBefore("v","operator",{attribute:{pattern:/(^[\t ]*)\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\]/m,lookbehind:!0,alias:"annotation",inside:{punctuation:/[\[\]]/,keyword:/\w+/}},generic:{pattern:/<\w+>(?=\s*[\)\{])/,inside:{punctuation:/[<>]/,"class-name":/\w+/}}}),e.languages.insertBefore("v","function",{"generic-function":{pattern:/\b\w+\s*<\w+>(?=\()/,inside:{function:/^\w+/,generic:{pattern:/<\w+>/,inside:e.languages.v.generic.inside}}}})}(Prism); \ No newline at end of file diff --git a/tests/languages/v/char_feature.test b/tests/languages/v/char_feature.test new file mode 100644 index 0000000000..aca17552bd --- /dev/null +++ b/tests/languages/v/char_feature.test @@ -0,0 +1,11 @@ +`🚀` +`\`` +`Not a Rune` + +---------------------------------------------------- + +[ + ["char", "`🚀`"], + ["char", "`\\``"], + "\r\n`Not a Rune`" +] diff --git a/tests/languages/v/string_feature.test b/tests/languages/v/string_feature.test index 3040a7fc0d..b3d52c2036 100644 --- a/tests/languages/v/string_feature.test +++ b/tests/languages/v/string_feature.test @@ -3,9 +3,6 @@ 'age = $user.age' '[${int(x):-10}]' r'hello\nworld' -`🚀` -`\`` -`Not a Rune` ---------------------------------------------------- @@ -36,12 +33,9 @@ r'hello\nworld' ]], "]'" ]], - ["string", ["r'hello\\nworld'"]], - ["string", "`🚀`"], - ["string", "`\\``"], - "\r\n`Not a Rune`" + ["string", ["r'hello\\nworld'"]] ] ---------------------------------------------------- -Check for strings and string interpolation \ No newline at end of file +Check for strings and string interpolation