From 2aa48d0438d679a14f5626e05a9ec4bb196ba3d7 Mon Sep 17 00:00:00 2001 From: Philipp Salvisberg Date: Sun, 3 Apr 2022 16:52:42 +0200 Subject: [PATCH 1/4] add test case for #193 to handle ignore files with windows file separators --- .../sqlcl/tests/TvdFormatIgnoreTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/standalone/src/test/java/com/trivadis/plsql/formatter/sqlcl/tests/TvdFormatIgnoreTest.java b/standalone/src/test/java/com/trivadis/plsql/formatter/sqlcl/tests/TvdFormatIgnoreTest.java index 311b76bc..229e6b84 100644 --- a/standalone/src/test/java/com/trivadis/plsql/formatter/sqlcl/tests/TvdFormatIgnoreTest.java +++ b/standalone/src/test/java/com/trivadis/plsql/formatter/sqlcl/tests/TvdFormatIgnoreTest.java @@ -52,4 +52,20 @@ public void ignore_two_files() throws IOException { var actual = runCommand( "tvdformat " + tempDir.toString() + " ignore=" + tempDir + File.separator + "ignore.txt"); Assertions.assertTrue(actual.contains("2 of 2")); } + + @Test + public void ignore_two_files_windows_separator() throws IOException { + // must run in an own test class, reason is not clear + var ignoreFileContent = """ + # ignore package bodies + **\\\\*.pkb + + # Ignore files with syntax errors + **\\\\*syntax* + """; + final Path ignoreFile = Paths.get(tempDir + File.separator + "ignore2.txt"); + Files.write(ignoreFile, ignoreFileContent.getBytes()); + var actual = runCommand( "tvdformat " + tempDir.toString() + " ignore=" + tempDir + File.separator + "ignore2.txt"); + Assertions.assertTrue(actual.contains("2 of 2")); + } } From 40533ff9a55d6812786d1475e9734e2f2e1b2132 Mon Sep 17 00:00:00 2001 From: Philipp Salvisberg Date: Sun, 3 Apr 2022 16:53:55 +0200 Subject: [PATCH 2/4] accept Windows and Unix style file separators in ignore files and convert them to OS specific file separators #193 --- sqlcl/format.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sqlcl/format.js b/sqlcl/format.js index e21a4d1c..2db2917b 100644 --- a/sqlcl/format.js +++ b/sqlcl/format.js @@ -260,11 +260,27 @@ var getCdPath = function (path) { } } +var replaceAll = function(input, pattern, replacement) { + var p = javaPattern.compile(pattern); + var m = p.matcher(input); + var result = ""; + var pos = 0; + while (m.find()) { + result += input.substring(pos, m.start()); + result += replacement; + pos = m.end(); + } + if (input.length > pos) { + result += input.substring(pos); + } + return result; +} + var createIgnoreMatcher = function (ignorePath) { var globPattern = "glob:{" var lines = javaFiles.readAllLines(javaPaths.get(ignorePath)); for (var i=0; i < lines.size(); i++) { - var line = lines[i].trim(); + var line = replaceAll(replaceAll(lines[i].trim(), "\\/", javaFile.separator), "(\\\\){2}", javaFile.separator); if (line.length > 0 && line.indexOf('#') === -1) { if (globPattern.length > 6) { globPattern += ","; From d19643e848baca16831a27e7536426a9042c145b Mon Sep 17 00:00:00 2001 From: Philipp Salvisberg Date: Sun, 3 Apr 2022 17:49:40 +0200 Subject: [PATCH 3/4] do not support escaped backslash in ignore file --- .../plsql/formatter/sqlcl/tests/TvdFormatIgnoreTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/standalone/src/test/java/com/trivadis/plsql/formatter/sqlcl/tests/TvdFormatIgnoreTest.java b/standalone/src/test/java/com/trivadis/plsql/formatter/sqlcl/tests/TvdFormatIgnoreTest.java index 229e6b84..e28b880c 100644 --- a/standalone/src/test/java/com/trivadis/plsql/formatter/sqlcl/tests/TvdFormatIgnoreTest.java +++ b/standalone/src/test/java/com/trivadis/plsql/formatter/sqlcl/tests/TvdFormatIgnoreTest.java @@ -57,11 +57,11 @@ public void ignore_two_files() throws IOException { public void ignore_two_files_windows_separator() throws IOException { // must run in an own test class, reason is not clear var ignoreFileContent = """ - # ignore package bodies - **\\\\*.pkb + # ignore package bodies (single backslash) + **\\*.pkb - # Ignore files with syntax errors - **\\\\*syntax* + # Ignore files with syntax errors (single backslash) + **\\*syntax* """; final Path ignoreFile = Paths.get(tempDir + File.separator + "ignore2.txt"); Files.write(ignoreFile, ignoreFileContent.getBytes()); From 91d166c44f4b941dd8a43610b02339f62ae6cc87 Mon Sep 17 00:00:00 2001 From: Philipp Salvisberg Date: Sun, 3 Apr 2022 17:50:11 +0200 Subject: [PATCH 4/4] do not support escaped backslash in ignore file --- sqlcl/format.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqlcl/format.js b/sqlcl/format.js index 2db2917b..25f9dfef 100644 --- a/sqlcl/format.js +++ b/sqlcl/format.js @@ -280,7 +280,7 @@ var createIgnoreMatcher = function (ignorePath) { var globPattern = "glob:{" var lines = javaFiles.readAllLines(javaPaths.get(ignorePath)); for (var i=0; i < lines.size(); i++) { - var line = replaceAll(replaceAll(lines[i].trim(), "\\/", javaFile.separator), "(\\\\){2}", javaFile.separator); + var line = replaceAll(lines[i].trim(), "(\\\\)", "/"); if (line.length > 0 && line.indexOf('#') === -1) { if (globPattern.length > 6) { globPattern += ",";