fix(lexers): recognize TypeScript binary, octal and exponent literals
the typescript lexer only had three number rules, so literals like 0b1010, 0o17, 0XFF, 1e5 and 1_000 were split into a number and a name. this ports the javascript number rules, with the float rule also keeping a fraction and an exponent together (1.5e10) as before, and adds a testdata/typescript/number_literals fixture.
This commit is contained in:
1 parent
e6499d1d6d
commit
dc8e36e79b
3 files changed
+90
-3
No files matched your search
@@ -275,13 +275,19 @@
|
||||
<rule pattern="[$a-zA-Z_]\w*">
|
||||
<token type="NameOther" />
|
||||
</rule>
|
||||
<rule pattern="[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?">
|
||||
<rule pattern="\d+(\.\d*([eE][+\-]?\d+)?|[eE][+\-]?\d+)">
|
||||
<token type="LiteralNumberFloat" />
|
||||
</rule>
|
||||
<rule pattern="0x[0-9a-fA-F]+">
|
||||
<rule pattern="0[bB][01]+">
|
||||
<token type="LiteralNumberBin" />
|
||||
</rule>
|
||||
<rule pattern="0[oO][0-7]+">
|
||||
<token type="LiteralNumberOct" />
|
||||
</rule>
|
||||
<rule pattern="0[xX][0-9a-fA-F]+">
|
||||
<token type="LiteralNumberHex" />
|
||||
</rule>
|
||||
<rule pattern="[0-9]+">
|
||||
<rule pattern="[0-9][0-9_]*">
|
||||
<token type="LiteralNumberInteger" />
|
||||
</rule>
|
||||
<rule pattern=""(\\\\|\\"|[^"])*"">
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
const mode = 0o644;
|
||||
0O755
|
||||
0b1010
|
||||
0B1010
|
||||
0xff
|
||||
0XFF
|
||||
1e5
|
||||
1E5
|
||||
1e+5
|
||||
1e-5
|
||||
1.5
|
||||
1.
|
||||
1.5e10
|
||||
2.5E-3
|
||||
1_000
|
||||
1_000_000
|
||||
42
|
||||
0
|
||||
const total = 0XFF + 1e-5 * 1_000;
|
||||
@@ -0,0 +1,62 @@
|
||||
[
|
||||
{"type":"KeywordReserved","value":"const"},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"NameOther","value":"mode"},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"Operator","value":"="},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"LiteralNumberOct","value":"0o644"},
|
||||
{"type":"Punctuation","value":";"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberOct","value":"0O755"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberBin","value":"0b1010"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberBin","value":"0B1010"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberHex","value":"0xff"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberHex","value":"0XFF"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberFloat","value":"1e5"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberFloat","value":"1E5"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberFloat","value":"1e+5"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberFloat","value":"1e-5"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberFloat","value":"1.5"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberFloat","value":"1."},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberFloat","value":"1.5e10"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberFloat","value":"2.5E-3"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberInteger","value":"1_000"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberInteger","value":"1_000_000"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberInteger","value":"42"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"LiteralNumberInteger","value":"0"},
|
||||
{"type":"Text","value":"\n"},
|
||||
{"type":"KeywordReserved","value":"const"},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"NameOther","value":"total"},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"Operator","value":"="},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"LiteralNumberHex","value":"0XFF"},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"Operator","value":"+"},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"LiteralNumberFloat","value":"1e-5"},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"Operator","value":"*"},
|
||||
{"type":"Text","value":" "},
|
||||
{"type":"LiteralNumberInteger","value":"1_000"},
|
||||
{"type":"Punctuation","value":";"},
|
||||
{"type":"Text","value":"\n"}
|
||||
]
|
||||
Reference in new issue
Block a user