From 66ee0bec26e2e6ed241f8b6957744baf1a316d61 Mon Sep 17 00:00:00 2001 From: Luca Ramundo <0xc14m1z@gmail.com> Date: Sun, 5 Jan 2020 23:42:39 +0000 Subject: [PATCH] JSX: Improved spread operator in tag attributes --- components/prism-jsx.js | 4 +- tests/languages/jsx/spread_in_tags.test | 51 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 tests/languages/jsx/spread_in_tags.test diff --git a/components/prism-jsx.js b/components/prism-jsx.js index e3d29c5d2b..8be5c6da1b 100644 --- a/components/prism-jsx.js +++ b/components/prism-jsx.js @@ -3,7 +3,7 @@ var javascript = Prism.util.clone(Prism.languages.javascript); Prism.languages.jsx = Prism.languages.extend('markup', javascript); -Prism.languages.jsx.tag.pattern= /<\/?(?:[\w.:-]+\s*(?:\s+(?:[\w.:$-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s{'">=]+|\{(?:\{(?:\{[^}]*\}|[^{}])*\}|[^{}])+\}))?|\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}))*\s*\/?)?>/i; +Prism.languages.jsx.tag.pattern= /<\/?(?:[\w.:-]+\s*(?:\s+(?:[\w.:$-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s{'">=]+|\{(?:\{(?:\{[^}]*\}|[^{}])*\}|[^{}])+\}))?|\{\s*\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}))*\s*\/?)?>/i; Prism.languages.jsx.tag.inside['tag'].pattern = /^<\/?[^\s>\/]*/i; Prism.languages.jsx.tag.inside['attr-value'].pattern = /=(?!\{)(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">]+)/i; @@ -11,7 +11,7 @@ Prism.languages.jsx.tag.inside['tag'].inside['class-name'] = /^[A-Z]\w*(?:\.[A-Z Prism.languages.insertBefore('inside', 'attr-name', { 'spread': { - pattern: /\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}/, + pattern: /\{\s*\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}/, inside: { 'punctuation': /\.{3}|[{}.]/, 'attr-value': /\w+/ diff --git a/tests/languages/jsx/spread_in_tags.test b/tests/languages/jsx/spread_in_tags.test new file mode 100644 index 0000000000..d3b1e7dd6c --- /dev/null +++ b/tests/languages/jsx/spread_in_tags.test @@ -0,0 +1,51 @@ +
+
+ +---------------------------------------------------- + +[ + ["tag", [ + ["tag", [ + ["punctuation", "<"], + "div" + ]], + ["spread", [ + ["punctuation", "{"], + ["punctuation", "..."], + ["attr-value", "foo"], + ["punctuation", "}"] + ]], + ["punctuation", ">"] + ]], + ["tag", [ + ["tag", [ + ["punctuation", ""] + ]], + ["tag", [ + ["tag", [ + ["punctuation", "<"], + "div" + ]], + ["spread", [ + ["punctuation", "{"], + ["punctuation", "..."], + ["attr-value", "foo"], + ["punctuation", "}"] + ]], + ["punctuation", ">"] + ]], + ["tag", [ + ["tag", [ + ["punctuation", ""] + ]] +] + +---------------------------------------------------- + +Allow spaces in spread operator brackets in JSX tags.