emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/xr 51b1d81 4/5: More skip-set warnings


From: Mattias Engdegård
Subject: [elpa] externals/xr 51b1d81 4/5: More skip-set warnings
Date: Thu, 21 Mar 2019 09:23:02 -0400 (EDT)

branch: externals/xr
commit 51b1d812498e14da24c9b76a82a2af2ceb7e3256
Author: Mattias Engdegård <address@hidden>
Commit: Mattias Engdegård <address@hidden>

    More skip-set warnings
    
    Now complains about empty and negated empty sets, about single-
    and two-char ranges, and about unnecessary escapes of range
    endpoints (like "A-\\Z").
---
 xr-test.el | 17 ++++++++++++-----
 xr.el      | 22 +++++++++++++++++++---
 2 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/xr-test.el b/xr-test.el
index fd36db2..8948c2a 100644
--- a/xr-test.el
+++ b/xr-test.el
@@ -409,14 +409,21 @@
                    (3 . "Reversed range `F-A'")
                    (6 . "Single-element range `M-M'")
                    (9 . "Stray `\\' at end of string"))))
-  (should (equal (xr-skip-set-lint "A-Fa-z3D-K!3-7\\!b")
+  (should (equal (xr-skip-set-lint "A-Fa-z3D-KM-N!3-7\\!b")
                  '((7 . "Ranges `A-F' and `D-K' overlap")
-                   (11 . "Range `3-7' includes character `3'")
-                   (14 . "Duplicated character `!'")
-                   (14 . "Unnecessarily escaped `!'")
-                   (16 . "Character `b' included in range `a-z'"))))
+                   (10 . "Two-element range `M-N'")
+                   (14 . "Range `3-7' includes character `3'")
+                   (17 . "Duplicated character `!'")
+                   (17 . "Unnecessarily escaped `!'")
+                   (19 . "Character `b' included in range `a-z'"))))
+  (should (equal (xr-skip-set-lint "!-\\$")
+                 '((2 . "Unnecessarily escaped `$'"))))
   (should (equal (xr-skip-set-lint "[^a-z]")
                  '((0 . "Suspect skip set framed in `[...]'"))))
+  (should (equal (xr-skip-set-lint "")
+                 '((0 . "Empty set matches nothing"))))
+  (should (equal (xr-skip-set-lint "^")
+                 '((0 . "Negated empty set matches anything"))))
 )
 
 (provide 'xr-test)
diff --git a/xr.el b/xr.el
index e76b150..9ebf446 100644
--- a/xr.el
+++ b/xr.el
@@ -656,16 +656,26 @@
             (xr--report warnings (point)
                         (xr--escape-string
                          (format "Unnecessarily escaped `%c'" start) nil)))
+          (when (and (match-beginning 3)
+                     (not (memq end '(?^ ?- ?\\))))
+            (xr--report warnings (1- (match-beginning 3))
+                        (xr--escape-string
+                         (format "Unnecessarily escaped `%c'" end) nil)))
           (if (and end (> start end))
               (xr--report warnings (point)
                           (xr--escape-string
                            (format "Reversed range `%c-%c'" start end) nil))
-            (when (eq start end)
+            (cond
+             ((eq start end)
               (xr--report warnings (point)
                           (xr--escape-string
                            (format "Single-element range `%c-%c'" start end)
-                           nil))
-              (setq end nil))
+                           nil)))
+             ((eq (1+ start) end)
+              (xr--report warnings (point)
+                          (xr--escape-string
+                           (format "Two-element range `%c-%c'" start end)
+                           nil))))
             (let ((tail ranges))
               (while tail
                 (let ((range (car tail)))
@@ -704,6 +714,12 @@
 
       (goto-char (match-end 0)))
 
+    (when (and (null ranges) (null classes))
+      (xr--report warnings (point-min)
+                  (if negated
+                      "Negated empty set matches anything"
+                    "Empty set matches nothing")))
+
     (cond
      ;; Single non-negated character, like "-": make a string.
      ((and (not negated)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]