Skip to content

Commit c331446

Browse files
committed
Escape more special characters in regexps
In particular, start="\\\@<!\[" is the wrong way to define the start of a region: it will work for \[, but also for \\[, which is erroneous. if \\ and \[ are matched first, then you don't need to guard against a preceding backslash. Addresses guns/vim-clojure-static#30
1 parent 9258651 commit c331446

2 files changed

Lines changed: 9 additions & 4 deletions

File tree

clj/test/vim_clojure_static/syntax_test.clj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,11 @@
361361
"(?>X)" regexp-mod
362362

363363
"(?X)" !regexp-mod
364-
]])
364+
]]
365+
["#%s"
366+
[;; Backslashes with character classes
367+
"\"[\\\\]\"" (partial = [:clojureRegexp :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexp])
368+
"\"\\[]\"" (partial = [:clojureRegexp :clojureRegexpEscape :clojureRegexpEscape :clojureRegexp :clojureRegexp])
369+
"\"\\\\[]\"" (partial = [:clojureRegexp :clojureRegexpEscape :clojureRegexpEscape :clojureRegexpCharClass :clojureRegexpCharClass :clojureRegexp])]])
365370

366371
(comment (test #'java-regexp-literals-test))

syntax/clojure.vim

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ syntax match clojureDispatch "\v#[\^'=<_]?"
7575
" Clojure permits no more than 20 params.
7676
syntax match clojureAnonArg "%\(20\|1\d\|[1-9]\|&\)\?"
7777

78-
syntax match clojureRegexpEscape "\v\\%(\\|[tnrfae]|c\u|0[0-3]?\o{1,2}|x%(\x{2}|\{\x{1,6}\})|u\x{4})" contained display
78+
syntax match clojureRegexpEscape "\v\\%([\\tnrfae()\[\]{}^$*?+]|c\u|0[0-3]?\o{1,2}|x%(\x{2}|\{\x{1,6}\})|u\x{4})" contained display
7979
syntax region clojureRegexpQuoted start=/\v\<@!\\Q/ms=e+1 skip=/\v\\\\|\\"/ end=/\\E/me=s-1 end=/"/me=s-1 contained
8080
syntax region clojureRegexpQuote start=/\v\<@!\\Q/ skip=/\v\\\\|\\"/ end=/\\E/ end=/"/me=s-1 contains=clojureRegexpQuoted keepend contained
8181
syntax cluster clojureRegexpEscapes contains=clojureRegexpEscape,clojureRegexpQuote
@@ -94,7 +94,7 @@ syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\c%(In|blk\=|block\=)%(aeg
9494
syntax match clojureRegexpPredefinedCharClass "\v%(\\[dDsSwW]|\.)" contained display
9595
syntax cluster clojureRegexpCharPropertyClasses contains=clojureRegexpPosixCharClass,clojureRegexpJavaCharClass,clojureRegexpUnicodeCharClass
9696
syntax cluster clojureRegexpCharClasses contains=clojureRegexpPredefinedCharClass,clojureRegexpCharClass,@clojureRegexpCharPropertyClasses
97-
syntax region clojureRegexpCharClass start="\\\@<!\[" end="\\\@<!\]" contained contains=clojureRegexpPredefinedCharClass,@clojureRegexpCharPropertyClasses
97+
syntax region clojureRegexpCharClass start="\[" skip=/\\\\\|\\]/ end="]" contained contains=clojureRegexpPredefinedCharClass,@clojureRegexpCharPropertyClasses
9898
syntax match clojureRegexpBoundary "\\[bBAGZz]" contained display
9999
syntax match clojureRegexpBoundary "[$^]" contained display
100100
syntax match clojureRegexpQuantifier "[?*+][?+]\=" contained display
@@ -109,7 +109,7 @@ syntax match clojureRegexpMod "\v\(@<=\?[xdsmiuU]*-?[xdsmiuU]+:?" contained disp
109109
syntax match clojureRegexpMod "\v\(@<=\?%(\<?[=!]|\>)" contained display
110110
syntax match clojureRegexpMod "\v\(@<=\?\<[a-zA-Z]+\>" contained display
111111

112-
syntax region clojureRegexpGroup start="\\\@<!(" matchgroup=clojureRegexpGroup end="\\\@<!)" contained contains=clojureRegexpMod,clojureRegexpQuantifier,clojureRegexpBoundary,clojureRegexpEscape,@clojureRegexpCharClasses
112+
syntax region clojureRegexpGroup start="(" skip=/\\\\\|\\)/ end=")" matchgroup=clojureRegexpGroup contained contains=clojureRegexpMod,clojureRegexpQuantifier,clojureRegexpBoundary,clojureRegexpEscape,@clojureRegexpCharClasses
113113
syntax region clojureRegexp start=/\#"/ skip=/\\\\\|\\"/ end=/"/ contains=@clojureRegexpCharClasses,clojureRegexpEscape,clojureRegexpQuote,clojureRegexpBoundary,clojureRegexpQuantifier,clojureRegexpOr,clojureRegexpBackRef,clojureRegexpGroup keepend
114114

115115
syntax keyword clojureCommentTodo contained FIXME XXX TODO FIXME: XXX: TODO:

0 commit comments

Comments
 (0)