Add support for pipeline operator

Fixes #1530
This commit is contained in:
Liam Newman 2020-04-05 09:12:05 -07:00
parent 71089937ae
commit a98a43d39d
6 changed files with 77 additions and 49 deletions

View File

@ -75,7 +75,7 @@ var dot_pattern = /[^\d\.]/;
var positionable_operators = (
">>> === !== " +
"<< && >= ** != == <= >> || " +
"<< && >= ** != == <= >> || |> " +
"< / - + > : & % ? ^ | *").split(' ');
// IMPORTANT: this must be sorted longest to shortest or tokenizing many not work.
@ -83,7 +83,7 @@ var positionable_operators = (
var punct =
">>>= " +
"... >>= <<= === >>> !== **= " +
"=> ^= :: /= << <= == && -= >= >> != -- += ** || ++ %= &= *= |= " +
"=> ^= :: /= << <= == && -= >= >> != -- += ** || ++ %= &= *= |= |> " +
"= ! ? > < : / ^ - + * & % ~ |";
punct = punct.replace(/[-[\]{}()*+?.,\\^$|#]/g, "\\$&");

View File

@ -3227,7 +3227,7 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
opts.preserve_newlines = false;
bt(
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3240,7 +3240,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3264,7 +3265,7 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'-ad',
// -- output --
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3277,7 +3278,7 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
opts.preserve_newlines = false;
bt(
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3290,7 +3291,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3314,7 +3316,7 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'-ad',
// -- output --
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3327,7 +3329,7 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
opts.preserve_newlines = false;
bt(
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3340,7 +3342,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3364,7 +3367,7 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'-ad',
// -- output --
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3377,7 +3380,7 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
opts.preserve_newlines = false;
bt(
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3390,7 +3393,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3414,7 +3418,7 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'-ad',
// -- output --
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3435,7 +3439,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3464,7 +3469,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
' f;\n' +
'var res = g & h |\n' +
' i ^\n' +
' j;\n' +
' j |>\n' +
' console.log;\n' +
'var res = (k &&\n' +
' l ||\n' +
' m) ?\n' +
@ -3557,7 +3563,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3586,7 +3593,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
' f;\n' +
'var res = g & h |\n' +
' i ^\n' +
' j;\n' +
' j |>\n' +
' console.log;\n' +
'var res = (k &&\n' +
' l ||\n' +
' m) ?\n' +
@ -3681,7 +3689,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3710,7 +3719,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
' % f;\n' +
'var res = g & h\n' +
' | i\n' +
' ^ j;\n' +
' ^ j\n' +
' |> console.log;\n' +
'var res = (k\n' +
' && l\n' +
' || m)\n' +
@ -3804,7 +3814,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3834,7 +3845,8 @@ function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify,
' f;\n' +
'var res = g & h\n' +
' | i ^\n' +
' j;\n' +
' j\n' +
' |> console.log;\n' +
'var res = (k &&\n' +
' l\n' +
' || m) ?\n' +

View File

@ -67,12 +67,12 @@ digit = re.compile(r'[0-9]')
positionable_operators = frozenset(
(">>> === !== " +
"<< && >= ** != == <= >> || " +
"<< && >= ** != == <= >> || |> " +
"< / - + > : & % ? ^ | *").split(' '))
punct = (">>>= " +
"... >>= <<= === >>> !== **= " +
"=> ^= :: /= << <= == && -= >= >> != -- += ** || ++ %= &= *= |= " +
"=> ^= :: /= << <= == && -= >= >> != -- += ** || ++ %= &= *= |= |> " +
"= ! ? > < : / ^ - + * & % ~ |")
punct = re.compile(r'([-[\]{}()*+?.,\\^$|#])').sub(r'\\\1', punct)

View File

@ -2987,7 +2987,7 @@ class TestJSBeautifier(unittest.TestCase):
self.options.preserve_newlines = false
bt(
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3000,7 +3000,8 @@ class TestJSBeautifier(unittest.TestCase):
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3024,7 +3025,7 @@ class TestJSBeautifier(unittest.TestCase):
'-ad',
# -- output --
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3036,7 +3037,7 @@ class TestJSBeautifier(unittest.TestCase):
self.options.preserve_newlines = false
bt(
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3049,7 +3050,8 @@ class TestJSBeautifier(unittest.TestCase):
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3073,7 +3075,7 @@ class TestJSBeautifier(unittest.TestCase):
'-ad',
# -- output --
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3085,7 +3087,7 @@ class TestJSBeautifier(unittest.TestCase):
self.options.preserve_newlines = false
bt(
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3098,7 +3100,8 @@ class TestJSBeautifier(unittest.TestCase):
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3122,7 +3125,7 @@ class TestJSBeautifier(unittest.TestCase):
'-ad',
# -- output --
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3134,7 +3137,7 @@ class TestJSBeautifier(unittest.TestCase):
self.options.preserve_newlines = false
bt(
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3147,7 +3150,8 @@ class TestJSBeautifier(unittest.TestCase):
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3171,7 +3175,7 @@ class TestJSBeautifier(unittest.TestCase):
'-ad',
# -- output --
'var res = a + b - c / d * e % f;\n' +
'var res = g & h | i ^ j;\n' +
'var res = g & h | i ^ j |> console.log;\n' +
'var res = (k && l || m) ? n : o;\n' +
'var res = p >> q << r >>> s;\n' +
'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
@ -3191,7 +3195,8 @@ class TestJSBeautifier(unittest.TestCase):
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3220,7 +3225,8 @@ class TestJSBeautifier(unittest.TestCase):
' f;\n' +
'var res = g & h |\n' +
' i ^\n' +
' j;\n' +
' j |>\n' +
' console.log;\n' +
'var res = (k &&\n' +
' l ||\n' +
' m) ?\n' +
@ -3312,7 +3318,8 @@ class TestJSBeautifier(unittest.TestCase):
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3341,7 +3348,8 @@ class TestJSBeautifier(unittest.TestCase):
' f;\n' +
'var res = g & h |\n' +
' i ^\n' +
' j;\n' +
' j |>\n' +
' console.log;\n' +
'var res = (k &&\n' +
' l ||\n' +
' m) ?\n' +
@ -3435,7 +3443,8 @@ class TestJSBeautifier(unittest.TestCase):
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3464,7 +3473,8 @@ class TestJSBeautifier(unittest.TestCase):
' % f;\n' +
'var res = g & h\n' +
' | i\n' +
' ^ j;\n' +
' ^ j\n' +
' |> console.log;\n' +
'var res = (k\n' +
' && l\n' +
' || m)\n' +
@ -3557,7 +3567,8 @@ class TestJSBeautifier(unittest.TestCase):
'f;\n' +
' var res = g & h\n' +
'| i ^\n' +
'j;\n' +
'j\n' +
'|> console.log;\n' +
'var res = (k &&\n' +
'l\n' +
'|| m) ?\n' +
@ -3587,7 +3598,8 @@ class TestJSBeautifier(unittest.TestCase):
' f;\n' +
'var res = g & h\n' +
' | i ^\n' +
' j;\n' +
' j\n' +
' |> console.log;\n' +
'var res = (k &&\n' +
' l\n' +
' || m) ?\n' +

View File

@ -5,7 +5,7 @@
var operator_position = {
sanity: [
'var res = a + b - c / d * e % f;',
'var res = g & h | i ^ j;',
'var res = g & h | i ^ j |> console.log;',
'var res = (k && l || m) ? n : o;',
'var res = p >> q << r >>> s;',
'var res = t === u !== v != w == x >= y <= z > aa < ab;',
@ -19,7 +19,8 @@ var operator_position = {
'f;',
' var res = g & h',
'| i ^',
'j;',
'j',
'|> console.log;',
'var res = (k &&',
'l',
'|| m) ?',

View File

@ -1762,7 +1762,8 @@ exports.test_data = {
' f;',
'var res = g & h |',
' i ^',
' j;',
' j |>',
' console.log;',
'var res = (k &&',
' l ||',
' m) ?',
@ -1834,7 +1835,8 @@ exports.test_data = {
' % f;',
'var res = g & h',
' | i',
' ^ j;',
' ^ j',
' |> console.log;',
'var res = (k',
' && l',
' || m)',
@ -1906,7 +1908,8 @@ exports.test_data = {
' f;',
'var res = g & h',
' | i ^',
' j;',
' j',
' |> console.log;',
'var res = (k &&',
' l',
' || m) ?',