diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js index 8ff38b81bf131e9261654c4ebf47662c5ed13934..a717745897415d1cc465d8c9382dce0a620a00b2 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 91c8b7434ad84c8d9ec18ce415430b5ec4f2f244..41765e75dd103334c7727c68c492b31c711cd85b 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'];",