mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 08:24:40 +01:00
fixed multiline autowrapping in @(expr)
This commit is contained in:
parent
3a31d6ff31
commit
3b0fe9144d
4 changed files with 40 additions and 0 deletions
17
news/atml.rst
Normal file
17
news/atml.rst
Normal file
|
@ -0,0 +1,17 @@
|
|||
**Added:** None
|
||||
|
||||
**Changed:** None
|
||||
|
||||
**Deprecated:** None
|
||||
|
||||
**Removed:** None
|
||||
|
||||
**Fixed:**
|
||||
|
||||
* Fixed issue with multiline string inside of ``@(expr)`` in
|
||||
unwrapped subprocesses. For example, the following now works::
|
||||
|
||||
echo @("""hello
|
||||
mom""")
|
||||
|
||||
**Security:** None
|
|
@ -98,6 +98,12 @@ def test_pyeval_redirect():
|
|||
code = 'echo @("foo") > bar\n'
|
||||
assert check_parse(code)
|
||||
|
||||
|
||||
def test_pyeval_multiline_str():
|
||||
code = 'echo @("""hello\nmom""")\n'
|
||||
assert check_parse(code)
|
||||
|
||||
|
||||
def test_echo_comma():
|
||||
code = 'echo ,\n'
|
||||
assert check_parse(code)
|
||||
|
@ -114,3 +120,5 @@ def test_echo_comma_2val():
|
|||
def test_echo_line_cont():
|
||||
code = 'echo "1 \\\n2"\n'
|
||||
assert check_parse(code)
|
||||
|
||||
|
||||
|
|
|
@ -292,6 +292,13 @@ def test_subproc_toks_pyeval():
|
|||
assert exp == obs
|
||||
|
||||
|
||||
def test_subproc_toks_pyeval_multiline_string():
|
||||
s = 'echo @("""hello\nmom""")'
|
||||
exp = '![{0}]'.format(s)
|
||||
obs = subproc_toks(s, lexer=LEXER, returnline=True)
|
||||
assert exp == obs
|
||||
|
||||
|
||||
def test_subproc_toks_twopyeval():
|
||||
s = 'echo @(1+1) @(40 + 2)'
|
||||
exp = '![{0}]'.format(s)
|
||||
|
|
|
@ -342,6 +342,11 @@ def find_next_break(line, mincol=0, lexer=None):
|
|||
return maxcol
|
||||
|
||||
|
||||
def _offset_from_prev_lines(line, last):
|
||||
lines = line.splitlines(keepends=True)[:last]
|
||||
return sum(map(len, lines))
|
||||
|
||||
|
||||
def subproc_toks(line, mincol=-1, maxcol=None, lexer=None, returnline=False,
|
||||
greedy=False):
|
||||
"""Encapsulates tokens in a source code line in a uncaptured
|
||||
|
@ -431,6 +436,9 @@ def subproc_toks(line, mincol=-1, maxcol=None, lexer=None, returnline=False,
|
|||
return # handle comment lines
|
||||
elif saw_macro or greedy:
|
||||
end_offset = len(toks[-1].value.rstrip()) + 1
|
||||
if toks[0].lineno != toks[-1].lineno:
|
||||
# handle multiline cases
|
||||
end_offset += _offset_from_prev_lines(line, toks[-1].lineno)
|
||||
beg, end = toks[0].lexpos, (toks[-1].lexpos + end_offset)
|
||||
end = len(line[:end].rstrip())
|
||||
rtn = '![' + line[beg:end] + ']'
|
||||
|
|
Loading…
Add table
Reference in a new issue