diff --git a/components/prism-javascript.js b/components/prism-javascript.js index ac175e1932..f215e5eb16 100644 --- a/components/prism-javascript.js +++ b/components/prism-javascript.js @@ -19,16 +19,22 @@ Prism.languages.insertBefore('javascript', 'keyword', { }, 'parameter': [ { - pattern: /(function)(?:\s+[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*(\([^()]*\))/, + pattern: /(function(?:\s+[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)\S[^()]*(?=\s*\))/, lookbehind: true, inside: Prism.languages.javascript }, { - pattern: /(\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)(?=\s*=>)/, + pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/, inside: Prism.languages.javascript }, { - pattern: /\b(?!await|delete|export|for|if|new|return|switch|throw|typeof|while|yield)(?:[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)(\([^()]*\))(?=\s*\{)/, + pattern: /(\()[^()]+(?=\)\s*=>)/, + lookbehind: true, + inside: Prism.languages.javascript + }, + { + pattern: /(\b(?!await|delete|export|for|if|new|return|switch|throw|typeof|while|yield)(?:[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)\S[^()]*(?=\s*\)\s*\{)/, + lookbehind: true, inside: Prism.languages.javascript } ], diff --git a/components/prism-javascript.min.js b/components/prism-javascript.min.js index 2171167ffa..734d150929 100644 --- a/components/prism-javascript.min.js +++ b/components/prism-javascript.min.js @@ -1 +1 @@ -Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,"function":/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^\/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:async(?:(?:\s*(?=\())|\s+))?(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,alias:"function"},parameter:[{pattern:/(function)(?:\s+[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*(\([^()]*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)(?=\s*=>)/,inside:Prism.languages.javascript},{pattern:/\b(?!await|delete|export|for|if|new|return|switch|throw|typeof|while|yield)(?:[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)(\([^()]*\))(?=\s*\{)/,inside:Prism.languages.javascript}],constant:/\b[A-Z][A-Z\d_]*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\${[^}]+}/,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}}}),Prism.languages.javascript["template-string"].inside.interpolation.inside.rest=Prism.languages.javascript,Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript",greedy:!0}}),Prism.languages.js=Prism.languages.javascript; \ No newline at end of file +Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,"function":/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^\/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:async(?:(?:\s*(?=\())|\s+))?(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)\S[^()]*(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/,inside:Prism.languages.javascript},{pattern:/(\()[^()]+(?=\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\b(?!await|delete|export|for|if|new|return|switch|throw|typeof|while|yield)(?:[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)\S[^()]*(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z][A-Z\d_]*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\${[^}]+}/,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}}}),Prism.languages.javascript["template-string"].inside.interpolation.inside.rest=Prism.languages.javascript,Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript",greedy:!0}}),Prism.languages.js=Prism.languages.javascript; \ No newline at end of file diff --git a/prism.js b/prism.js index 893b01961b..0b58a69534 100644 --- a/prism.js +++ b/prism.js @@ -742,16 +742,22 @@ Prism.languages.insertBefore('javascript', 'keyword', { }, 'parameter': [ { - pattern: /(function)(?:\s+[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*(\([^()]*\))/, + pattern: /(function(?:\s+[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)\S[^()]*(?=\s*\))/, lookbehind: true, inside: Prism.languages.javascript }, { - pattern: /(\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)(?=\s*=>)/, + pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/, inside: Prism.languages.javascript }, { - pattern: /\b(?!await|delete|export|for|if|new|return|switch|throw|typeof|while|yield)(?:[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)(\([^()]*\))(?=\s*\{)/, + pattern: /(\()[^()]+(?=\)\s*=>)/, + lookbehind: true, + inside: Prism.languages.javascript + }, + { + pattern: /(\b(?!await|delete|export|for|if|new|return|switch|throw|typeof|while|yield)(?:[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)\S[^()]*(?=\s*\)\s*\{)/, + lookbehind: true, inside: Prism.languages.javascript } ], diff --git a/tests/languages/javascript/class-method_feature.test b/tests/languages/javascript/class-method_feature.test index 01180d4238..a2e3ceaa7e 100644 --- a/tests/languages/javascript/class-method_feature.test +++ b/tests/languages/javascript/class-method_feature.test @@ -11,38 +11,36 @@ class Test { ["class-name", ["Test"]], ["punctuation", "{"], + ["function", "foo"], + ["punctuation", "("], ["parameter", [ - ["function", "foo"], - ["punctuation", "("], "x", ["punctuation", ","], " y ", ["operator", "="], - ["number", "0"], - ["punctuation", ")"] + ["number", "0"] ]], + ["punctuation", ")"], ["punctuation", "{"], ["punctuation", "}"], ["keyword", "async"], + ["function", "bar"], + ["punctuation", "("], ["parameter", [ - ["function", "bar"], - ["punctuation", "("], "x", ["punctuation", ","], " y ", ["operator", "="], - ["number", "0"], - ["punctuation", ")"] + ["number", "0"] ]], + ["punctuation", ")"], ["punctuation", "{"], ["punctuation", "}"], - ["parameter", [ - ["function", "_"], - ["punctuation", "("], - ["punctuation", ")"] - ]], + ["function", "_"], + ["punctuation", "("], + ["punctuation", ")"], ["punctuation", "{"], ["punctuation", "}"], diff --git a/tests/languages/javascript/function-variable_feature.test b/tests/languages/javascript/function-variable_feature.test index 12df6f5b3a..8dbeb0aae8 100644 --- a/tests/languages/javascript/function-variable_feature.test +++ b/tests/languages/javascript/function-variable_feature.test @@ -12,13 +12,13 @@ fooBar = (x, y) => x ["function-variable", "foo"], ["operator", "="], ["keyword", "function"], + ["punctuation", "("], ["parameter", [ - ["punctuation", "("], - " x", + "x", ["punctuation", ","], - " y", - ["punctuation", ")"] + " y" ]], + ["punctuation", ")"], ["punctuation", "{"], ["punctuation", "}"], @@ -26,23 +26,23 @@ fooBar = (x, y) => x ["operator", "="], ["keyword", "async"], ["keyword", "function"], + ["function", "baz"], + ["punctuation", "("], ["parameter", [ - ["function", "baz"], - ["punctuation", "("], - "x ", - ["punctuation", ")"] + "x " ]], + ["punctuation", ")"], ["punctuation", "{"], ["punctuation", "}"], ["function-variable", "baz"], ["operator", "="], ["keyword", "async"], + ["punctuation", "("], ["parameter", [ - ["punctuation", "("], - "x", - ["punctuation", ")"] + "x" ]], + ["punctuation", ")"], ["operator", "=>"], " x\r\n", ["function-variable", "fooBar"], @@ -54,21 +54,19 @@ fooBar = (x, y) => x ["function-variable", "fooBar"], ["operator", "="], + ["punctuation", "("], ["parameter", [ - ["punctuation", "("], "x", ["punctuation", ","], - " y", - ["punctuation", ")"] + " y" ]], + ["punctuation", ")"], ["operator", "=>"], " x\r\n", ["function-variable", "ಠ_ಠ"], ["operator", "="], - ["parameter", [ - ["punctuation", "("], - ["punctuation", ")"] - ]], + ["punctuation", "("], + ["punctuation", ")"], ["operator", "=>"], ["punctuation", "{"], ["punctuation", "}"], @@ -76,15 +74,15 @@ fooBar = (x, y) => x ["function-variable", "Ƞȡ_҇"], ["operator", "="], ["keyword", "async"], + ["punctuation", "("], ["parameter", [ - ["punctuation", "("], "ಠ", ["punctuation", ","], " Ƞ ", ["operator", "="], - ["number", "2"], - ["punctuation", ")"] + ["number", "2"] ]], + ["punctuation", ")"], ["operator", "=>"], ["punctuation", "{"], ["punctuation", "}"] diff --git a/tests/languages/jsx/issue1294.test b/tests/languages/jsx/issue1294.test index a8b6dbe106..4d167f146c 100644 --- a/tests/languages/jsx/issue1294.test +++ b/tests/languages/jsx/issue1294.test @@ -13,7 +13,8 @@ export default () => ( [ ["keyword", "export"], ["keyword", "default"], - ["parameter", [["punctuation", "("], ["punctuation", ")"]]], + ["punctuation", "("], + ["punctuation", ")"], ["operator", "=>"], ["punctuation", "("], ["tag", [ ["tag", [ diff --git a/tests/languages/jsx/issue1335.test b/tests/languages/jsx/issue1335.test index bc5bd6fc16..a420215d08 100644 --- a/tests/languages/jsx/issue1335.test +++ b/tests/languages/jsx/issue1335.test @@ -20,11 +20,11 @@ ["script", [ ["script-punctuation", "="], ["punctuation", "{"], + ["punctuation", "("], ["parameter", [ - ["punctuation", "("], - "e", - ["punctuation", ")"] + "e" ]], + ["punctuation", ")"], ["operator", "=>"], ["keyword", "this"], ["punctuation", "."], diff --git a/tests/languages/jsx/issue1421.test b/tests/languages/jsx/issue1421.test index 43c2f14ea6..e74f14b002 100644 --- a/tests/languages/jsx/issue1421.test +++ b/tests/languages/jsx/issue1421.test @@ -17,10 +17,8 @@ class Columns extends React.Component { ["keyword", "extends"], ["class-name", ["React", ["punctuation", "."], "Component"]], ["punctuation", "{"], - ["parameter", [ - ["function", "render"], - ["punctuation", "("], ["punctuation", ")"] - ]], + ["function", "render"], + ["punctuation", "("], ["punctuation", ")"], ["punctuation", "{"], ["keyword", "return"], ["punctuation", "("], ["tag", [ diff --git a/tests/languages/tsx/tag_feature.test b/tests/languages/tsx/tag_feature.test index 5c2cf8a154..a881ebbc13 100644 --- a/tests/languages/tsx/tag_feature.test +++ b/tests/languages/tsx/tag_feature.test @@ -66,11 +66,9 @@ class Test extends Component { ["keyword", "extends"], ["class-name", ["Component"]], ["punctuation", "{"], - ["parameter", [ - ["function", "render"], - ["punctuation", "("], - ["punctuation", ")"] - ]], + ["function", "render"], + ["punctuation", "("], + ["punctuation", ")"], ["punctuation", "{"], ["keyword","return"], ["tag", [