From f5a26225bd7ad5ea97fc6f681cc66fef2f43d5b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20S=C5=82omkowski?= Date: Wed, 26 Jul 2017 05:58:44 +0200 Subject: [PATCH] Fix error which split line when it contained backslash. Fixes #5 --- nginxfmt.py | 9 +++++---- test_nginxfmt.py | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/nginxfmt.py b/nginxfmt.py index 0fbd797..0ed26d1 100755 --- a/nginxfmt.py +++ b/nginxfmt.py @@ -13,7 +13,7 @@ import re __author__ = "Michał Słomkowski" __license__ = "Apache 2.0" -__version__ = "1.0.1" +__version__ = "1.0.2" INDENTATION = ' ' * 4 @@ -54,7 +54,7 @@ def strip_variable_template_tags(line: str) -> str: flags=re.UNICODE) -def clean_lines(orig_lines): +def clean_lines(orig_lines) -> list: """Strips the lines and splits them if they contain curly brackets.""" cleaned_lines = [] for line in orig_lines: @@ -68,7 +68,7 @@ def clean_lines(orig_lines): cleaned_lines.append(strip_variable_template_tags(line)) else: cleaned_lines.extend( - [strip_variable_template_tags(l).strip() for l in re.split(r"([{\\}])", line) if l != ""]) + [strip_variable_template_tags(l).strip() for l in re.split(r"([{}])", line) if l != ""]) return cleaned_lines @@ -105,7 +105,8 @@ def perform_indentation(lines): def format_config_contents(contents): """Accepts the string containing nginx configuration and returns formatted one. Adds newline at the end.""" - lines = clean_lines(contents.splitlines()) + lines = contents.splitlines() + lines = clean_lines(lines) lines = join_opening_bracket(lines) lines = perform_indentation(lines) diff --git a/test_nginxfmt.py b/test_nginxfmt.py index 4daa13e..9018cd4 100644 --- a/test_nginxfmt.py +++ b/test_nginxfmt.py @@ -24,7 +24,7 @@ class TestFormatter(unittest.TestCase): self.assertEqual(["foo", "bar {", "johan {", "tee", "ka", "}"], join_opening_bracket(("foo", "bar {", "johan", "{", "tee", "ka", "}"))) - def test_clear_lines(self): + def test_clean_lines(self): self.assertEqual(["ala", "ma", "{", "kota", "}", "to;", "", "ook"], clean_lines(("ala", "ma {", "kota", "}", "to;", "", "ook"))) @@ -37,6 +37,8 @@ class TestFormatter(unittest.TestCase): self.assertEqual(["{", "ala", "# ma {{", "kota", "}", "to", "}", "# }"], clean_lines(("{", "ala ", "# ma {{", " kota ", "}", " to} ", "# }"))) + self.assertEqual(["location ~ /\.ht", "{"], clean_lines(["location ~ /\.ht {", ])) + def test_perform_indentation(self): self.assertEqual([ "foo bar {", @@ -161,6 +163,21 @@ class TestFormatter(unittest.TestCase): '}\n' + '# in my line\n') + def test_backslash(self): + self._check_formatting('location ~ /\.ht {\n' + + 'deny all;\n' + + '}', + 'location ~ /\.ht {\n' + + ' deny all;\n' + + '}\n') + + self._check_formatting(' tag { wt ~ /\.ht \t "my ${var} and ~ /\.ht \tother ${ variable_name } "; }\n' + + '# in my line\n', + 'tag {\n' + + ' wt ~ /\.ht "my ${var} and ~ /\.ht \tother ${variable_name} ";\n' + + '}\n' + + '# in my line\n') + def test_loading_utf8_file(self): tmp_file = tempfile.mkstemp('utf-8')[1] shutil.copy('test-files/umlaut-utf8.conf', tmp_file)