Commit a42b1557d7b6352083ecb427ca6cd7968d87e7ef

Michael Schmidt 2019-04-07T13:29:46

Rust: Improved punctuation and operators (#1839) This improves Rust's existing punctuation and operators, adds support for new ones, and updates the tests.

diff --git a/components/prism-rust.js b/components/prism-rust.js
index 3027fae..6201189 100644
--- a/components/prism-rust.js
+++ b/components/prism-rust.js
@@ -63,6 +63,6 @@ Prism.languages.rust = {
 			'operator': /[&*]/
 		}
 	},
-	'punctuation': /[{}[\];(),:]|\.+|->/,
-	'operator': /[-+*\/%!^]=?|=[=>]?|@|&[&=]?|\|[|=]?|<<?=?|>>?=?/
-};
\ No newline at end of file
+	'punctuation': /->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,
+	'operator': /[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/
+};
diff --git a/components/prism-rust.min.js b/components/prism-rust.min.js
index 8c06e56..7d3237f 100644
--- a/components/prism-rust.min.js
+++ b/components/prism-rust.min.js
@@ -1 +1 @@
-Prism.languages.rust={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:[{pattern:/b?r(#*)"(?:\\.|(?!"\1)[^\\\r\n])*"\1/,greedy:!0},{pattern:/b?"(?:\\.|[^\\\r\n"])*"/,greedy:!0}],char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u{(?:[\da-fA-F]_*){1,6}|.)|[^\\\r\n\t'])'/,alias:"string"},"lifetime-annotation":{pattern:/'[^\s>']+/,alias:"symbol"},keyword:/\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|dyn|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|Self|struct|super|true|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,attribute:{pattern:/#!?\[.+?\]/,greedy:!0,alias:"attr-name"},function:[/\w+(?=\s*\()/,/\w+!(?=\s*\(|\[)/],"macro-rules":{pattern:/\w+!/,alias:"function"},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\b/,"closure-params":{pattern:/\|[^|]*\|(?=\s*[{-])/,inside:{punctuation:/[|:,]/,operator:/[&*]/}},punctuation:/[{}[\];(),:]|\.+|->/,operator:/[-+*\/%!^]=?|=[=>]?|@|&[&=]?|\|[|=]?|<<?=?|>>?=?/};
\ No newline at end of file
+Prism.languages.rust={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:[{pattern:/b?r(#*)"(?:\\.|(?!"\1)[^\\\r\n])*"\1/,greedy:!0},{pattern:/b?"(?:\\.|[^\\\r\n"])*"/,greedy:!0}],char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u{(?:[\da-fA-F]_*){1,6}|.)|[^\\\r\n\t'])'/,alias:"string"},"lifetime-annotation":{pattern:/'[^\s>']+/,alias:"symbol"},keyword:/\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|dyn|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|Self|struct|super|true|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,attribute:{pattern:/#!?\[.+?\]/,greedy:!0,alias:"attr-name"},function:[/\w+(?=\s*\()/,/\w+!(?=\s*\(|\[)/],"macro-rules":{pattern:/\w+!/,alias:"function"},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\b/,"closure-params":{pattern:/\|[^|]*\|(?=\s*[{-])/,inside:{punctuation:/[|:,]/,operator:/[&*]/}},punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/};
\ No newline at end of file
diff --git a/tests/languages/rust/operator_feature.test b/tests/languages/rust/operator_feature.test
index 5295bdb..ae188f8 100644
--- a/tests/languages/rust/operator_feature.test
+++ b/tests/languages/rust/operator_feature.test
@@ -10,7 +10,7 @@
 | || |=
 < << <= <<=
 > >> >= >>=
-@
+@ ?
 
 ----------------------------------------------------
 
@@ -27,9 +27,9 @@
 	["operator", "|"], ["operator", "||"], ["operator", "|="],
 	["operator", "<"], ["operator", "<<"], ["operator", "<="], ["operator", "<<="],
 	["operator", ">"], ["operator", ">>"], ["operator", ">="], ["operator", ">>="],
-	["operator", "@"]
+	["operator", "@"], ["operator", "?"]
 ]
 
 ----------------------------------------------------
 
-Checks for all operators.
\ No newline at end of file
+Checks for all operators.
diff --git a/tests/languages/rust/punctuation_feature.test b/tests/languages/rust/punctuation_feature.test
new file mode 100644
index 0000000..025a29c
--- /dev/null
+++ b/tests/languages/rust/punctuation_feature.test
@@ -0,0 +1,29 @@
+->
+. .. ... ..=
+::
+{} [] ()
+; , :
+
+----------------------------------------------------
+
+[
+	["punctuation", "->"],
+	["punctuation", "."],
+	["punctuation", ".."],
+	["punctuation", "..."],
+	["punctuation", "..="],
+	["punctuation", "::"],
+	["punctuation", "{"],
+	["punctuation", "}"],
+	["punctuation", "["],
+	["punctuation", "]"],
+	["punctuation", "("],
+	["punctuation", ")"],
+	["punctuation", ";"],
+	["punctuation", ","],
+	["punctuation", ":"]
+]
+
+----------------------------------------------------
+
+Checks for all punctuation.