[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/relint 6a86509 10/11: Tuned miscape filtering
From: |
Mattias Engdegård |
Subject: |
[elpa] externals/relint 6a86509 10/11: Tuned miscape filtering |
Date: |
Sat, 20 Jun 2020 05:57:41 -0400 (EDT) |
branch: externals/relint
commit 6a865096791757c0034238f813910b87018a0e31
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>
Tuned miscape filtering
Instead of disabling the useless backslash check for all doc strings,
just ignore escaped ()[]' -- round and square brackets and apostrophe.
This catches more actual mistakes while avoiding most false positives.
---
relint.el | 13 ++++---------
test/13.elisp | 13 +++++++------
test/13.expected | 38 ++++++++++++++++++++++++--------------
3 files changed, 35 insertions(+), 29 deletions(-)
diff --git a/relint.el b/relint.el
index 3c6d05a..5124958 100644
--- a/relint.el
+++ b/relint.el
@@ -2164,20 +2164,15 @@ Return a list of (FORM . STARTING-POSITION)."
(and (= steps 4)
(looking-at (rx (or "define-derived-mode"))))))))
-(defconst relint--miscape-ignore-left-round-bracket nil
- "Whether to ignore specifically `\\(' in doc strings.")
-
-(defconst relint--miscape-ignore-all-doc-strings t
- "Whether to ignore all stray backslashes in doc strings.")
-
(defun relint--suspicious-backslash (string-start)
"With point at an ineffective backslash, emit an warning unless filtered out.
STRING-START is the start of the string literal (first double quote)."
(let ((c (char-after (1+ (point)))))
+ ;; Filter out escaped round and square brackets and apostrophes
+ ;; inside doc strings, as well as anything in the leftmost column:
+ ;; common for historical reasons and less likely to be mistakes.
(unless (or (bolp)
- (and (or (and relint--miscape-ignore-left-round-bracket
- (eq c ?\())
- relint--miscape-ignore-all-doc-strings)
+ (and (memq c '(?\( ?\) ?\[ ?\] ?\'))
(relint--in-doc-string-p string-start)))
(relint--warn (point) nil
(format-message
diff --git a/test/13.elisp b/test/13.elisp
index 58c1609..1f8cb58 100644
--- a/test/13.elisp
+++ b/test/13.elisp
@@ -3,13 +3,14 @@
;; Test ineffective backslashes in strings
(defun f1 ()
- "doc string with \(silly\) bac\kslashes
-\[that we ignore\]"
+ "doc string:
+\! \( \) \[ \] \' all ignored
+not ignored: \{ \} \| \` \? \* \. \+ \; \q etc"
(list
- "\more \(bad things\)"
- "long \<string\>
-\(with mistakes\)
-\{and so on\}"
+ "\more"
+ "not ignored: \( \) \[ \] \'"
+ "long string \;
+\; and so on"
"valid: \\ \" \x5e \172 \u1234 \u00000041 \C-x \M-e \ \
and \a \b \f \n \r \t \v \d \e \s \^P"))
diff --git a/test/13.expected b/test/13.expected
index 8c721d5..53a4568 100644
--- a/test/13.expected
+++ b/test/13.expected
@@ -1,18 +1,28 @@
-13.elisp:9:5: Ineffective string escape `\m'
-13.elisp:9:11: Ineffective string escape `\('
-13.elisp:9:23: Ineffective string escape `\)'
-13.elisp:10:10: Ineffective string escape `\<'
-13.elisp:10:18: Ineffective string escape `\>'
-13.elisp:11:16: Ineffective string escape `\)'
-13.elisp:12:12: Ineffective string escape `\}'
-13.elisp:17:23: In call to re-search-forward: Unescaped literal `$' (pos 0)
+13.elisp:8:14: Ineffective string escape `\{'
+13.elisp:8:17: Ineffective string escape `\}'
+13.elisp:8:20: Ineffective string escape `\|'
+13.elisp:8:23: Ineffective string escape `\`'
+13.elisp:8:26: Ineffective string escape `\?'
+13.elisp:8:29: Ineffective string escape `\*'
+13.elisp:8:32: Ineffective string escape `\.'
+13.elisp:8:35: Ineffective string escape `\+'
+13.elisp:8:38: Ineffective string escape `\;'
+13.elisp:8:41: Ineffective string escape `\q'
+13.elisp:10:5: Ineffective string escape `\m'
+13.elisp:11:18: Ineffective string escape `\('
+13.elisp:11:21: Ineffective string escape `\)'
+13.elisp:11:24: Ineffective string escape `\['
+13.elisp:11:27: Ineffective string escape `\]'
+13.elisp:11:30: Ineffective string escape `\''
+13.elisp:12:17: Ineffective string escape `\;'
+13.elisp:18:23: In call to re-search-forward: Unescaped literal `$' (pos 0)
"$.x++"
^
-13.elisp:17:23: Ineffective string escape `\$'
-13.elisp:17:25: Ineffective string escape `\.'
-13.elisp:17:28: Ineffective string escape `\+'
-13.elisp:17:30: In call to re-search-forward: Repetition of repetition (pos 4)
+13.elisp:18:23: Ineffective string escape `\$'
+13.elisp:18:25: Ineffective string escape `\.'
+13.elisp:18:28: Ineffective string escape `\+'
+13.elisp:18:30: In call to re-search-forward: Repetition of repetition (pos 4)
"$.x++"
....^
-13.elisp:17:30: Ineffective string escape `\+'
-13.elisp:18:16: Ineffective string escape `\q'
+13.elisp:18:30: Ineffective string escape `\+'
+13.elisp:19:16: Ineffective string escape `\q'
- [elpa] externals/relint 6bfba5c 01/11: Always output to stderr when running noninteractively, (continued)
- [elpa] externals/relint 6bfba5c 01/11: Always output to stderr when running noninteractively, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint 1ea9b91 05/11: Add tests for ineffective backslash check, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint 0d80c1f 07/11: Rename various 'miscape' identifiers, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint e35fa2e 09/11: Fix doc string predicate, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint e8d8052 03/11: Add checking of ineffective backslashes in string literals, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint 329df9c 02/11: Refactor framework, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint 2de1106 04/11: Sort diagnostics by buffer position, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint a1c7bf5 06/11: Describe the ineffective backslash warning in README, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint 0627d4d 08/11: Simplify (and speed up) string scanning regexp, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint 0c35e02 11/11: Increment version to 1.18, Mattias Engdegård, 2020/06/20
- [elpa] externals/relint 6a86509 10/11: Tuned miscape filtering,
Mattias Engdegård <=