1
0
mirror of https://github.com/alecthomas/chroma.git synced 2025-03-19 21:10:15 +02:00

Rust: Generalize declaritive and function-like macros (#742)

This commit is contained in:
CosmicHorror 2023-01-29 20:55:50 -07:00 committed by GitHub
parent 55b0e59213
commit f5f48e206a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 113 additions and 3 deletions

View File

@ -218,9 +218,6 @@
<rule pattern="(DoubleEndedIterator|ExactSizeIterator|IntoIterator|PartialOrd|PartialEq|ToString|Iterator|ToOwned|Default|Result|String|FnOnce|Extend|Option|FnMut|Unpin|Sized|AsRef|AsMut|Clone|None|From|Into|Sync|drop|Send|Drop|Copy|Some|Ord|Err|Box|Vec|Eq|Ok|Fn)\b">
<token type="NameBuiltin"/>
</rule>
<rule pattern="(is_powerpc64_feature_detected|is_aarch64_feature_detected|is_powerpc_feature_detected|is_mips64_feature_detected|is_mips_feature_detected|is_x86_feature_detected|is_arm_feature_detected|debug_assert_ne|debug_assert_eq|format_args_nl|concat_idents|unimplemented|include_bytes|compile_error|debug_assert|thread_local|trace_macros|macro_rules|format_args|module_path|unreachable|include_str|option_env|global_asm|log_syntax|stringify|assert_ne|assert_eq|llvm_asm|eprintln|include|matches|println|writeln|format|column|assert|concat|eprint|write|panic|print|file|todo|line|env|dbg|vec|cfg|asm)!">
<token type="NameFunctionMagic"/>
</rule>
<rule pattern="::\b">
<token type="Text"/>
</rule>
@ -297,6 +294,13 @@
<rule pattern="\b(r#)?_?([A-Z][A-Z0-9_]*){2,}\b">
<token type="NameConstant"/>
</rule>
<rule pattern="([a-zA-Z_]\w*!)(\s*)(\(|\[|\{)">
<bygroups>
<token type="NameFunctionMagic"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
</bygroups>
</rule>
<rule pattern="(r#)?[a-zA-Z_]\w*">
<token type="Name"/>
</rule>

14
lexers/testdata/rust/proc_macros.actual vendored Normal file
View File

@ -0,0 +1,14 @@
use smallvec::{smallvec, SmallVec};
lazy_static::lazy_static! {
static ref ONE: usize = 1;
}
fn main() {
pretty_assertions::assert_eq!(*ONE, *ONE);
let _: SmallVec<[_; 16]> = smallvec![1, 2, 3];
// And some builtin ones
println!("Hello, world!");
panic!();
}

View File

@ -0,0 +1,92 @@
[
{"type":"Keyword","value":"use"},
{"type":"TextWhitespace","value":" "},
{"type":"Name","value":"smallvec"},
{"type":"Text","value":"::"},
{"type":"Punctuation","value":"{"},
{"type":"Name","value":"smallvec"},
{"type":"Punctuation","value":","},
{"type":"TextWhitespace","value":" "},
{"type":"Name","value":"SmallVec"},
{"type":"Punctuation","value":"};"},
{"type":"TextWhitespace","value":"\n\n"},
{"type":"Name","value":"lazy_static"},
{"type":"Text","value":"::"},
{"type":"NameFunctionMagic","value":"lazy_static!"},
{"type":"TextWhitespace","value":" "},
{"type":"Punctuation","value":"{"},
{"type":"TextWhitespace","value":"\n "},
{"type":"Keyword","value":"static"},
{"type":"TextWhitespace","value":" "},
{"type":"Keyword","value":"ref"},
{"type":"TextWhitespace","value":" "},
{"type":"NameConstant","value":"ONE"},
{"type":"Text","value":": "},
{"type":"KeywordType","value":"usize"},
{"type":"Text","value":" "},
{"type":"Operator","value":"="},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralNumberInteger","value":"1"},
{"type":"Punctuation","value":";"},
{"type":"TextWhitespace","value":"\n"},
{"type":"Punctuation","value":"}"},
{"type":"TextWhitespace","value":"\n\n"},
{"type":"Keyword","value":"fn"},
{"type":"Text","value":" "},
{"type":"NameFunction","value":"main"},
{"type":"Punctuation","value":"()"},
{"type":"TextWhitespace","value":" "},
{"type":"Punctuation","value":"{"},
{"type":"TextWhitespace","value":"\n "},
{"type":"Name","value":"pretty_assertions"},
{"type":"Text","value":"::"},
{"type":"NameFunctionMagic","value":"assert_eq!"},
{"type":"Punctuation","value":"("},
{"type":"Operator","value":"*"},
{"type":"NameConstant","value":"ONE"},
{"type":"Punctuation","value":","},
{"type":"TextWhitespace","value":" "},
{"type":"Operator","value":"*"},
{"type":"NameConstant","value":"ONE"},
{"type":"Punctuation","value":");"},
{"type":"TextWhitespace","value":"\n "},
{"type":"KeywordDeclaration","value":"let"},
{"type":"TextWhitespace","value":" "},
{"type":"Name","value":"_"},
{"type":"Text","value":": "},
{"type":"NameClass","value":"SmallVec"},
{"type":"Operator","value":"\u003c"},
{"type":"Punctuation","value":"["},
{"type":"Name","value":"_"},
{"type":"Punctuation","value":";"},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralNumberInteger","value":"16"},
{"type":"Punctuation","value":"]"},
{"type":"Operator","value":"\u003e"},
{"type":"TextWhitespace","value":" "},
{"type":"Operator","value":"="},
{"type":"TextWhitespace","value":" "},
{"type":"NameFunctionMagic","value":"smallvec!"},
{"type":"Punctuation","value":"["},
{"type":"LiteralNumberInteger","value":"1"},
{"type":"Punctuation","value":","},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralNumberInteger","value":"2"},
{"type":"Punctuation","value":","},
{"type":"TextWhitespace","value":" "},
{"type":"LiteralNumberInteger","value":"3"},
{"type":"Punctuation","value":"];"},
{"type":"TextWhitespace","value":"\n\n "},
{"type":"CommentSingle","value":"// And some builtin ones\n"},
{"type":"TextWhitespace","value":" "},
{"type":"NameFunctionMagic","value":"println!"},
{"type":"Punctuation","value":"("},
{"type":"LiteralString","value":"\"Hello, world!\""},
{"type":"Punctuation","value":");"},
{"type":"TextWhitespace","value":"\n "},
{"type":"NameFunctionMagic","value":"panic!"},
{"type":"Punctuation","value":"();"},
{"type":"TextWhitespace","value":"\n"},
{"type":"Punctuation","value":"}"},
{"type":"TextWhitespace","value":"\n"}
]