mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 17:25:39 +01:00
Rust: Add support for highlighting raw strings and fix chars with escapes.
Rust's raw strings were previously not supported, and chars did not correctly handle escapes. Fixes #2552 Fixes #2481
This commit is contained in:
parent
4ed52cbd2b
commit
767677f0f6
2 changed files with 71 additions and 4 deletions
|
|
@ -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
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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' }],
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue