Skip to content

Commit 96f20a5

Browse files
authored
Merge pull request #124 from mvorisek/extra_nl_between_queries
Add extra new line between separate queries
2 parents e410352 + c0254f2 commit 96f20a5

File tree

4 files changed

+49
-2
lines changed

4 files changed

+49
-2
lines changed

src/SqlFormatter.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,12 @@ public function format(string $string, string $indentString = ' '): string
8686
return;
8787
}
8888

89-
$return = substr($return, 0, -($indentLevel + 1)) . str_repeat($tab, $indentLevel);
89+
$rtrimLength = $indentLevel + 1;
90+
while (substr($return, -($rtrimLength + 2), 1) === "\n") {
91+
$rtrimLength++;
92+
}
93+
94+
$return = substr($return, 0, -$rtrimLength) . str_repeat($tab, $indentLevel);
9095
};
9196

9297
// Tokenize String
@@ -115,7 +120,13 @@ public function format(string $string, string $indentString = ' '): string
115120

116121
// If we need a new line before the token
117122
if ($newline) {
118-
$return = rtrim($return, ' ');
123+
$return = rtrim($return, ' ');
124+
125+
$prevNotWhitespaceToken = $cursor->subCursor()->previous(Token::TOKEN_TYPE_WHITESPACE);
126+
if ($prevNotWhitespaceToken !== null && $prevNotWhitespaceToken->value() === ';') {
127+
$return .= "\n";
128+
}
129+
119130
$return .= "\n" . str_repeat($tab, $indentLevel);
120131
$newline = false;
121132
$addedNewline = true;

tests/clihighlight.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,7 @@
798798
*
799799
LIMIT
800800
1;
801+
801802
SELECT
802803
a,
803804
b,
@@ -807,6 +808,7 @@
807808
e
808809
LIMIT
809810
1, 2;
811+
810812
SELECT
811813
1,
812814
2,
@@ -1014,19 +1016,25 @@
10141016
---
10151017
-- semicolon must decrease special indentation level
10161018
MY_NON_TOP_LEVEL_KEYWORD_FX_1();
1019+
10171020
MY_NON_TOP_LEVEL_KEYWORD_FX_2();
1021+
10181022
SELECT
10191023
x
10201024
FROM
10211025
(
10221026
SELECT
10231027
1 as x
10241028
);
1029+
10251030
MY_NON_TOP_LEVEL_KEYWORD_FX_3();
1031+
10261032
BEGIN
10271033
MY_NON_TOP_LEVEL_KEYWORD_FX_4();
1034+
10281035
MY_NON_TOP_LEVEL_KEYWORD_FX_5();
10291036
END;
1037+
10301038
BEGIN
10311039
SELECT
10321040
x
@@ -1035,6 +1043,7 @@ MY_NON_TOP_LEVEL_KEYWORD_FX_3();
10351043
SELECT
10361044
1 as x
10371045
);
1046+
10381047
MY_NON_TOP_LEVEL_KEYWORD_FX_6();
10391048
END;
10401049
---
@@ -1143,16 +1152,19 @@ MY_NON_TOP_LEVEL_KEYWORD_FX_3();
11431152
catch if ERROR_NUMBER() = 544 begin
11441153
set
11451154
IDENTITY_INSERT [t] on;
1155+
11461156
begin
11471157
try insert into [t] ([name], [int], [float], [null])
11481158
values
11491159
(N 'Ewa', 1, 1.0, null);
1160+
11501161
set
11511162
IDENTITY_INSERT [t] off;
11521163
end try begin
11531164
catch
11541165
set
11551166
IDENTITY_INSERT [t] off;
1167+
11561168
throw;
11571169
end catch
11581170
end

tests/format-highlight.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,7 @@
798798
<span >*</span>
799799
<span style="font-weight:bold;">LIMIT</span>
800800
<span style="color: green;">1</span><span >;</span>
801+
801802
<span style="font-weight:bold;">SELECT</span>
802803
<span style="color: #333;">a</span><span >,</span>
803804
<span style="color: #333;">b</span><span >,</span>
@@ -807,6 +808,7 @@
807808
<span style="color: #333;">e</span>
808809
<span style="font-weight:bold;">LIMIT</span>
809810
<span style="color: green;">1</span><span >,</span> <span style="color: green;">2</span><span >;</span>
811+
810812
<span style="font-weight:bold;">SELECT</span>
811813
<span style="color: green;">1</span><span >,</span>
812814
<span style="color: green;">2</span><span >,</span>
@@ -1014,19 +1016,25 @@
10141016
---
10151017
<pre style="color: black; background-color: white;"><span style="color: #aaa;">-- semicolon must decrease special indentation level</span>
10161018
<span style="color: #333;">MY_NON_TOP_LEVEL_KEYWORD_FX_1</span>()<span >;</span>
1019+
10171020
<span style="color: #333;">MY_NON_TOP_LEVEL_KEYWORD_FX_2</span>()<span >;</span>
1021+
10181022
<span style="font-weight:bold;">SELECT</span>
10191023
<span style="color: #333;">x</span>
10201024
<span style="font-weight:bold;">FROM</span>
10211025
(
10221026
<span style="font-weight:bold;">SELECT</span>
10231027
<span style="color: green;">1</span> <span style="font-weight:bold;">as</span> <span style="color: #333;">x</span>
10241028
)<span >;</span>
1029+
10251030
<span style="color: #333;">MY_NON_TOP_LEVEL_KEYWORD_FX_3</span>()<span >;</span>
1031+
10261032
<span style="font-weight:bold;">BEGIN</span>
10271033
<span style="color: #333;">MY_NON_TOP_LEVEL_KEYWORD_FX_4</span>()<span >;</span>
1034+
10281035
<span style="color: #333;">MY_NON_TOP_LEVEL_KEYWORD_FX_5</span>()<span >;</span>
10291036
<span style="font-weight:bold;">END</span><span >;</span>
1037+
10301038
<span style="font-weight:bold;">BEGIN</span>
10311039
<span style="font-weight:bold;">SELECT</span>
10321040
<span style="color: #333;">x</span>
@@ -1035,6 +1043,7 @@
10351043
<span style="font-weight:bold;">SELECT</span>
10361044
<span style="color: green;">1</span> <span style="font-weight:bold;">as</span> <span style="color: #333;">x</span>
10371045
)<span >;</span>
1046+
10381047
<span style="color: #333;">MY_NON_TOP_LEVEL_KEYWORD_FX_6</span>()<span >;</span>
10391048
<span style="font-weight:bold;">END</span><span >;</span></pre>
10401049
---
@@ -1143,16 +1152,19 @@
11431152
<span style="color: #333;">catch</span> <span style="font-weight:bold;">if</span> <span style="color: #333;">ERROR_NUMBER</span>() <span >=</span> <span style="color: green;">544</span> <span style="font-weight:bold;">begin</span>
11441153
<span style="font-weight:bold;">set</span>
11451154
<span style="color: #333;">IDENTITY_INSERT</span> <span style="color: purple;">[t]</span> <span style="font-weight:bold;">on</span><span >;</span>
1155+
11461156
<span style="font-weight:bold;">begin</span>
11471157
<span style="color: #333;">try</span> <span style="font-weight:bold;">insert</span> <span style="font-weight:bold;">into</span> <span style="color: purple;">[t]</span> (<span style="color: purple;">[name]</span><span >,</span> <span style="color: purple;">[int]</span><span >,</span> <span style="color: purple;">[float]</span><span >,</span> <span style="color: purple;">[null]</span>)
11481158
<span style="font-weight:bold;">values</span>
11491159
(<span style="color: #333;">N</span> <span style="color: blue;">'Ewa'</span><span >,</span> <span style="color: green;">1</span><span >,</span> <span style="color: green;">1.0</span><span >,</span> <span style="font-weight:bold;">null</span>)<span >;</span>
1160+
11501161
<span style="font-weight:bold;">set</span>
11511162
<span style="color: #333;">IDENTITY_INSERT</span> <span style="color: purple;">[t]</span> <span style="color: #333;">off</span><span >;</span>
11521163
<span style="font-weight:bold;">end</span> <span style="color: #333;">try</span> <span style="font-weight:bold;">begin</span>
11531164
<span style="color: #333;">catch</span>
11541165
<span style="font-weight:bold;">set</span>
11551166
<span style="color: #333;">IDENTITY_INSERT</span> <span style="color: purple;">[t]</span> <span style="color: #333;">off</span><span >;</span>
1167+
11561168
<span style="color: #333;">throw</span><span >;</span>
11571169
<span style="font-weight:bold;">end</span> <span style="color: #333;">catch</span>
11581170
<span style="font-weight:bold;">end</span>

tests/format.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,7 @@ SELECT
796796
*
797797
LIMIT
798798
1;
799+
799800
SELECT
800801
a,
801802
b,
@@ -805,6 +806,7 @@ FROM
805806
e
806807
LIMIT
807808
1, 2;
809+
808810
SELECT
809811
1,
810812
2,
@@ -1012,19 +1014,25 @@ SELECT
10121014
---
10131015
-- semicolon must decrease special indentation level
10141016
MY_NON_TOP_LEVEL_KEYWORD_FX_1();
1017+
10151018
MY_NON_TOP_LEVEL_KEYWORD_FX_2();
1019+
10161020
SELECT
10171021
x
10181022
FROM
10191023
(
10201024
SELECT
10211025
1 as x
10221026
);
1027+
10231028
MY_NON_TOP_LEVEL_KEYWORD_FX_3();
1029+
10241030
BEGIN
10251031
MY_NON_TOP_LEVEL_KEYWORD_FX_4();
1032+
10261033
MY_NON_TOP_LEVEL_KEYWORD_FX_5();
10271034
END;
1035+
10281036
BEGIN
10291037
SELECT
10301038
x
@@ -1033,6 +1041,7 @@ BEGIN
10331041
SELECT
10341042
1 as x
10351043
);
1044+
10361045
MY_NON_TOP_LEVEL_KEYWORD_FX_6();
10371046
END;
10381047
---
@@ -1141,16 +1150,19 @@ end try begin
11411150
catch if ERROR_NUMBER() = 544 begin
11421151
set
11431152
IDENTITY_INSERT [t] on;
1153+
11441154
begin
11451155
try insert into [t] ([name], [int], [float], [null])
11461156
values
11471157
(N 'Ewa', 1, 1.0, null);
1158+
11481159
set
11491160
IDENTITY_INSERT [t] off;
11501161
end try begin
11511162
catch
11521163
set
11531164
IDENTITY_INSERT [t] off;
1165+
11541166
throw;
11551167
end catch
11561168
end

0 commit comments

Comments
 (0)