Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_linenumbers(self):
ln = asttokens.LineNumbers("Hello\nworld\nThis\n\nis\n\na test.\n")
self.assertEqual(ln.line_to_offset(1, 0), 0)
self.assertEqual(ln.line_to_offset(1, 5), 5)
self.assertEqual(ln.line_to_offset(2, 0), 6)
self.assertEqual(ln.line_to_offset(2, 5), 11)
self.assertEqual(ln.line_to_offset(3, 0), 12)
self.assertEqual(ln.line_to_offset(4, 0), 17)
self.assertEqual(ln.line_to_offset(5, 0), 18)
self.assertEqual(ln.line_to_offset(6, 0), 21)
self.assertEqual(ln.line_to_offset(7, 0), 22)
self.assertEqual(ln.line_to_offset(7, 7), 29)
self.assertEqual(ln.offset_to_line(0), (1, 0))
self.assertEqual(ln.offset_to_line(5), (1, 5))
self.assertEqual(ln.offset_to_line(6), (2, 0))
self.assertEqual(ln.offset_to_line(11), (2, 5))
self.assertEqual(ln.offset_to_line(12), (3, 0))
self.assertEqual(ln.offset_to_line(17), (4, 0))
def compress_source_map(code, pos_map, jump_map, source_id):
linenos = asttokens.LineNumbers(code)
compressed_map = f"-1:-1:{source_id}:-;"
last_pos = [-1, -1, source_id]
for pc in sorted(pos_map)[1:]:
current_pos = [-1, -1, source_id]
if pos_map[pc]:
current_pos[0] = linenos.line_to_offset(*pos_map[pc][:2])
current_pos[1] = linenos.line_to_offset(*pos_map[pc][2:])-current_pos[0]
if pc in jump_map:
current_pos.append(jump_map[pc])
for i in range(2, -1, -1):
if current_pos[i] != last_pos[i]:
last_pos[i] = current_pos[i]
elif len(current_pos) == i+1:
def __init__(self, source_text):
self._text = source_text
self._line_numbers = LineNumbers(source_text)
# Tokenize the code.
self._tokens = list(self._generate_tokens(source_text))
# Extract the start positions of all tokens, so that we can quickly map positions to tokens.
self._token_offsets = [tok.startpos for tok in self._tokens]