From efdccbfe5b55dc4033454eb2ac9bf091f195e796 Mon Sep 17 00:00:00 2001 From: Golmote Date: Mon, 12 Mar 2018 20:28:06 +0100 Subject: [PATCH] Rust: Improve char pattern so that lifetime annotations are matched better. Fix #1353 --- components/prism-rust.js | 10 +++++----- components/prism-rust.min.js | 2 +- tests/languages/rust/issue1353.test | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 tests/languages/rust/issue1353.test diff --git a/components/prism-rust.js b/components/prism-rust.js index 91f696a6dc..1a520c004e 100644 --- a/components/prism-rust.js +++ b/components/prism-rust.js @@ -26,14 +26,14 @@ Prism.languages.rust = { greedy: true } ], - 'lifetime-annotation': { - pattern: /'[^\s>']+(?!')/, - alias: 'symbol' - }, 'char': { - pattern: /'(?:\\.|[^\\\r\n'])*'/, + 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|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|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/, 'attribute': { diff --git a/components/prism-rust.min.js b/components/prism-rust.min.js index 81a6b0f4e4..62538942c6 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}],"lifetime-annotation":{pattern:/'[^\s>']+(?!')/,alias:"symbol"},"char":{pattern:/'(?:\\.|[^\\\r\n'])*'/,alias:"string"},keyword:/\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|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|struct|super|true|trait|type|typeof|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|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|struct|super|true|trait|type|typeof|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 diff --git a/tests/languages/rust/issue1353.test b/tests/languages/rust/issue1353.test new file mode 100644 index 0000000000..a74c58b584 --- /dev/null +++ b/tests/languages/rust/issue1353.test @@ -0,0 +1,16 @@ +(*e 0 b'a') + +---------------------------------------------------- + +[ + ["punctuation", "("], + ["operator", "*"], + "e ", + ["number", "0"], + ["char", "b'a'"], + ["punctuation", ")"] +] + +---------------------------------------------------- + +Makes sure lifetime annotations do not mess with bytes. See #1353. \ No newline at end of file