Jelajahi Sumber

Add support for BigInt

Sebastian Pahnke 6 tahun lalu
induk
melakukan
5e89da1eef

+ 90 - 0
src/javascript/javascript.test.ts

@@ -396,6 +396,96 @@ testTokenization('javascript', [
 		]
 	}],
 
+	// Bigint
+	[{
+		line: '0n',
+		tokens: [
+			{ startIndex: 0, type: 'number.js' }
+		]
+	}],
+
+	[{
+		line: ' 0n',
+		tokens: [
+			{ startIndex: 0, type: '' },
+			{ startIndex: 1, type: 'number.js' }
+		]
+	}],
+
+	[{
+		line: ' 0n ',
+		tokens: [
+			{ startIndex: 0, type: '' },
+			{ startIndex: 1, type: 'number.js' },
+			{ startIndex: 3, type: '' }
+		]
+	}],
+
+	[{
+		line: '0n ',
+		tokens: [
+			{ startIndex: 0, type: 'number.js' },
+			{ startIndex: 2, type: '' }
+		]
+	}],
+
+	[{
+		line: '0n+0n',
+		tokens: [
+			{ startIndex: 0, type: 'number.js' },
+			{ startIndex: 2, type: 'delimiter.js' },
+			{ startIndex: 3, type: 'number.js' }
+		]
+	}],
+
+	[{
+		line: '100n+10n',
+		tokens: [
+			{ startIndex: 0, type: 'number.js' },
+			{ startIndex: 4, type: 'delimiter.js' },
+			{ startIndex: 5, type: 'number.js' }
+		]
+	}],
+
+	[{
+		line: '0n + 0n',
+		tokens: [
+			{ startIndex: 0, type: 'number.js' },
+			{ startIndex: 2, type: '' },
+			{ startIndex: 3, type: 'delimiter.js' },
+			{ startIndex: 4, type: '' },
+			{ startIndex: 5, type: 'number.js' }
+		]
+	}],
+
+	[{
+		line: '0b101n',
+		tokens: [
+			{ startIndex: 0, type: 'number.binary.js' }
+		]
+	}],
+
+	[{
+		line: '0123n',
+		tokens: [
+			{ startIndex: 0, type: 'number.octal.js' }
+		]
+	}],
+
+	[{
+		line: '0o123n',
+		tokens: [
+			{ startIndex: 0, type: 'number.octal.js' }
+		]
+	}],
+
+	[{
+		line: '0x123n',
+		tokens: [
+			{ startIndex: 0, type: 'number.hex.js' }
+		]
+	}],
+
 	// Regular Expressions
 	[{
 		line: '//',

+ 90 - 0
src/typescript/typescript.test.ts

@@ -396,6 +396,96 @@ testTokenization('typescript', [
 		]
 	}],
 
+	// Bigint
+	[{
+		line: '0n',
+		tokens: [
+			{ startIndex: 0, type: 'number.ts' }
+		]
+	}],
+
+	[{
+		line: ' 0n',
+		tokens: [
+			{ startIndex: 0, type: '' },
+			{ startIndex: 1, type: 'number.ts' }
+		]
+	}],
+
+	[{
+		line: ' 0n ',
+		tokens: [
+			{ startIndex: 0, type: '' },
+			{ startIndex: 1, type: 'number.ts' },
+			{ startIndex: 3, type: '' }
+		]
+	}],
+
+	[{
+		line: '0n ',
+		tokens: [
+			{ startIndex: 0, type: 'number.ts' },
+			{ startIndex: 2, type: '' }
+		]
+	}],
+
+	[{
+		line: '0n+0n',
+		tokens: [
+			{ startIndex: 0, type: 'number.ts' },
+			{ startIndex: 2, type: 'delimiter.ts' },
+			{ startIndex: 3, type: 'number.ts' }
+		]
+	}],
+
+	[{
+		line: '100n+10n',
+		tokens: [
+			{ startIndex: 0, type: 'number.ts' },
+			{ startIndex: 4, type: 'delimiter.ts' },
+			{ startIndex: 5, type: 'number.ts' }
+		]
+	}],
+
+	[{
+		line: '0n + 0n',
+		tokens: [
+			{ startIndex: 0, type: 'number.ts' },
+			{ startIndex: 2, type: '' },
+			{ startIndex: 3, type: 'delimiter.ts' },
+			{ startIndex: 4, type: '' },
+			{ startIndex: 5, type: 'number.ts' }
+		]
+	}],
+
+	[{
+		line: '0b101n',
+		tokens: [
+			{ startIndex: 0, type: 'number.binary.ts' }
+		]
+	}],
+
+	[{
+		line: '0123n',
+		tokens: [
+			{ startIndex: 0, type: 'number.octal.ts' }
+		]
+	}],
+
+	[{
+		line: '0o123n',
+		tokens: [
+			{ startIndex: 0, type: 'number.octal.ts' }
+		]
+	}],
+
+	[{
+		line: '0x123n',
+		tokens: [
+			{ startIndex: 0, type: 'number.hex.ts' }
+		]
+	}],
+
 	// Regular Expressions
 	[{
 		line: '//',

+ 4 - 4
src/typescript/typescript.ts

@@ -146,10 +146,10 @@ export const language = {
 			// numbers
 			[/(@digits)[eE]([\-+]?(@digits))?/, 'number.float'],
 			[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/, 'number.float'],
-			[/0[xX](@hexdigits)/, 'number.hex'],
-			[/0[oO]?(@octaldigits)/, 'number.octal'],
-			[/0[bB](@binarydigits)/, 'number.binary'],
-			[/(@digits)/, 'number'],
+			[/0[xX](@hexdigits)n?/, 'number.hex'],
+			[/0[oO]?(@octaldigits)n?/, 'number.octal'],
+			[/0[bB](@binarydigits)n?/, 'number.binary'],
+			[/(@digits)n?/, 'number'],
 
 			// delimiter: after number because of .\d floats
 			[/[;,.]/, 'delimiter'],