]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve thing-at-point email detection
authorRobert Pluim <rpluim@gmail.com>
Wed, 15 Feb 2023 11:16:11 +0000 (12:16 +0100)
committerRobert Pluim <rpluim@gmail.com>
Fri, 10 Mar 2023 10:22:54 +0000 (11:22 +0100)
* lisp/thingatpt.el (thing-at-point-email-regexp): Allow numbers at
the start of the user portion, and disallow '.' at the start.  Also
disallow '.' at the start of the domain portion.
* test/lisp/thingatpt-tests.el (thing-at-point-test-data): Add various
email tests.

Bug#61519

lisp/thingatpt.el
test/lisp/thingatpt-tests.el

index 9363a474cb55866927100c35451612d2202dc081..f3367290dee5727665904275e3d687f949e589db 100644 (file)
@@ -645,7 +645,7 @@ back from point."
 
 ;;   Email addresses
 (defvar thing-at-point-email-regexp
-  "<?[-+_.~a-zA-Z][-+_.~:a-zA-Z0-9]*@[-.a-zA-Z0-9]+>?"
+  "<?[-+_~a-zA-Z0-9][-+_.~:a-zA-Z0-9]*@[-a-zA-Z0-9]+[-.a-zA-Z0-9]*>?"
   "A regular expression probably matching an email address.
 This does not match the real name portion, only the address, optionally
 with angle brackets.")
index 0daf27f32ec2efcf438fbc20caae9e2a1692938d..7cf41d2817b3bf365701f36160af405a2ee3998f 100644 (file)
     ("<url:ftp.example.net/abc/>" 1 url "ftp://ftp.example.net/abc/")
     ;; UUID, only hex is allowed
     ("01234567-89ab-cdef-ABCD-EF0123456789" 1 uuid "01234567-89ab-cdef-ABCD-EF0123456789")
-    ("01234567-89ab-cdef-ABCD-EF012345678G" 1 uuid nil))
+    ("01234567-89ab-cdef-ABCD-EF012345678G" 1 uuid nil)
+    ;; email addresses
+    ("foo@example.com" 1 email "foo@example.com")
+    ("f@example.com" 1 email "f@example.com")
+    ("foo@example.com" 4 email "foo@example.com")
+    ("foo@example.com" 5 email "foo@example.com")
+    ("foo@example.com" 15 email "foo@example.com")
+    ("foo@example.com" 16 email "foo@example.com")
+    ("<foo@example.com>" 1 email "<foo@example.com>")
+    ("<foo@example.com>" 4 email "<foo@example.com>")
+    ("<foo@example.com>" 5 email "<foo@example.com>")
+    ("<foo@example.com>" 16 email "<foo@example.com>")
+    ("<foo@example.com>" 17 email "<foo@example.com>")
+    ;; email adresses containing numbers
+    ("foo1@example.com" 1 email "foo1@example.com")
+    ("1foo@example.com" 1 email "1foo@example.com")
+    ("11@example.com" 1 email "11@example.com")
+    ("1@example.com" 1 email "1@example.com")
+    ;; email adresses user portion containing dots
+    ("foo.bar@example.com" 1 email "foo.bar@example.com")
+    (".foobar@example.com" 1 email nil)
+    (".foobar@example.com" 2 email "foobar@example.com")
+    ;; email adresses domain portion containing dots and dashes
+    ("foobar@.example.com" 1 email nil)
+    ("foobar@-example.com" 1 email "foobar@-example.com")
+    ;; These are illegal, but thingatpt doesn't yet handle them
+    ;;    ("foo..bar@example.com" 1 email nil)
+    ;;    ("foobar@.example.com" 1 email nil)
+    ;;    ("foobar@example..com" 1 email nil)
+    ;;    ("foobar.@example.com" 1 email nil)
+
+    )
   "List of `thing-at-point' tests.
 Each list element should have the form