mirror of https://github.com/zulip/zulip.git
check-templates: Add fix option to tools/check_templates.
`valid_indent_html` allows for replacing the incorrectly indented file with the correct pretty-printed version if `--fix` is passed to `tools/lint`. Fixes #12641.
This commit is contained in:
parent
86073588be
commit
89df6e9425
|
@ -22,8 +22,8 @@ EXCLUDED_FILES = [
|
|||
'static/assets/icons/template.hbs',
|
||||
]
|
||||
|
||||
def check_our_files(modified_only, all_dups, targets):
|
||||
# type: (bool, bool, List[str]) -> None
|
||||
def check_our_files(modified_only, all_dups, fix, targets):
|
||||
# type: (bool, bool, bool, List[str]) -> None
|
||||
by_lang = cast(
|
||||
Dict[str, List[str]],
|
||||
lister.list_files(
|
||||
|
@ -32,11 +32,11 @@ def check_our_files(modified_only, all_dups, targets):
|
|||
ftypes=['hbs', 'html'],
|
||||
group_by_ftype=True, exclude=EXCLUDED_FILES))
|
||||
|
||||
check_handlebar_templates(by_lang['hbs'])
|
||||
check_html_templates(by_lang['html'], args.all_dups)
|
||||
check_handlebar_templates(by_lang['hbs'], fix)
|
||||
check_html_templates(by_lang['html'], all_dups, fix)
|
||||
|
||||
def check_html_templates(templates, all_dups):
|
||||
# type: (Iterable[str], bool) -> None
|
||||
def check_html_templates(templates, all_dups, fix):
|
||||
# type: (Iterable[str], bool, bool) -> None
|
||||
# Our files with .html extensions are usually for Django, but we also
|
||||
# have a few static .html files.
|
||||
#
|
||||
|
@ -141,11 +141,11 @@ def check_html_templates(templates, all_dups):
|
|||
# TODO: Clean these files
|
||||
for fn in templates:
|
||||
if fn not in IGNORE_FILES:
|
||||
if not validate_indent_html(fn):
|
||||
if not validate_indent_html(fn, fix):
|
||||
sys.exit(1)
|
||||
|
||||
def check_handlebar_templates(templates):
|
||||
# type: (Iterable[str]) -> None
|
||||
def check_handlebar_templates(templates, fix):
|
||||
# type: (Iterable[str], bool) -> None
|
||||
# Check all our handlebars templates.
|
||||
templates = [fn for fn in templates if fn.endswith('.hbs')]
|
||||
|
||||
|
@ -162,7 +162,7 @@ def check_handlebar_templates(templates):
|
|||
for fn in templates:
|
||||
if fn in IGNORE_FILES:
|
||||
continue
|
||||
if not validate_indent_html(fn):
|
||||
if not validate_indent_html(fn, fix):
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -173,6 +173,9 @@ if __name__ == '__main__':
|
|||
parser.add_argument('--all-dups',
|
||||
action="store_true", default=False,
|
||||
help='Run lint tool to detect duplicate ids on ignored files as well')
|
||||
parser.add_argument('--fix',
|
||||
action='store_true', default=False,
|
||||
help='Automatically fix indentation problems.')
|
||||
parser.add_argument('targets', nargs=argparse.REMAINDER)
|
||||
args = parser.parse_args()
|
||||
check_our_files(args.modified, args.all_dups, args.targets)
|
||||
check_our_files(args.modified, args.all_dups, args.fix, args.targets)
|
||||
|
|
|
@ -5,6 +5,9 @@ from .template_parser import (
|
|||
tokenize,
|
||||
is_django_block_tag,
|
||||
)
|
||||
|
||||
from zulint.printer import GREEN, ENDC
|
||||
|
||||
import subprocess
|
||||
|
||||
def pretty_print_html(html, num_spaces=4):
|
||||
|
@ -189,13 +192,19 @@ def pretty_print_html(html, num_spaces=4):
|
|||
return '\n'.join(formatted_lines)
|
||||
|
||||
|
||||
def validate_indent_html(fn):
|
||||
# type: (str) -> int
|
||||
def validate_indent_html(fn, fix):
|
||||
# type: (str, bool) -> int
|
||||
file = open(fn)
|
||||
html = file.read()
|
||||
phtml = pretty_print_html(html)
|
||||
file.close()
|
||||
if not html.split('\n') == phtml.split('\n'):
|
||||
if fix:
|
||||
print(GREEN + "Automatically fixing problems..." + ENDC)
|
||||
with open(fn, 'w') as f:
|
||||
f.write(phtml)
|
||||
# Since we successfully fixed the issues, we exit with status 0
|
||||
return 0
|
||||
print('Invalid Indentation detected in file: '
|
||||
'%s\nDiff for the file against expected indented file:' % (fn,), flush=True)
|
||||
with subprocess.Popen(
|
||||
|
@ -204,5 +213,7 @@ def validate_indent_html(fn):
|
|||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True) as p:
|
||||
p.communicate(phtml)
|
||||
print()
|
||||
print("This problem can be fixed with the `--fix` option.")
|
||||
return 0
|
||||
return 1
|
||||
|
|
|
@ -72,7 +72,8 @@ def run():
|
|||
"(config: tools/linter_lib/exclude.py)")
|
||||
linter_config.external_linter('templates', ['tools/check-templates'], ['hbs', 'html'],
|
||||
description="Custom linter checks whitespace formatting"
|
||||
"of HTML templates.")
|
||||
"of HTML templates.",
|
||||
fix_arg='--fix')
|
||||
linter_config.external_linter('swagger', ['node', 'tools/check-swagger'], ['yaml'],
|
||||
description="Validates our OpenAPI/Swagger API documentation"
|
||||
"(zerver/openapi/zulip.yaml) ")
|
||||
|
|
Loading…
Reference in New Issue