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*">
|
<rule pattern="[$a-zA-Z_]\w*">
|
||||||
<token type="NameOther" />
|
<token type="NameOther" />
|
||||||
</rule>
|
</rule>
|
||||||
<rule pattern="[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?">
|
<rule pattern="\d+(\.\d*([eE][+\-]?\d+)?|[eE][+\-]?\d+)">
|
||||||
<token type="LiteralNumberFloat" />
|
<token type="LiteralNumberFloat" />
|
||||||
</rule>
|
</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" />
|
<token type="LiteralNumberHex" />
|
||||||
</rule>
|
</rule>
|
||||||
<rule pattern="[0-9]+">
|
<rule pattern="[0-9][0-9_]*">
|
||||||
<token type="LiteralNumberInteger" />
|
<token type="LiteralNumberInteger" />
|
||||||
</rule>
|
</rule>
|
||||||
<rule pattern=""(\\\\|\\"|[^"])*"">
|
<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