}
code_sample = """\
-class C1():
+class C1:
# Class comment.
def __init__(self, a, b):
self.a = a
with self.assertRaises(AssertionError):
gc(1, stopline=0)
- eq(gc(3), ([(2, 0, 'class C1():', 'class')], 0))
+ eq(gc(3), ([(2, 0, 'class C1:', 'class')], 0))
# Don't return comment.
- eq(gc(4), ([(2, 0, 'class C1():', 'class')], 0))
+ eq(gc(4), ([(2, 0, 'class C1:', 'class')], 0))
# Two indentation levels and no comment.
- eq(gc(5), ([(2, 0, 'class C1():', 'class'),
+ eq(gc(5), ([(2, 0, 'class C1:', 'class'),
(4, 4, ' def __init__(self, a, b):', 'def')], 0))
# Only one 'def' is returned, not both at the same indent level.
- eq(gc(10), ([(2, 0, 'class C1():', 'class'),
+ eq(gc(10), ([(2, 0, 'class C1:', 'class'),
(7, 4, ' def compare(self):', 'def'),
(8, 8, ' if a > b:', 'if')], 0))
# With 'elif', also show the 'if' even though it's at the same level.
- eq(gc(11), ([(2, 0, 'class C1():', 'class'),
+ eq(gc(11), ([(2, 0, 'class C1:', 'class'),
(7, 4, ' def compare(self):', 'def'),
(8, 8, ' if a > b:', 'if'),
(10, 8, ' elif a < b:', 'elif')], 0))
# Set stop_line to not go back to first line in source code.
# Return includes stop_line.
- eq(gc(11, stopline=2), ([(2, 0, 'class C1():', 'class'),
+ eq(gc(11, stopline=2), ([(2, 0, 'class C1:', 'class'),
(7, 4, ' def compare(self):', 'def'),
(8, 8, ' if a > b:', 'if'),
(10, 8, ' elif a < b:', 'elif')], 0))
# Scroll down to line 2.
cc.text.yview(2)
cc.update_code_context()
- eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1():', 'class')])
+ eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1:', 'class')])
eq(cc.topvisible, 3)
- eq(cc.context.get('1.0', 'end-1c'), 'class C1():')
+ eq(cc.context.get('1.0', 'end-1c'), 'class C1:')
# Scroll down to line 3. Since it's a comment, nothing changes.
cc.text.yview(3)
cc.update_code_context()
- eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1():', 'class')])
+ eq(cc.info, [(0, -1, '', False), (2, 0, 'class C1:', 'class')])
eq(cc.topvisible, 4)
- eq(cc.context.get('1.0', 'end-1c'), 'class C1():')
+ eq(cc.context.get('1.0', 'end-1c'), 'class C1:')
# Scroll down to line 4.
cc.text.yview(4)
cc.update_code_context()
eq(cc.info, [(0, -1, '', False),
- (2, 0, 'class C1():', 'class'),
+ (2, 0, 'class C1:', 'class'),
(4, 4, ' def __init__(self, a, b):', 'def')])
eq(cc.topvisible, 5)
- eq(cc.context.get('1.0', 'end-1c'), 'class C1():\n'
+ eq(cc.context.get('1.0', 'end-1c'), 'class C1:\n'
' def __init__(self, a, b):')
# Scroll down to line 11. Last 'def' is removed.
cc.text.yview(11)
cc.update_code_context()
eq(cc.info, [(0, -1, '', False),
- (2, 0, 'class C1():', 'class'),
+ (2, 0, 'class C1:', 'class'),
(7, 4, ' def compare(self):', 'def'),
(8, 8, ' if a > b:', 'if'),
(10, 8, ' elif a < b:', 'elif')])
eq(cc.topvisible, 12)
- eq(cc.context.get('1.0', 'end-1c'), 'class C1():\n'
+ eq(cc.context.get('1.0', 'end-1c'), 'class C1:\n'
' def compare(self):\n'
' if a > b:\n'
' elif a < b:')
cc.update_code_context()
cc.context_depth = 1
eq(cc.info, [(0, -1, '', False),
- (2, 0, 'class C1():', 'class'),
+ (2, 0, 'class C1:', 'class'),
(7, 4, ' def compare(self):', 'def'),
(8, 8, ' if a > b:', 'if'),
(10, 8, ' elif a < b:', 'elif')])
eq(cc.topvisible, 12)
- eq(cc.context.get('1.0', 'end-1c'), 'class C1():\n'
+ eq(cc.context.get('1.0', 'end-1c'), 'class C1:\n'
' def compare(self):\n'
' if a > b:\n'
' elif a < b:')
cc.text.yview(5)
cc.update_code_context()
eq(cc.info, [(0, -1, '', False),
- (2, 0, 'class C1():', 'class'),
+ (2, 0, 'class C1:', 'class'),
(4, 4, ' def __init__(self, a, b):', 'def')])
eq(cc.topvisible, 6)
# context_depth is 1.
# Line 1 is not a BLOCKOPENER.
eq(gli(lines[0]), (codecontext.INFINITY, '', False))
# Line 2 is a BLOCKOPENER without an indent.
- eq(gli(lines[1]), (0, 'class C1():', 'class'))
+ eq(gli(lines[1]), (0, 'class C1:', 'class'))
# Line 3 is not a BLOCKOPENER and does not return the indent level.
eq(gli(lines[2]), (codecontext.INFINITY, ' # Class comment.', False))
# Line 4 is a BLOCKOPENER and is indented.
# Split def across lines.
setcode('"""This is a module docstring"""\n'
- 'class C():\n'
+ 'class C:\n'
' def __init__(self, a,\n'
' b=True):\n'
' pass\n'
)
+ pos0, pos = 33, 42 # Start of 'class...', ' def' lines.
# Passing no value or non-callable should fail (issue 32989).
with self.assertRaises(TypeError):
# Make all text look like it's not in a string. This means that it
# found a good start position.
- eq(start(char_in_string_false), 44)
+ eq(start(char_in_string_false), pos)
# If the beginning of the def line is not in a string, then it
# returns that as the index.
- eq(start(is_char_in_string=lambda index: index > 44), 44)
+ eq(start(is_char_in_string=lambda index: index > pos), pos)
# If the beginning of the def line is in a string, then it
# looks for a previous index.
- eq(start(is_char_in_string=lambda index: index >= 44), 33)
+ eq(start(is_char_in_string=lambda index: index >= pos), pos0)
# If everything before the 'def' is in a string, then returns None.
# The non-continuation def line returns 44 (see below).
- eq(start(is_char_in_string=lambda index: index < 44), None)
+ eq(start(is_char_in_string=lambda index: index < pos), None)
# Code without extra line break in def line - mostly returns the same
# values.
setcode('"""This is a module docstring"""\n'
- 'class C():\n'
+ 'class C:\n'
' def __init__(self, a, b=True):\n'
' pass\n'
- )
- eq(start(char_in_string_false), 44)
- eq(start(is_char_in_string=lambda index: index > 44), 44)
- eq(start(is_char_in_string=lambda index: index >= 44), 33)
+ ) # Does not affect class, def positions.
+ eq(start(char_in_string_false), pos)
+ eq(start(is_char_in_string=lambda index: index > pos), pos)
+ eq(start(is_char_in_string=lambda index: index >= pos), pos0)
# When the def line isn't split, this returns which doesn't match the
# split line test.
- eq(start(is_char_in_string=lambda index: index < 44), 44)
+ eq(start(is_char_in_string=lambda index: index < pos), pos)
def test_set_lo(self):
code = (
'"""This is a module docstring"""\n'
- 'class C():\n'
+ 'class C:\n'
' def __init__(self, a,\n'
' b=True):\n'
' pass\n'
)
+ pos = 42
p = self.parser
p.set_code(code)
self.assertEqual(p.code, code)
# An index that is preceded by a newline.
- p.set_lo(44)
- self.assertEqual(p.code, code[44:])
+ p.set_lo(pos)
+ self.assertEqual(p.code, code[pos:])
def test_study1(self):
eq = self.assertEqual