Rust: Improved `type-definition` and use standard tokens correctly (#3253)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
diff --git a/components/prism-rust.js b/components/prism-rust.js
index 0f2f4b2..1e87336 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 9417424..52595ee 100644
--- a/components/prism-rust.min.js
+++ b/components/prism-rust.min.js
@@ -1 +1 @@
-!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|<self>)*\\*/",t=0;t<2;t++)a=a.replace(/<self>/g,function(){return a});a=a.replace(/<self>/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="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|<self>)*\\*/",t=0;t<2;t++)a=a.replace(/<self>/g,function(){return a});a=a.replace(/<self>/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 dfe34d7..8571bd8 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 a55ca38..0f45633 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", ";"]
]
----------------------------------------------------