Skip to content

Commit 1229410

Browse files
committed
Add number-literals-test, with newfound bugfixes
1 parent 8644147 commit 1229410

2 files changed

Lines changed: 70 additions & 6 deletions

File tree

clj/test/syntax_test.clj

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
(ns syntax-test
2+
(:require [vim-clojure-static.test :as test :refer [defsyntaxtest]]))
3+
4+
(def number (partial every? (partial = :clojureNumber)))
5+
(def !number (complement number))
6+
7+
(defsyntaxtest number-literals-test
8+
(with-format "%s"
9+
"1234567890" number "+1" number "-1" number ; Integer
10+
"0" number "+0" number "-0" number ; Integer zero
11+
"0.12" number "+0.12" number "-0.12" number ; Float
12+
"1." number "+1." number "-1." number ; Float
13+
"0.0" number "+0.0" number "-0.0" number ; Float zero
14+
"01234567" number "+07" number "-07" number ; Octal
15+
"00" number "+00" number "-00" number ; Octal zero
16+
"0x09abcdef" number "+0xf" number "-0xf" number ; Hexadecimal
17+
"0x0" number "+0x0" number "-0x0" number ; Hexadecimal zero
18+
"3/2" number "+3/2" number "-3/2" number ; Rational
19+
"0/0" number "+0/0" number "-0/0" number ; Rational zero (not a syntax error)
20+
"2r1" number "+2r1" number "-2r1" number ; Radix
21+
"36R1" number "+36R1" number "-36R1" number ; Radix
22+
23+
;; Illegal literals (some are accepted by the reader, but are bad style)
24+
25+
".1" !number
26+
"01.2" !number
27+
"089" !number
28+
"0xfg" !number
29+
"1.0/1" !number
30+
"01/2" !number
31+
"1/02" !number
32+
"2r2" !number
33+
"1r0" !number
34+
"37r36" !number
35+
36+
;; BigInt
37+
38+
"0N" number
39+
"+0.1N" !number
40+
"-07N" number
41+
"08N" !number
42+
"+0x0fN" number
43+
"1/2N" !number
44+
45+
;; BigDecimal
46+
47+
"0M" number
48+
"+0.1M" number
49+
"08M" !number
50+
"08.9M" !number
51+
"0x1fM" !number
52+
"3/4M" !number
53+
"2r1M" !number
54+
55+
;; Exponential notation
56+
57+
"0e0" number
58+
"+0.1e-1" number
59+
"-1e-1" number
60+
"08e1" !number
61+
"07e1" !number
62+
"0xfe-1" !number
63+
"2r1e-1" !number))
64+
65+
;; (test #'number-literals-test)

syntax/clojure.vim

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,16 @@ syntax match clojureCharacter "\\return"
5050
syntax match clojureCharacter "\\backspace"
5151
syntax match clojureCharacter "\\formfeed"
5252

53+
syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@<!"
54+
5355
let s:radix_chars = "0123456789abcdefghijklmnopqrstuvwxyz"
5456
for s:radix in range(2, 36)
55-
execute 'syntax match clojureNumber "\c\<-\?' . s:radix . 'r[' . strpart(s:radix_chars, 0, s:radix) . ']\+\>"'
57+
execute 'syntax match clojureNumber "\v\c<[-+]?' . s:radix . 'r[' . strpart(s:radix_chars, 0, s:radix) . ']+>"'
5658
endfor
5759
unlet! s:radix_chars s:radix
5860

59-
syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@<!"
60-
61-
syntax match clojureNumber "\v<[-+]?%(0\o*|[1-9]\d*|%(0|[1-9]\d*)\.\d*)%(M|[eE][-+]?\d+)?>"
62-
syntax match clojureNumber "\v<[-+]?%(0\o*|[1-9]\d*)N>"
63-
syntax match clojureNumber "\v<[-+]?0x\x+>"
61+
syntax match clojureNumber "\v<[-+]?%(0\o*|0x\x+|[1-9]\d*)N?>"
62+
syntax match clojureNumber "\v<[-+]?%(0|[1-9]\d*|%(0|[1-9]\d*)\.\d*)%(M|[eE][-+]?\d+)?>"
6463
syntax match clojureNumber "\v<[-+]?%(0|[1-9]\d*)/%(0|[1-9]\d*)>"
6564

6665
syntax match clojureVarArg "&"

0 commit comments

Comments
 (0)