diff --git a/src/Microsoft.SqlTools.ServiceLayer/Formatter/Impl/FormatterUtilities.cs b/src/Microsoft.SqlTools.ServiceLayer/Formatter/Impl/FormatterUtilities.cs index 657f35b9..9d623c22 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Formatter/Impl/FormatterUtilities.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Formatter/Impl/FormatterUtilities.cs @@ -30,7 +30,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Formatter return NormalizeNewLinesInWhitespace(original, context, 1); } - private static string NormalizeNewLinesInWhitespace(string original, FormatContext context, int minimumNewLines) + internal static string NormalizeNewLinesInWhitespace(string original, FormatContext context, int minimumNewLines) { return NormalizeNewLinesInWhitespace(original, context, 1, () => { return original; }); } diff --git a/src/Microsoft.SqlTools.ServiceLayer/Formatter/Impl/SqlBatchFormatter.cs b/src/Microsoft.SqlTools.ServiceLayer/Formatter/Impl/SqlBatchFormatter.cs index 93404982..a6ca44ff 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Formatter/Impl/SqlBatchFormatter.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Formatter/Impl/SqlBatchFormatter.cs @@ -28,7 +28,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Formatter { for (int i = startTokenNumber; i < firstChildStartTokenNumber; i++) { - SimpleProcessToken(i, FormatterUtilities.NormalizeNewLinesEnsureOneNewLineMinimum); + SimpleProcessToken(i, (original, context) => FormatterUtilities.NormalizeNewLinesInWhitespace(original, context, 2)); } } diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/TSqlFormatter/BaselineFiles/Go_NewlineHandling.sql b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/TSqlFormatter/BaselineFiles/Go_NewlineHandling.sql new file mode 100644 index 00000000..87725792 --- /dev/null +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/TSqlFormatter/BaselineFiles/Go_NewlineHandling.sql @@ -0,0 +1,11 @@ +use WideWorldImporters; +go + +alter database current collate Latin1_General_100_CI_AS; +go + +alter database current set RECOVERY SIMPLE; +go + +alter database current set AUTO_UPDATE_STATISTICS_ASYNC on; +go diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/TSqlFormatter/TestFiles/Go.sql b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/TSqlFormatter/TestFiles/Go.sql new file mode 100644 index 00000000..4410cc94 --- /dev/null +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/TSqlFormatter/TestFiles/Go.sql @@ -0,0 +1,11 @@ +USE WideWorldImporters; +GO + +ALTER DATABASE CURRENT COLLATE Latin1_General_100_CI_AS; +GO + +ALTER DATABASE CURRENT SET RECOVERY SIMPLE; +GO + +ALTER DATABASE CURRENT SET AUTO_UPDATE_STATISTICS_ASYNC ON; +GO diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Formatter/GeneralFormatterTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Formatter/GeneralFormatterTests.cs index 226b2355..63e4363c 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Formatter/GeneralFormatterTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Formatter/GeneralFormatterTests.cs @@ -10,6 +10,20 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Formatter { public class GeneralFormatterTests : FormatterUnitTestsBase { + [Fact] + public void GoNewLineShouldBePreserved() + { + LoadAndFormatAndCompare("GoNewLineShouldBePreserved", + GetInputFile("Go.sql"), + GetBaselineFile("Go_NewlineHandling.sql"), + new FormatOptions() { + KeywordCasing = CasingOptions.Lowercase, + DatatypeCasing = CasingOptions.Uppercase, + PlaceEachReferenceOnNewLineInQueryStatements = true + }, + verifyFormat: true); + } + [Fact] public void KeywordCaseConversionUppercase() {