diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js index d77862b1d5396cd99ef9e913016d90bcbade6eac..50d33dde319cb0e246d2af00d8604ac9f0386053 100644 --- a/mode/javascript/javascript.js +++ b/mode/javascript/javascript.js @@ -468,6 +468,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) { function maybeTarget(noComma) { return function(type) { if (type == ".") return cont(noComma ? targetNoComma : target); + else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma) else return pass(noComma ? expressionNoComma : expression); }; } @@ -588,6 +589,9 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) { if (type == "[") return cont(expect("]"), afterType) if (value == "extends") return cont(typeexpr) } + function maybeTypeArgs(_, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) + } function vardef() { return pass(pattern, maybetype, maybeAssign, vardefCont); } diff --git a/mode/javascript/test.js b/mode/javascript/test.js index 8fd13aee49b471eb7aeff243b82583fb664a125f..2632fd1df5fc56fe4ef0fc3e088d4295a9d67336 100644 --- a/mode/javascript/test.js +++ b/mode/javascript/test.js @@ -343,6 +343,9 @@ "[keyword function] [def x][operator <][type T] [keyword extends] [keyword keyof] [type X][operator >]([def a]: [type T]) {", " [keyword return]") + TS("typescript_new_typeargs", + "[keyword let] [def x] [operator =] [keyword new] [variable Map][operator <][type string], [type Date][operator >]([string-2 `foo${][variable bar][string-2 }`])") + var jsonld_mode = CodeMirror.getMode( {indentUnit: 2}, {name: "javascript", jsonld: true}