Shell session: Commands prefixed with a path are now detected (#2686)
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
diff --git a/components/prism-shell-session.js b/components/prism-shell-session.js
index f16b1b2..7e0f5e8 100644
--- a/components/prism-shell-session.js
+++ b/components/prism-shell-session.js
@@ -15,21 +15,19 @@
Prism.languages['shell-session'] = {
'command': {
- pattern: RegExp(/^(?:[^\s@:$#*!/\\]+@[^\s@:$#*!/\\]+(?::[^\0-\x1F$#*?"<>:;|]+)?)?[$#](?:[^\\\r\n'"<]|\\.|<<str>>)+/.source.replace(/<<str>>/g, function () { return strings; }), 'm'),
+ pattern: RegExp(/^(?:[^\s@:$#*!/\\]+@[^\s@:$#*!/\\]+(?::[^\0-\x1F$#*?"<>:;|]+)?|[^\0-\x1F$#*?"<>:;|]+)?[$#](?:[^\\\r\n'"<]|\\.|<<str>>)+/.source.replace(/<<str>>/g, function () { return strings; }), 'm'),
greedy: true,
inside: {
'info': {
// foo@bar:~/files$ exit
// foo@bar$ exit
+ // ~/files$ exit
pattern: /^[^#$]+/,
alias: 'punctuation',
inside: {
- 'path': {
- pattern: /(:)[\s\S]+/,
- lookbehind: true
- },
- 'user': /^[^:]+/,
- 'punctuation': /:/
+ 'user': /^[^\s@:$#*!/\\]+@[^\s@:$#*!/\\]+/,
+ 'punctuation': /:/,
+ 'path': /[\s\S]+/
}
},
'bash': {
diff --git a/components/prism-shell-session.min.js b/components/prism-shell-session.min.js
index 98465f2..b21959c 100644
--- a/components/prism-shell-session.min.js
+++ b/components/prism-shell-session.min.js
@@ -1 +1 @@
-!function(s){var n=["([\"'])(?:\\\\[^]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|(?!\\1)[^\\\\`$])*\\1","<<-?\\s*([\"']?)(\\w+)\\2\\s[^]*?[\r\n]\\3"].join("|");s.languages["shell-session"]={command:{pattern:RegExp('^(?:[^\\s@:$#*!/\\\\]+@[^\\s@:$#*!/\\\\]+(?::[^\0-\\x1F$#*?"<>:;|]+)?)?[$#](?:[^\\\\\r\n\'"<]|\\\\.|<<str>>)+'.replace(/<<str>>/g,function(){return n}),"m"),greedy:!0,inside:{info:{pattern:/^[^#$]+/,alias:"punctuation",inside:{path:{pattern:/(:)[\s\S]+/,lookbehind:!0},user:/^[^:]+/,punctuation:/:/}},bash:{pattern:/(^[$#]\s*)\S[\s\S]*/,lookbehind:!0,alias:"language-bash",inside:s.languages.bash},"shell-symbol":{pattern:/^[$#]/,alias:"important"}}},output:/.(?:.*(?:[\r\n]|.$))*/},s.languages["sh-session"]=s.languages.shellsession=s.languages["shell-session"]}(Prism);
\ No newline at end of file
+!function(s){var n=["([\"'])(?:\\\\[^]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|(?!\\1)[^\\\\`$])*\\1","<<-?\\s*([\"']?)(\\w+)\\2\\s[^]*?[\r\n]\\3"].join("|");s.languages["shell-session"]={command:{pattern:RegExp('^(?:[^\\s@:$#*!/\\\\]+@[^\\s@:$#*!/\\\\]+(?::[^\0-\\x1F$#*?"<>:;|]+)?|[^\0-\\x1F$#*?"<>:;|]+)?[$#](?:[^\\\\\r\n\'"<]|\\\\.|<<str>>)+'.replace(/<<str>>/g,function(){return n}),"m"),greedy:!0,inside:{info:{pattern:/^[^#$]+/,alias:"punctuation",inside:{user:/^[^\s@:$#*!/\\]+@[^\s@:$#*!/\\]+/,punctuation:/:/,path:/[\s\S]+/}},bash:{pattern:/(^[$#]\s*)\S[\s\S]*/,lookbehind:!0,alias:"language-bash",inside:s.languages.bash},"shell-symbol":{pattern:/^[$#]/,alias:"important"}}},output:/.(?:.*(?:[\r\n]|.$))*/},s.languages["sh-session"]=s.languages.shellsession=s.languages["shell-session"]}(Prism);
\ No newline at end of file
diff --git a/tests/languages/shell-session/issue2685.test b/tests/languages/shell-session/issue2685.test
new file mode 100644
index 0000000..1601e39
--- /dev/null
+++ b/tests/languages/shell-session/issue2685.test
@@ -0,0 +1,29 @@
+/home/user$ echo "Hello World"
+Hello World
+/home/user$ exit
+
+----------------------------------------------------
+
+[
+ ["command", [
+ ["info", [
+ ["path", "/home/user"]
+ ]],
+ ["shell-symbol", "$"],
+ ["bash", [
+ ["builtin", "echo"],
+ ["string", ["\"Hello World\""]]
+ ]]
+ ]],
+
+ ["output", "Hello World\r\n"],
+ ["command", [
+ ["info", [
+ ["path", "/home/user"]
+ ]],
+ ["shell-symbol", "$"],
+ ["bash", [
+ ["builtin", "exit"]
+ ]]
+ ]]
+]