mirror of
https://github.com/logseq/logseq.git
synced 2026-04-24 14:14:55 +00:00
clj-kondo: check regex error prone double escaping
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
|
||||
:linters
|
||||
{:path-invalid-construct/string-join {:level :info}
|
||||
:regex-checks/double-escaped-regex {:level :warning}
|
||||
:aliased-namespace-symbol {:level :warning}
|
||||
;; Disable until it doesn't trigger false positives on rum/defcontext
|
||||
:earmuffed-var-not-dynamic {:level :off}
|
||||
@@ -113,7 +114,8 @@
|
||||
|
||||
:hooks {:analyze-call {rum.core/defc hooks.rum/defc
|
||||
rum.core/defcs hooks.rum/defcs
|
||||
clojure.string/join hooks.path-invalid-construct/string-join}}
|
||||
clojure.string/join hooks.path-invalid-construct/string-join
|
||||
clojure.string/replace hooks.regex-checks/double-escaped-regex}}
|
||||
:lint-as {promesa.core/let clojure.core/let
|
||||
promesa.core/loop clojure.core/loop
|
||||
promesa.core/recur clojure.core/recur
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
(defn string-join
|
||||
[{:keys [node]}]
|
||||
(let [[_ sep-v & _args] (:children node)]
|
||||
;; (prn :string-join)
|
||||
(when (and (api/string-node? sep-v)
|
||||
(= ["/"] (:lines sep-v)))
|
||||
(api/reg-finding! (assoc (meta node)
|
||||
|
||||
15
.clj-kondo/hooks/regex_checks.clj
Normal file
15
.clj-kondo/hooks/regex_checks.clj
Normal file
@@ -0,0 +1,15 @@
|
||||
(ns hooks.regex-checks
|
||||
"This hook try to find out those error-prone double escaping regex expressions"
|
||||
(:require [clj-kondo.hooks-api :as api]))
|
||||
|
||||
(def double-escaped-checker #"\(re-pattern .*\\\\\\\\[\?\#\|\.\^\$\\\+].*\)")
|
||||
|
||||
(defn double-escaped-regex
|
||||
[{:keys [node]}]
|
||||
(let [[_ _content regex & _args] (:children node)
|
||||
regex-string (str (api/sexpr regex))]
|
||||
(when (and (= (api/tag regex) :regex)
|
||||
(re-matches double-escaped-checker regex-string))
|
||||
(api/reg-finding! (assoc (meta regex)
|
||||
:message (str "double slash (\\\\) found in this regular expression followed by a regex special character (, + , * , ? , ^ , $ , | , \\ ), are you mistakenly double escaped a special character? Only escape one-time is required. No escape is required in character class []. (use #_{:clj-kondo/ignore [:regex-checks/double-escaped-regex]} to ignore)")
|
||||
:type :regex-checks/double-escaped-regex)))))
|
||||
@@ -143,6 +143,9 @@
|
||||
(defn legacy-dot-file-name-sanity
|
||||
[page-name]
|
||||
(when (string? page-name)
|
||||
;; Bug in original code, but doesn't affect the result
|
||||
;; https://github.com/logseq/logseq/blob/1519e35e0c8308d8db90b2525bfe7a716c4cdf04/src/main/frontend/util.cljc#L892
|
||||
#_{:clj-kondo/ignore [:regex-checks/double-escaped-regex]}
|
||||
(let [normalize (fn [s] (.normalize s "NFC"))
|
||||
remove-boundary-slashes (fn [s] (when (string? s)
|
||||
(let [s (if (= \/ (first s))
|
||||
@@ -165,9 +168,12 @@
|
||||
(defn legacy-url-file-name-sanity
|
||||
[page-name]
|
||||
(let [url-encode #(some-> % str (js/encodeURIComponent) (.replace "+" "%20"))]
|
||||
;; Bug in original code, but doesn't affect the result
|
||||
;; https://github.com/logseq/logseq/blob/1519e35e0c8308d8db90b2525bfe7a716c4cdf04/src/main/frontend/util.cljc#L892
|
||||
#_{:clj-kondo/ignore [:regex-checks/double-escaped-regex]}
|
||||
(some-> page-name
|
||||
gp-util/page-name-sanity
|
||||
;; for android filesystem compatibility
|
||||
;; for android filesystem compatibility
|
||||
(string/replace #"[\\#|%]+" url-encode)
|
||||
;; Windows reserved path characters
|
||||
(string/replace #"[:\\*\\?\"<>|]+" url-encode)
|
||||
|
||||
Reference in New Issue
Block a user