From 4049e5c6049f11370ff11c758d0a378cdd86e252 Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Fri, 10 Dec 2021 14:45:09 +0100 Subject: [PATCH] Rust: Improved `type-definition` and use standard tokens correctly (#3253) --- components/prism-rust.js | 5 +- components/prism-rust.min.js | 2 +- tests/languages/rust/class-name_feature.test | 35 +++- tests/languages/rust/keyword_feature.test | 176 +++++++++---------- 4 files changed, 125 insertions(+), 93 deletions(-) diff --git a/components/prism-rust.js b/components/prism-rust.js index 0f2f4b2b03..1e87336036 100644 --- a/components/prism-rust.js +++ b/components/prism-rust.js @@ -27,8 +27,7 @@ }, 'char': { pattern: /b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/, - greedy: true, - alias: 'string' + greedy: true }, 'attribute': { pattern: /#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/, @@ -71,7 +70,7 @@ alias: 'function' }, 'type-definition': { - pattern: /(\b(?:enum|struct|union)\s+)\w+/, + pattern: /(\b(?:enum|struct|trait|type|union)\s+)\w+/, lookbehind: true, alias: 'class-name' }, diff --git a/components/prism-rust.min.js b/components/prism-rust.min.js index 941742473d..52595ee387 100644 --- a/components/prism-rust.min.js +++ b/components/prism-rust.min.js @@ -1 +1 @@ -!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",t=0;t<2;t++)a=a.replace(//g,function(){return a});a=a.replace(//g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0,alias:"string"},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); \ No newline at end of file +!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",t=0;t<2;t++)a=a.replace(//g,function(){return a});a=a.replace(//g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); \ No newline at end of file diff --git a/tests/languages/rust/class-name_feature.test b/tests/languages/rust/class-name_feature.test index dfe34d7572..8571bd884b 100644 --- a/tests/languages/rust/class-name_feature.test +++ b/tests/languages/rust/class-name_feature.test @@ -16,6 +16,12 @@ enum Foo { } } +pub trait Summary { + fn summarize(&self) -> String; +} + +type Point = (u8, u8); + ---------------------------------------------------- [ @@ -91,7 +97,34 @@ enum Foo { ["punctuation", "}"], - ["punctuation", "}"] + ["punctuation", "}"], + + ["keyword", "pub"], + ["keyword", "trait"], + ["type-definition", "Summary"], + ["punctuation", "{"], + + ["keyword", "fn"], + ["function-definition", "summarize"], + ["punctuation", "("], + ["operator", "&"], + ["keyword", "self"], + ["punctuation", ")"], + ["punctuation", "->"], + ["class-name", "String"], + ["punctuation", ";"], + + ["punctuation", "}"], + + ["keyword", "type"], + ["type-definition", "Point"], + ["operator", "="], + ["punctuation", "("], + ["keyword", "u8"], + ["punctuation", ","], + ["keyword", "u8"], + ["punctuation", ")"], + ["punctuation", ";"] ] ---------------------------------------------------- diff --git a/tests/languages/rust/keyword_feature.test b/tests/languages/rust/keyword_feature.test index a55ca38deb..0f4563366d 100644 --- a/tests/languages/rust/keyword_feature.test +++ b/tests/languages/rust/keyword_feature.test @@ -1,107 +1,107 @@ -abstract -as -async -await -become -box -break -const -continue +abstract; +as; +async; +await; +become; +box; +break; +const; +continue; crate; -do -dyn -else +do; +dyn; +else; enum; -extern -final +extern; +final; fn; -for -if -impl -in -let -loop -macro -match +for; +if; +impl; +in; +let; +loop; +macro; +match; mod; -move -mut -override -priv -pub -ref -return -self -Self -static +move; +mut; +override; +priv; +pub; +ref; +return; +self; +Self; +static; struct; -super -trait -try -type -typeof +super; +trait; +try; +type; +typeof; union; -unsafe -unsized -use -virtual -where -while -yield +unsafe; +unsized; +use; +virtual; +where; +while; +yield; ---------------------------------------------------- [ - ["keyword", "abstract"], - ["keyword", "as"], - ["keyword", "async"], - ["keyword", "await"], - ["keyword", "become"], - ["keyword", "box"], - ["keyword", "break"], - ["keyword", "const"], - ["keyword", "continue"], + ["keyword", "abstract"], ["punctuation", ";"], + ["keyword", "as"], ["punctuation", ";"], + ["keyword", "async"], ["punctuation", ";"], + ["keyword", "await"], ["punctuation", ";"], + ["keyword", "become"], ["punctuation", ";"], + ["keyword", "box"], ["punctuation", ";"], + ["keyword", "break"], ["punctuation", ";"], + ["keyword", "const"], ["punctuation", ";"], + ["keyword", "continue"], ["punctuation", ";"], ["keyword", "crate"], ["punctuation", ";"], - ["keyword", "do"], - ["keyword", "dyn"], - ["keyword", "else"], + ["keyword", "do"], ["punctuation", ";"], + ["keyword", "dyn"], ["punctuation", ";"], + ["keyword", "else"], ["punctuation", ";"], ["keyword", "enum"], ["punctuation", ";"], - ["keyword", "extern"], - ["keyword", "final"], + ["keyword", "extern"], ["punctuation", ";"], + ["keyword", "final"], ["punctuation", ";"], ["keyword", "fn"], ["punctuation", ";"], - ["keyword", "for"], - ["keyword", "if"], - ["keyword", "impl"], - ["keyword", "in"], - ["keyword", "let"], - ["keyword", "loop"], - ["keyword", "macro"], - ["keyword", "match"], + ["keyword", "for"], ["punctuation", ";"], + ["keyword", "if"], ["punctuation", ";"], + ["keyword", "impl"], ["punctuation", ";"], + ["keyword", "in"], ["punctuation", ";"], + ["keyword", "let"], ["punctuation", ";"], + ["keyword", "loop"], ["punctuation", ";"], + ["keyword", "macro"], ["punctuation", ";"], + ["keyword", "match"], ["punctuation", ";"], ["keyword", "mod"], ["punctuation", ";"], - ["keyword", "move"], - ["keyword", "mut"], - ["keyword", "override"], - ["keyword", "priv"], - ["keyword", "pub"], - ["keyword", "ref"], - ["keyword", "return"], - ["keyword", "self"], - ["keyword", "Self"], - ["keyword", "static"], + ["keyword", "move"], ["punctuation", ";"], + ["keyword", "mut"], ["punctuation", ";"], + ["keyword", "override"], ["punctuation", ";"], + ["keyword", "priv"], ["punctuation", ";"], + ["keyword", "pub"], ["punctuation", ";"], + ["keyword", "ref"], ["punctuation", ";"], + ["keyword", "return"], ["punctuation", ";"], + ["keyword", "self"], ["punctuation", ";"], + ["keyword", "Self"], ["punctuation", ";"], + ["keyword", "static"], ["punctuation", ";"], ["keyword", "struct"], ["punctuation", ";"], - ["keyword", "super"], - ["keyword", "trait"], - ["keyword", "try"], - ["keyword", "type"], - ["keyword", "typeof"], + ["keyword", "super"], ["punctuation", ";"], + ["keyword", "trait"], ["punctuation", ";"], + ["keyword", "try"], ["punctuation", ";"], + ["keyword", "type"], ["punctuation", ";"], + ["keyword", "typeof"], ["punctuation", ";"], ["keyword", "union"], ["punctuation", ";"], - ["keyword", "unsafe"], - ["keyword", "unsized"], - ["keyword", "use"], - ["keyword", "virtual"], - ["keyword", "where"], - ["keyword", "while"], - ["keyword", "yield"] + ["keyword", "unsafe"], ["punctuation", ";"], + ["keyword", "unsized"], ["punctuation", ";"], + ["keyword", "use"], ["punctuation", ";"], + ["keyword", "virtual"], ["punctuation", ";"], + ["keyword", "where"], ["punctuation", ";"], + ["keyword", "while"], ["punctuation", ";"], + ["keyword", "yield"], ["punctuation", ";"] ] ----------------------------------------------------