Subject: [PATCH 1/2] userdiff: adding typescript pattern

From: "Dhruv Arora via GitGitGadget" <[email-masked]>
Date: Sat, 28 Mar 2026 21:40:03 +0000

From: Dhruv Arora <[email-masked]>

Add builtin userdiff pattern for TypeScript files.
Recognizes function declarations, class definitions,
arrow functions, and method definitions.

Handles common modifiers like export, async, static, etc..

Signed-off-by: Dhruv Arora <[email-masked]>
---
 userdiff.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/userdiff.c b/userdiff.c
index fe710a68bf..086e3fa002 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -337,6 +337,19 @@ PATTERNS("ruby",
 	 "(@|@@|\\$)?[a-zA-Z_][a-zA-Z0-9_]*"
 	 "|[-+0-9.e]+|0[xXbB]?[0-9a-fA-F]+|\\?(\\\\C-)?(\\\\M-)?."
 	 "|//=?|[-+*/<>%&^|=!]=|<<=?|>>=?|===|\\.{1,3}|::|[!=]~"),
+PATTERNS("typescript",
+	/* Starting with optional whitespace */
+	"^[ \t]*"
+	/* Followed by an optional export and/or async keyword */
+	"((export[ \t]+)?(async[ \t]+)?"
+	/* Followed by either a function or class declaration */
+	"((function|class)[ \t]+[a-zA-Z_][a-zA-Z0-9_]*[^{]*)"
+	/* or */
+	"|"
+	/* a variable declaration with const, let, or var */
+	"([ \t]*(const|let|var)[ \t]+[a-zA-Z_][a-zA-Z0-9_]*[ \t]*=))",
+	/* -- */
+	"[a-zA-Z_][a-zA-Z0-9_]*"),
 PATTERNS("rust",
 	 "^[\t ]*((pub(\\([^\\)]+\\))?[\t ]+)?((async|const|unsafe|extern([\t ]+\"[^\"]+\"))[\t ]+)?(struct|enum|union|mod|trait|fn|impl|macro_rules!)[< \t]+[^;]*)$",
 	 /* -- */
-- 
gitgitgadget