From 490653454aa985feb60918eeddde823c550e416e Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke <marijn@haverbeke.nl> Date: Mon, 20 Nov 2017 10:36:30 +0100 Subject: [PATCH] [javascript mode] Resolve ambiguity for type parameters vs less-than See https://github.com/Microsoft/TypeScript/blob/6c4c10c7cf294dc71f943314e29a7dd1b6e88c6a/doc/spec.md#4.15.3 Issue #5090 Issue #5048 --- mode/javascript/javascript.js | 3 ++- mode/javascript/test.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js index e43543dd3..0dcd8af39 100644 --- a/mode/javascript/javascript.js +++ b/mode/javascript/javascript.js @@ -438,7 +438,8 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) { if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); if (type == "operator") { if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); - if (isTS && value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, maybeoperatorNoComma); + if (isTS && value == "<" && cx.stream.match(/^([^>]|<.*?>)*>\s*\(/, false)) + return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); if (value == "?") return cont(expression, expect(":"), expr); return cont(expr); } diff --git a/mode/javascript/test.js b/mode/javascript/test.js index 972a34565..2437edcca 100644 --- a/mode/javascript/test.js +++ b/mode/javascript/test.js @@ -372,7 +372,8 @@ "({[property a]: [def p] [operator =>] [variable-2 p]})") TS("generic in function call", - "[keyword this].[property a][operator <][type Type][operator >]([variable foo]);") + "[keyword this].[property a][operator <][type Type][operator >]([variable foo]);", + "[keyword this].[property a][operator <][variable Type][operator >][variable foo];") var jsonld_mode = CodeMirror.getMode( {indentUnit: 2}, -- GitLab