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

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

[elpa] externals/relint a1ea26c 01/16: Check regexp arguments to more fu


From: Mattias Engdegård
Subject: [elpa] externals/relint a1ea26c 01/16: Check regexp arguments to more functions
Date: Mon, 30 Nov 2020 05:00:56 -0500 (EST)

branch: externals/relint
commit a1ea26c4f7d8e6618834f04bb634f8ab1f36cb1a
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>

    Check regexp arguments to more functions
    
      sort-regexp-fields
      delete-matching-lines (alias for keep-lines)
      delete-non-matching-lines (alias for flush-lines)
      count-matches (alias for how-many)
---
 relint.el       |  9 ++++++++-
 test/2.elisp    |  9 ++++++++-
 test/2.expected | 55 +++++++++++++++++++++++++++++++++++--------------------
 3 files changed, 51 insertions(+), 22 deletions(-)

diff --git a/relint.el b/relint.el
index b95ef5c..3b40d12 100644
--- a/relint.el
+++ b/relint.el
@@ -1860,7 +1860,8 @@ directly."
                'posix-string-match
                'search-forward-regexp 'search-backward-regexp
                'kill-matching-buffers
-               'keep-lines 'flush-lines 'how-many)
+               'keep-lines 'flush-lines 'how-many
+               'delete-matching-lines 'delete-non-matching-lines 
'count-matches)
           ,re-arg . ,_)
         (unless (and (symbolp re-arg)
                      (memq re-arg relint--checked-variables))
@@ -1899,6 +1900,12 @@ directly."
           ,_ ,_ ,re-arg . ,_)
         (relint--check-file-name-re re-arg (format "call to %s" (car form))
                                     pos (cons 3 path)))
+       (`(sort-regexp-fields ,_ ,record-arg ,key-arg . ,_)
+        (let ((name (format "call to %s" (car form))))
+          (relint--check-re record-arg name pos (cons 2 path))
+          (let ((key-re (relint--eval-or-nil key-arg)))
+            (when (and (stringp key-re) (not (equal key-re "\\&")))
+              (relint--check-re key-re name pos (cons 3 path))))))
        (`(,(or 'skip-chars-forward 'skip-chars-backward)
           ,skip-arg . ,_)
         (let ((str (relint--get-string skip-arg)))
diff --git a/test/2.elisp b/test/2.elisp
index f069a33..36d338a 100644
--- a/test/2.elisp
+++ b/test/2.elisp
@@ -29,7 +29,10 @@
   (string-trim s "[yy]" "[zz]")
   (directory-files s nil "+1")
   (directory-files-and-attributes s nil "+2")
-  (directory-files-recursively s "+3"))
+  (directory-files-recursively s "+3")
+  (delete-matching-lines "+4")
+  (delete-non-matching-lines "+5")
+  (count-matches "+6"))
 
 ;; Test argument names as means of detecting regexps.
 (defun f2 (x1 my-regexp x2 my-regex x3 my-re x4 my-pattern x5 re)
@@ -57,3 +60,7 @@
 (defun f7 ()
   (alpha beta :regexp "[11]")
   (gamma :regex "[22]" delta))
+
+(defun f8 ()
+  (sort-regexp-fields nil "^.*$x" "\\&" (point-min) (point-max))
+  (sort-regexp-fields nil "^.*$" "\\%" (point-min) (point-max)))
diff --git a/test/2.expected b/test/2.expected
index 347f31d..aa58eca 100644
--- a/test/2.expected
+++ b/test/2.expected
@@ -88,63 +88,78 @@
 2.elisp:32:35: In call to directory-files-recursively: Unescaped literal `+' 
(pos 0)
   "+3"
    ^
-2.elisp:45:17: In call to f2: Duplicated `B' inside character alternative (pos 
2)
+2.elisp:33:27: In call to delete-matching-lines: Unescaped literal `+' (pos 0)
+  "+4"
+   ^
+2.elisp:34:31: In call to delete-non-matching-lines: Unescaped literal `+' 
(pos 0)
+  "+5"
+   ^
+2.elisp:35:19: In call to count-matches: Unescaped literal `+' (pos 0)
+  "+6"
+   ^
+2.elisp:48:17: In call to f2: Duplicated `B' inside character alternative (pos 
2)
   "[BB]"
    ..^
-2.elisp:45:31: In call to f2: Duplicated `D' inside character alternative (pos 
2)
+2.elisp:48:31: In call to f2: Duplicated `D' inside character alternative (pos 
2)
   "[DD]"
    ..^
-2.elisp:45:45: In call to f2: Duplicated `F' inside character alternative (pos 
2)
+2.elisp:48:45: In call to f2: Duplicated `F' inside character alternative (pos 
2)
   "[FF]"
    ..^
-2.elisp:45:59: In call to f2: Duplicated `H' inside character alternative (pos 
2)
+2.elisp:48:59: In call to f2: Duplicated `H' inside character alternative (pos 
2)
   "[HH]"
    ..^
-2.elisp:45:73: In call to f2: Duplicated `J' inside character alternative (pos 
2)
+2.elisp:48:73: In call to f2: Duplicated `J' inside character alternative (pos 
2)
   "[JJ]"
    ..^
-2.elisp:46:17: In call to s2: Duplicated `B' inside character alternative (pos 
2)
+2.elisp:49:17: In call to s2: Duplicated `B' inside character alternative (pos 
2)
   "[BB]"
    ..^
-2.elisp:46:31: In call to s2: Duplicated `D' inside character alternative (pos 
2)
+2.elisp:49:31: In call to s2: Duplicated `D' inside character alternative (pos 
2)
   "[DD]"
    ..^
-2.elisp:46:45: In call to s2: Duplicated `F' inside character alternative (pos 
2)
+2.elisp:49:45: In call to s2: Duplicated `F' inside character alternative (pos 
2)
   "[FF]"
    ..^
-2.elisp:46:59: In call to s2: Duplicated `H' inside character alternative (pos 
2)
+2.elisp:49:59: In call to s2: Duplicated `H' inside character alternative (pos 
2)
   "[HH]"
    ..^
-2.elisp:46:73: In call to s2: Duplicated `J' inside character alternative (pos 
2)
+2.elisp:49:73: In call to s2: Duplicated `J' inside character alternative (pos 
2)
   "[JJ]"
    ..^
-2.elisp:47:17: In call to m2: Duplicated `B' inside character alternative (pos 
2)
+2.elisp:50:17: In call to m2: Duplicated `B' inside character alternative (pos 
2)
   "[BB]"
    ..^
-2.elisp:47:31: In call to m2: Duplicated `D' inside character alternative (pos 
2)
+2.elisp:50:31: In call to m2: Duplicated `D' inside character alternative (pos 
2)
   "[DD]"
    ..^
-2.elisp:47:45: In call to m2: Duplicated `F' inside character alternative (pos 
2)
+2.elisp:50:45: In call to m2: Duplicated `F' inside character alternative (pos 
2)
   "[FF]"
    ..^
-2.elisp:47:59: In call to m2: Duplicated `H' inside character alternative (pos 
2)
+2.elisp:50:59: In call to m2: Duplicated `H' inside character alternative (pos 
2)
   "[HH]"
    ..^
-2.elisp:47:73: In call to m2: Duplicated `J' inside character alternative (pos 
2)
+2.elisp:50:73: In call to m2: Duplicated `J' inside character alternative (pos 
2)
   "[JJ]"
    ..^
-2.elisp:55:17: In call to f5: Duplicated `b' inside character alternative (pos 
2)
+2.elisp:58:17: In call to f5: Duplicated `b' inside character alternative (pos 
2)
   "[bb]"
    ..^
-2.elisp:55:24: In call to f5: Duplicated `c' inside character alternative (pos 
2)
+2.elisp:58:24: In call to f5: Duplicated `c' inside character alternative (pos 
2)
   "[cc]"
    ..^
-2.elisp:55:31: In call to f5: Duplicated `d' inside character alternative (pos 
2)
+2.elisp:58:31: In call to f5: Duplicated `d' inside character alternative (pos 
2)
   "[dd]"
    ..^
-2.elisp:58:26: In :regexp parameter: Duplicated `1' inside character 
alternative (pos 2)
+2.elisp:61:26: In :regexp parameter: Duplicated `1' inside character 
alternative (pos 2)
   "[11]"
    ..^
-2.elisp:59:20: In :regex parameter: Duplicated `2' inside character 
alternative (pos 2)
+2.elisp:62:20: In :regex parameter: Duplicated `2' inside character 
alternative (pos 2)
   "[22]"
    ..^
+2.elisp:65:31: In call to sort-regexp-fields: Unescaped literal `$' (pos 3)
+  "^.*$x"
+   ...^
+2.elisp:66:35: In call to sort-regexp-fields: Escaped non-special character 
`%' (pos 0)
+  "\\%"
+   ^



reply via email to

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