From 974b698fac730685ec51761338786e6801ae366c Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke <marijn@haverbeke.nl>
Date: Tue, 8 Aug 2017 23:07:27 +0200
Subject: [PATCH] [javascript mode] Support typescript-style type params to new

Closes #4887
---
 mode/javascript/javascript.js | 4 ++++
 mode/javascript/test.js       | 3 +++
 2 files changed, 7 insertions(+)

diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js
index d77862b1d..50d33dde3 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 8fd13aee4..2632fd1df 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}
-- 
GitLab