Fix a crash in HyTypeError.__str__

This commit is contained in:
Kodi Arfer 2017-09-20 10:40:52 -07:00
parent db210929d0
commit 39785b4657
3 changed files with 49 additions and 31 deletions

2
NEWS
View File

@ -39,6 +39,8 @@ Changes from 0.13.0
* Fixed a crash when `with` suppresses an exception. `with` now returns
`None` in this case.
* Fixed a crash when --repl-output-fn raises an exception
* Fixed a crash when HyTypeError was raised with objects that had no
source position
* `assoc` now evaluates its arguments only once each
* `break` and `continue` now raise an error when given arguments
instead of silently ignoring them

View File

@ -43,6 +43,11 @@ class HyTypeError(TypeError):
def __str__(self):
result = ""
if all(getattr(self.expression, x, None) is not None
for x in ("start_line", "start_column", "end_column")):
line = self.expression.start_line
start = self.expression.start_column
end = self.expression.end_column
@ -56,8 +61,6 @@ class HyTypeError(TypeError):
else:
length = len(source[0]) - start
result = ""
result += ' File "%s", line %d, column %d\n\n' % (self.filename,
line,
start)
@ -79,6 +82,9 @@ class HyTypeError(TypeError):
result += ' %s\n' % colored.red("".join(source[-1]))
result += ' %s\n' % colored.green('-'*(end-1) + '^')
else:
result += ' File "%s", unknown location\n' % self.filename
result += colored.yellow("%s: %s\n\n" %
(self.__class__.__name__,
self.message.encode('utf-8')))

View File

@ -138,6 +138,16 @@ def test_bin_hy_stdin_except_do():
assert "zzz" in output
def test_bin_hy_stdin_unlocatable_hytypeerror():
# https://github.com/hylang/hy/issues/1412
# The chief test of interest here is the returncode assertion
# inside run_cmd.
_, err = run_cmd("hy", """
(import hy.errors)
(raise (hy.errors.HyTypeError '[] (+ "A" "Z")))""")
assert "AZ" in err
def test_bin_hy_stdin_bad_repr():
# https://github.com/hylang/hy/issues/1389
output, err = run_cmd("hy", """