Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bd2a734

Browse files
authored
Merge pull request #5 from clojure-vim/perf
Perf
2 parents 383ee83 + d5f1eee commit bd2a734

File tree

4 files changed

+55
-50
lines changed

4 files changed

+55
-50
lines changed

‎clj/src/vim_clojure_static/test.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
test-file (str "tmp/" name ".clj")
9191
syntable (gensym "syntable")]
9292
`(test/deftest ~name
93+
(~io/make-parents ~test-file)
9394
(spit ~test-file "")
9495
(let [~syntable (syn-id-names ~test-file ~@strings)]
9596
~@(map (fn [{:keys [fmt ss λs]}]

‎clj/test/vim_clojure_static/syntax_test.clj

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
(defpredicates number :clojureNumber)
1111
(defpredicates kw :clojureKeyword)
12+
(defpredicates character :clojureCharacter)
1213
(defpredicates regexp :clojureRegexp)
1314
(defpredicates regexp-escape :clojureRegexpEscape)
1415
(defpredicates regexp-char-class :clojureRegexpCharClass)
@@ -37,6 +38,7 @@
3738
"0x0" number "+0x0" number "-0x0" number ; Hexadecimal zero
3839
"3/2" number "+3/2" number "-3/2" number ; Rational
3940
"0/0" number "+0/0" number "-0/0" number ; Rational (not a syntax error)
41+
"36r0XYZ" number "16rFF" number "8r077" number ; Radix
4042
"2r1" number "+2r1" number "-2r1" number ; Radix
4143
"36R1" number "+36R1" number "-36R1" number ; Radix
4244

@@ -49,7 +51,7 @@
4951
"1.0/1" !number
5052
"01/2" !number
5153
"1/02" !number
52-
"2r2" !number
54+
;"2r2" !number ;; Removed for performance
5355
"1r0" !number
5456
"37r36" !number
5557

@@ -70,7 +72,7 @@
7072
"08.9M" !number
7173
"0x1fM" !number
7274
"3/4M" !number
73-
"2r1M" !number
75+
;"2r1M" !number ;; Removed for performance
7476

7577
;; Exponential notation
7678

@@ -84,27 +86,46 @@
8486

8587
(comment (test #'test-number-literals))
8688

87-
;; TODO: Finish me! (this was in an old git stash)
88-
;; (defsyntaxtest keywords-test
89-
;; (with-format "%s"
90-
;; ":1" kw
91-
;; ":A" kw
92-
;; ":a" kw
93-
;; ":αβγ" kw
94-
;; "::a" kw
95-
;; ":a/b" kw
96-
;; ":a:b" kw
97-
;; ":a:b/:c:b" kw
98-
;; ":a/b/c/d" kw
99-
;; "::a/b" !kw
100-
;; "::" !kw
101-
;; ":a:" !kw
102-
;; ":a/" !kw
103-
;; ":/" !kw
104-
;; ":" !kw
105-
;; ))
106-
;;
107-
;; (comment (test #'keywords-test))
89+
(defsyntaxtest test-character-literals
90+
["[%s]"
91+
["\\0" character "\\a" character "\\Z" character
92+
"\\." character "\\\\" character "\\" character
93+
"\\o7" character "\\o07" character "\\o307" character
94+
"\\o8" !character "\\o477" !character "\\o0007" !character
95+
96+
"\\u09af" character
97+
98+
"\\u0" !character "\\u01" !character "\\u012" !character
99+
"\\u01234" !character "\\u0123g" !character
100+
101+
"\\newline" character "\\new" !character
102+
"\\tab" character "\\ta" !character
103+
"\\space" character "\\sp" !character
104+
"\\return" character "\\ret" !character
105+
"\\backspace" character "\\bs" !character
106+
"\\formfeed" character "\\ff" !character]])
107+
108+
(comment (test #'test-character-literals))
109+
110+
(defsyntaxtest keywords-test
111+
["%s"
112+
[":1" kw
113+
":A" kw
114+
":a" kw
115+
":αβγ" kw
116+
"::a" kw
117+
":a/b" kw
118+
":a:b" kw
119+
":a:b/:c:b" kw
120+
":a/b/c/d" kw
121+
"::a/b" kw
122+
"::" !kw
123+
":a:" !kw
124+
":a/" !kw
125+
; ":/" !kw ; This is legal, but for simplicity we do not match it
126+
":" !kw]])
127+
128+
(comment (test #'keywords-test))
108129

109130
(defsyntaxtest test-java-regexp-literals
110131
["#\"%s\""

‎ftplugin/clojure.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ set cpo&vim
1717

1818
let b:undo_ftplugin = 'setlocal iskeyword< define< formatoptions< comments< commentstring< lispwords<'
1919

20-
setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$
20+
setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$,%,&,\|
2121

2222
" There will be false positives, but this is better than missing the whole set
2323
" of user-defined def* definitions.

‎syntax/clojure.vim

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -68,40 +68,23 @@ delfunction s:syntax_keyword
6868
" * Must not end in a : or /
6969
" * Must not have two adjacent colons except at the beginning
7070
" * Must not contain any reader metacharacters except for ' and #
71-
syntax match clojureKeyword "\v<:{1,2}%([^ \n\r\t()\[\]{}";@^`~\\%/]+/)*[^ \n\r\t()\[\]{}";@^`~\\%/]+:@<!>"
71+
syntax match clojureKeyword "\v<:{1,2}%([^ \n\r\t()\[\]{}";@^`~\\%/]+/)*[^ \n\r\t()\[\]{}";@^`~\\%/]+:@1<!>"
7272

7373
syntax match clojureStringEscape "\v\\%([\\btnfr"]|u\x{4}|[0-3]\o{2}|\o{1,2})" contained
7474

7575
syntax region clojureString matchgroup=clojureStringDelimiter start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=clojureStringEscape,@Spell
7676

77-
syntax match clojureCharacter "\\."
78-
syntax match clojureCharacter "\\o\%([0-3]\o\{2\}\|\o\{1,2\}\)"
79-
syntax match clojureCharacter "\\u\x\{4\}"
80-
syntax match clojureCharacter "\\space"
81-
syntax match clojureCharacter "\\tab"
82-
syntax match clojureCharacter "\\newline"
83-
syntax match clojureCharacter "\\return"
84-
syntax match clojureCharacter "\\backspace"
85-
syntax match clojureCharacter "\\formfeed"
77+
syntax match clojureCharacter "\v\\%(o%([0-3]\o{2}|\o{1,2})|u\x{4}|newline|tab|space|return|backspace|formfeed|.)"
8678

87-
syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@<!"
79+
syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@1<!"
8880

89-
let s:radix_chars = "0123456789abcdefghijklmnopqrstuvwxyz"
90-
for s:radix in range(2, 36)
91-
execute 'syntax match clojureNumber "\v\c<[-+]?' . s:radix . 'r[' . strpart(s:radix_chars, 0, s:radix) . ']+>"'
92-
endfor
93-
unlet! s:radix_chars s:radix
94-
95-
syntax match clojureNumber "\v<[-+]?%(0\o*|0x\x+|[1-9]\d*)N?>"
96-
syntax match clojureNumber "\v<[-+]?%(0|[1-9]\d*|%(0|[1-9]\d*)\.\d*)%(M|[eE][-+]?\d+)?>"
97-
syntax match clojureNumber "\v<[-+]?%(0|[1-9]\d*)/%(0|[1-9]\d*)>"
81+
" NB. Correct matching of radix literals was removed for better performance.
82+
syntax match clojureNumber "\v<[-+]?%(%([2-9]|[12]\d|3[0-6])[rR][[:alnum:]]+|%(0\o*|0x\x+|[1-9]\d*)N?|%(0|[1-9]\d*|%(0|[1-9]\d*)\.\d*)%(M|[eE][-+]?\d+)?|%(0|[1-9]\d*)/%(0|[1-9]\d*))>"
9883

9984
syntax match clojureVarArg "&"
10085

101-
syntax match clojureQuote "'"
102-
syntax match clojureQuote "`"
103-
syntax match clojureUnquote "\~"
104-
syntax match clojureUnquote "\~@"
86+
syntax match clojureQuote "\v['`]"
87+
syntax match clojureUnquote "\v\~\@?"
10588
syntax match clojureMeta "\^"
10689
syntax match clojureDeref "@"
10790
syntax match clojureDispatch "\v#[\^'=<_]?"
@@ -134,14 +117,14 @@ syntax match clojureRegexpBoundary "[$^]" contained display
134117
syntax match clojureRegexpQuantifier "[?*+][?+]\=" contained display
135118
syntax match clojureRegexpQuantifier "\v\{\d+%(,|,\d+)?}\??" contained display
136119
syntax match clojureRegexpOr "|" contained display
137-
syntax match clojureRegexpBackRef "\v\\%([1-9]\d*|k\<[a-zA-z]+\>)" contained display
120+
syntax match clojureRegexpBackRef "\v\\%([1-9]\d*|k\<[[:alpha:]]+\>)" contained display
138121

139122
" Mode modifiers, mode-modified spans, lookaround, regular and atomic
140123
" grouping, and named-capturing.
141124
syntax match clojureRegexpMod "\v\(@<=\?:" contained display
142125
syntax match clojureRegexpMod "\v\(@<=\?[xdsmiuU]*-?[xdsmiuU]+:?" contained display
143126
syntax match clojureRegexpMod "\v\(@<=\?%(\<?[=!]|\>)" contained display
144-
syntax match clojureRegexpMod "\v\(@<=\?\<[a-zA-Z]+\>" contained display
127+
syntax match clojureRegexpMod "\v\(@<=\?\<[[:alpha:]]+\>" contained display
145128

146129
syntax region clojureRegexpGroup start="(" skip=/\\\\\|\\)/ end=")" matchgroup=clojureRegexpGroup contained contains=clojureRegexpMod,clojureRegexpQuantifier,clojureRegexpBoundary,clojureRegexpEscape,@clojureRegexpCharClasses
147130
syntax region clojureRegexp start=/\#"/ skip=/\\\\\|\\"/ end=/"/ contains=@clojureRegexpCharClasses,clojureRegexpEscape,clojureRegexpQuote,clojureRegexpBoundary,clojureRegexpQuantifier,clojureRegexpOr,clojureRegexpBackRef,clojureRegexpGroup keepend

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /