Skip to content

Commit 6749f63

Browse files
author
whitequark
committedAug 7, 2015
Add support for expansions to source.Range.
1 parent db8947c commit 6749f63

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed
 

Diff for: ‎pythonparser/diagnostic.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,17 @@ def render(self, only_line=False, colored=False):
9191
else:
9292
location = str(self.location)
9393

94+
notes = list(self.notes)
95+
if self.level != "note":
96+
expanded_location = self.location.expanded_from
97+
while expanded_location is not None:
98+
notes.append(Diagnostic("note",
99+
"expanded from here", {},
100+
self.location.expanded_from))
101+
expanded_location = expanded_location.expanded_from
102+
94103
rendered_notes = reduce(list.__add__, [note.render(only_line, colored)
95-
for note in self.notes], [])
104+
for note in notes], [])
96105
if colored:
97106
if self.level in ("error", "fatal"):
98107
level_color = 31 # red
@@ -105,13 +114,13 @@ def render(self, only_line=False, colored=False):
105114
format(location, level_color, self.level, self.message()),
106115
source_line,
107116
"\x1b[1;32m{}\x1b[0m".format(highlight_line.decode("utf-8"))
108-
]
117+
] + rendered_notes
109118
else:
110119
return [
111120
"{}: {}: {}".format(location, self.level, self.message()),
112121
source_line,
113122
highlight_line.decode("utf-8")
114-
]
123+
] + rendered_notes
115124

116125

117126
class Error(Exception):

Diff for: ‎pythonparser/source.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,13 @@ class Range:
7272
7373
:ivar begin_pos: (integer) offset of the first character
7474
:ivar end_pos: (integer) offset of the character before the last
75+
:ivar expanded_from: (Range or None) the range from which this range was expanded
7576
"""
76-
def __init__(self, source_buffer, begin_pos, end_pos):
77+
def __init__(self, source_buffer, begin_pos, end_pos, expanded_from=None):
7778
self.source_buffer = source_buffer
7879
self.begin_pos = begin_pos
7980
self.end_pos = end_pos
81+
self.expanded_from = expanded_from
8082

8183
def __repr__(self):
8284
"""
@@ -85,6 +87,14 @@ def __repr__(self):
8587
return "Range(\"%s\", %d, %d)" % \
8688
(self.source_buffer.name, self.begin_pos, self.end_pos)
8789

90+
def chain(self, expanded_from):
91+
"""
92+
Returns a range identical to this one, but indicating that
93+
it was expanded from the range `expanded_from`.
94+
"""
95+
return Range(self.source_buffer, self.begin_pos, self.begin_pos,
96+
expanded_from=expanded_from)
97+
8898
def begin(self):
8999
"""
90100
Returns a zero-length range located just before the beginning of this range.

0 commit comments

Comments
 (0)
Please sign in to comment.