summaryrefslogtreecommitdiff
path: root/source/slang/slang-language-server-auto-format.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-07-14 10:53:39 -0700
committerGitHub <noreply@github.com>2022-07-14 10:53:39 -0700
commit5949e2c5c0c205d5dafeabe88646e96b2a60ec9e (patch)
tree77bf07d8b34ecedea106b177ee92a1ec48f9aa82 /source/slang/slang-language-server-auto-format.cpp
parent4af61e2296a49876c2d9e7cf192ae825302a83de (diff)
Language Server: Auto format bug fixes. (#2326)
Diffstat (limited to 'source/slang/slang-language-server-auto-format.cpp')
-rw-r--r--source/slang/slang-language-server-auto-format.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/source/slang/slang-language-server-auto-format.cpp b/source/slang/slang-language-server-auto-format.cpp
index 8d877eaca..fc6d2a25d 100644
--- a/source/slang/slang-language-server-auto-format.cpp
+++ b/source/slang/slang-language-server-auto-format.cpp
@@ -202,7 +202,24 @@ List<Edit> formatSource(UnownedStringSlice text, Index lineStart, Index lineEnd,
// Never allow clang-format to put the semicolon after `}` in its own line.
if (edt.offset < text.getLength() && edt.length == 0 && text[edt.offset] == ';' && edt.offset >0 && text[edt.offset - 1] == '}')
continue;
-
+ // If need to preserve line break, turn all edits with a line break into a space.
+ if (options.behavior == FormatBehavior::PreserveLineBreak)
+ {
+ auto originalText = text.subString(edt.offset, edt.length);
+ bool originalHasLineBreak = originalText.indexOf('\n') != -1;
+ bool newHasLineBreak = edt.text.indexOf('\n') != -1;
+ if (originalHasLineBreak == newHasLineBreak)
+ {
+ }
+ else if (!originalHasLineBreak && newHasLineBreak)
+ {
+ edt.text = " ";
+ }
+ else
+ {
+ continue;
+ }
+ }
edits.add(edt);
}
return edits;