mirror of https://github.com/zulip/zulip.git
linter: Fix bug resulting in <pre> being indented cyclically.
This commit is contained in:
parent
a77aa79da9
commit
d2f0e17454
|
@ -150,7 +150,7 @@ def check_html_templates(templates, all_dups):
|
||||||
'templates/zerver/markdown_help.html',
|
'templates/zerver/markdown_help.html',
|
||||||
'templates/zerver/navbar.html',
|
'templates/zerver/navbar.html',
|
||||||
'templates/zerver/register.html',
|
'templates/zerver/register.html',
|
||||||
'templates/zerver/test_emails.html',
|
|
||||||
'zerver/webhooks/deskdotcom/doc.html',
|
'zerver/webhooks/deskdotcom/doc.html',
|
||||||
'zerver/webhooks/librato/doc.html',
|
'zerver/webhooks/librato/doc.html',
|
||||||
'zerver/webhooks/splunk/doc.html',
|
'zerver/webhooks/splunk/doc.html',
|
||||||
|
|
|
@ -30,7 +30,8 @@ def pretty_print_html(html, num_spaces=4):
|
||||||
line=-1,
|
line=-1,
|
||||||
token_kind='html_start',
|
token_kind='html_start',
|
||||||
tag='html',
|
tag='html',
|
||||||
extra_indent=0) # type: Dict[str, Any]
|
extra_indent=0,
|
||||||
|
ignore_lines=[]) # type: Dict[str, Any]
|
||||||
stack.append(info)
|
stack.append(info)
|
||||||
|
|
||||||
# Our main job is to figure out offsets that we use to nudge lines
|
# Our main job is to figure out offsets that we use to nudge lines
|
||||||
|
@ -79,7 +80,8 @@ def pretty_print_html(html, num_spaces=4):
|
||||||
extra_indent_prev=extra_indent,
|
extra_indent_prev=extra_indent,
|
||||||
adjustment=adjustment,
|
adjustment=adjustment,
|
||||||
indenting=True,
|
indenting=True,
|
||||||
adjust_offset_until=token.line
|
adjust_offset_until=token.line,
|
||||||
|
ignore_lines=[]
|
||||||
)
|
)
|
||||||
if token.kind in ('handlebars_start', 'django_start'):
|
if token.kind in ('handlebars_start', 'django_start'):
|
||||||
info.update(dict(depth=new_depth - 1, indenting=False))
|
info.update(dict(depth=new_depth - 1, indenting=False))
|
||||||
|
@ -91,7 +93,8 @@ def pretty_print_html(html, num_spaces=4):
|
||||||
line=token.line,
|
line=token.line,
|
||||||
tag=token.tag,
|
tag=token.tag,
|
||||||
token_kind=token.kind,
|
token_kind=token.kind,
|
||||||
extra_indent=stack[-1]['extra_indent']
|
extra_indent=stack[-1]['extra_indent'],
|
||||||
|
ignore_lines=[]
|
||||||
)
|
)
|
||||||
stack.append(info)
|
stack.append(info)
|
||||||
elif token.kind in ('html_end', 'handlebars_end',
|
elif token.kind in ('html_end', 'handlebars_end',
|
||||||
|
@ -107,6 +110,8 @@ def pretty_print_html(html, num_spaces=4):
|
||||||
if token.tag == 'pre':
|
if token.tag == 'pre':
|
||||||
offsets[start_line] = 0
|
offsets[start_line] = 0
|
||||||
offsets[end_line] = 0
|
offsets[end_line] = 0
|
||||||
|
stack[-1]['ignore_lines'].append(start_line)
|
||||||
|
stack[-1]['ignore_lines'].append(end_line)
|
||||||
else:
|
else:
|
||||||
offsets[start_line] = info['offset']
|
offsets[start_line] = info['offset']
|
||||||
line = lines[token.line - 1]
|
line = lines[token.line - 1]
|
||||||
|
@ -139,7 +144,8 @@ def pretty_print_html(html, num_spaces=4):
|
||||||
offsets[line_num] = offset
|
offsets[line_num] = offset
|
||||||
elif (token.kind in ('handlebars_end', 'django_end') and
|
elif (token.kind in ('handlebars_end', 'django_end') and
|
||||||
info['indenting'] and
|
info['indenting'] and
|
||||||
line_num < info['adjust_offset_until']):
|
line_num < info['adjust_offset_until'] and
|
||||||
|
line_num not in info['ignore_lines']):
|
||||||
offsets[line_num] += num_spaces
|
offsets[line_num] += num_spaces
|
||||||
elif token.tag != 'pre':
|
elif token.tag != 'pre':
|
||||||
for line_num in range(start_line + 1, end_line):
|
for line_num in range(start_line + 1, end_line):
|
||||||
|
@ -149,6 +155,7 @@ def pretty_print_html(html, num_spaces=4):
|
||||||
for line_num in range(start_line + 1, end_line):
|
for line_num in range(start_line + 1, end_line):
|
||||||
if line_num not in offsets:
|
if line_num not in offsets:
|
||||||
offsets[line_num] = 0
|
offsets[line_num] = 0
|
||||||
|
stack[-1]['ignore_lines'].append(line_num)
|
||||||
|
|
||||||
# Now that we have all of our offsets calculated, we can just
|
# Now that we have all of our offsets calculated, we can just
|
||||||
# join all our lines together, fixing up offsets as needed.
|
# join all our lines together, fixing up offsets as needed.
|
||||||
|
|
|
@ -362,6 +362,36 @@ GOOD_HTML13 = """
|
||||||
<div>{{this.count}}</div>
|
<div>{{this.count}}</div>
|
||||||
</div>
|
</div>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
BAD_HTML14 = """
|
||||||
|
<div>
|
||||||
|
{{#if this.code}}
|
||||||
|
<pre>Here goes some cool code.</pre>
|
||||||
|
{{else}}
|
||||||
|
<div>
|
||||||
|
content of first div
|
||||||
|
<div>
|
||||||
|
content of second div.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
"""
|
||||||
|
|
||||||
|
GOOD_HTML14 = """
|
||||||
|
<div>
|
||||||
|
{{#if this.code}}
|
||||||
|
<pre>Here goes some cool code.</pre>
|
||||||
|
{{else}}
|
||||||
|
<div>
|
||||||
|
content of first div
|
||||||
|
<div>
|
||||||
|
content of second div.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
"""
|
||||||
class TestPrettyPrinter(unittest.TestCase):
|
class TestPrettyPrinter(unittest.TestCase):
|
||||||
def compare(self, a, b):
|
def compare(self, a, b):
|
||||||
# type: (str, str) -> None
|
# type: (str, str) -> None
|
||||||
|
@ -384,3 +414,4 @@ class TestPrettyPrinter(unittest.TestCase):
|
||||||
self.compare(pretty_print_html(BAD_HTML11), GOOD_HTML11)
|
self.compare(pretty_print_html(BAD_HTML11), GOOD_HTML11)
|
||||||
self.compare(pretty_print_html(BAD_HTML12), GOOD_HTML12)
|
self.compare(pretty_print_html(BAD_HTML12), GOOD_HTML12)
|
||||||
self.compare(pretty_print_html(BAD_HTML13), GOOD_HTML13)
|
self.compare(pretty_print_html(BAD_HTML13), GOOD_HTML13)
|
||||||
|
self.compare(pretty_print_html(BAD_HTML14), GOOD_HTML14)
|
||||||
|
|
Loading…
Reference in New Issue