[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)