Merge pull request #167 from arlosi/rawstring

Rust: highlighting raw strings and fix chars with escapes
This commit is contained in:
Alexandru Dima 2021-10-29 08:58:03 +02:00 committed by GitHub
commit c4f2e20471
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 71 additions and 4 deletions

View file

@ -23,6 +23,57 @@ testTokenization('rust', [
] ]
} }
], ],
// Raw String
[
{
line: 'r"This is a raw string" ',
tokens: [
{ startIndex: 0, type: 'string.quote.rust' },
{ startIndex: 2, type: 'string.rust' },
{ startIndex: 22, type: 'string.quote.rust' },
{ startIndex: 23, type: 'white.rust' }
]
}
],
[
{
line: 'r#"This is a raw string"# ',
tokens: [
{ startIndex: 0, type: 'string.quote.rust' },
{ startIndex: 3, type: 'string.rust' },
{ startIndex: 23, type: 'string.quote.rust' },
{ startIndex: 25, type: 'white.rust' }
]
}
],
[
{
line: 'r##"This is a# raw string"## ',
tokens: [
{ startIndex: 0, type: 'string.quote.rust' },
{ startIndex: 4, type: 'string.rust' },
{ startIndex: 25, type: 'string.quote.rust' },
{ startIndex: 28, type: 'white.rust' }
]
}
],
[
{
line: 'r###"This is multi-line',
tokens: [
{ startIndex: 0, type: 'string.quote.rust' },
{ startIndex: 5, type: 'string.rust' }
]
},
{
line: 'raw "##string"### ',
tokens: [
{ startIndex: 0, type: 'string.rust' },
{ startIndex: 13, type: 'string.quote.rust' },
{ startIndex: 17, type: 'white.rust' }
]
}
],
// Byte literal // Byte literal
[ [
{ {
@ -40,17 +91,16 @@ testTokenization('rust', [
], ],
[ [
{ {
line: "'\"'", line: "'\\\"'",
tokens: [{ startIndex: 0, type: 'string.byteliteral.rust' }] tokens: [{ startIndex: 0, type: 'string.byteliteral.rust' }]
} }
], ],
[ [
{ {
line: "'\0'", line: "'\\0'",
tokens: [{ startIndex: 0, type: 'string.byteliteral.rust' }] tokens: [{ startIndex: 0, type: 'string.byteliteral.rust' }]
} }
], ],
// Comment // Comment
[ [
{ {

View file

@ -269,6 +269,8 @@ export const language = <languages.IMonarchLanguage>{
tokenizer: { tokenizer: {
root: [ root: [
// Raw string literals
[/r(#*)"/, { token: 'string.quote', bracket: '@open', next: '@stringraw.$1' }],
[ [
/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/, /[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/,
{ {
@ -287,7 +289,7 @@ export const language = <languages.IMonarchLanguage>{
// Lifetime annotations // Lifetime annotations
[/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/, 'identifier'], [/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/, 'identifier'],
// Byte literal // Byte literal
[/'\S'/, 'string.byteliteral'], [/'(\S|@escapes)'/, 'string.byteliteral'],
// Strings // Strings
[/"/, { token: 'string.quote', bracket: '@open', next: '@string' }], [/"/, { token: 'string.quote', bracket: '@open', next: '@string' }],
{ include: '@numbers' }, { include: '@numbers' },
@ -326,6 +328,21 @@ export const language = <languages.IMonarchLanguage>{
[/\\./, 'string.escape.invalid'], [/\\./, 'string.escape.invalid'],
[/"/, { token: 'string.quote', bracket: '@close', next: '@pop' }] [/"/, { token: 'string.quote', bracket: '@close', next: '@pop' }]
], ],
stringraw: [
[/[^"#]+/, { token: 'string' }],
[
/"(#*)/,
{
cases: {
'$1==$S2': { token: 'string.quote', bracket: '@close', next: '@pop' },
'@default': { token: 'string' }
}
}
],
[/["#]/, { token: 'string' }]
],
numbers: [ numbers: [
//Octal //Octal
[/(0o[0-7_]+)(@intSuffixes)?/, { token: 'number' }], [/(0o[0-7_]+)(@intSuffixes)?/, { token: 'number' }],