From 6954ddde73d24174a5540391050267b79204fbfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Segersv=C3=A4rd?= <oseg@google.com> Date: Tue, 11 Oct 2016 17:38:17 +0200 Subject: [PATCH] [javascript mode] Fix tokenization for class expressions --- mode/javascript/javascript.js | 6 ++++++ mode/javascript/test.js | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js index 8ff38b81b..a71774589 100644 --- a/mode/javascript/javascript.js +++ b/mode/javascript/javascript.js @@ -395,6 +395,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) { var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); if (type == "function") return cont(functiondef, maybeop); + if (type == "class") return cont(pushlex("form"), classExpression, poplex); if (type == "keyword c" || type == "async") return cont(noComma ? maybeexpressionNoComma : maybeexpression); if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); @@ -619,6 +620,11 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) { if (type == "spread") return cont(funarg); return pass(pattern, maybetype, maybeAssign); } + function classExpression(type, value) { + // Class expressions may have an optional name. + if (type == "variable") return className(type, value); + return classNameAfter(type, value); + } function className(type, value) { if (type == "variable") {register(value); return cont(classNameAfter);} } diff --git a/mode/javascript/test.js b/mode/javascript/test.js index 91c8b7434..41765e75d 100644 --- a/mode/javascript/test.js +++ b/mode/javascript/test.js @@ -38,6 +38,16 @@ " }", "}"); + MT("anonymous_class_expression", + "[keyword const] [def Adder] [operator =] [keyword class] [keyword extends] [variable Arithmetic] {", + " [property add]([def a], [def b]) {}", + "};"); + + MT("named_class_expression", + "[keyword const] [def Subber] [operator =] [keyword class] [def Subtract] {", + " [property sub]([def a], [def b]) {}", + "};"); + MT("import", "[keyword function] [def foo]() {", " [keyword import] [def $] [keyword from] [string 'jquery'];", -- GitLab