diff --git a/src/Analysis/Engine/Test/LineFormatterTests.cs b/src/Analysis/Engine/Test/LineFormatterTests.cs index 4ad5a4447..b1fa11290 100644 --- a/src/Analysis/Engine/Test/LineFormatterTests.cs +++ b/src/Analysis/Engine/Test/LineFormatterTests.cs @@ -390,6 +390,19 @@ public void CommentAfterOperator() { AssertSingleLineFormat("a+# comment\nb", "a + # comment"); } + [DataRow("'a''b'", "'a' 'b'")] + [DataRow("'a' 'b'", "'a' 'b'")] + [DataRow("'''a''''''b'''", "'''a''' '''b'''")] + [DataRow("'''a'''r'''b'''", "'''a''' r'''b'''")] + [DataRow("\"a\"\"b\"", "\"a\" \"b\"")] + [DataRow("\"a\" \"b\"", "\"a\" \"b\"")] + [DataRow("\"\"\"a\"\"\"\"\"\"b\"\"\"", "\"\"\"a\"\"\" \"\"\"b\"\"\"")] + [DataRow("\"\"\"a\"\"\"r\"\"\"b\"\"\"", "\"\"\"a\"\"\" r\"\"\"b\"\"\"")] + [DataTestMethod, Priority(0)] + public void StringConcat(string code, string expected) { + AssertSingleLineFormat(code, expected); + } + [TestMethod, Priority(0)] public void GrammarFile() { diff --git a/src/LanguageServer/Impl/Implementation/LineFormatter.cs b/src/LanguageServer/Impl/Implementation/LineFormatter.cs index fe42453fe..e16240361 100644 --- a/src/LanguageServer/Impl/Implementation/LineFormatter.cs +++ b/src/LanguageServer/Impl/Implementation/LineFormatter.cs @@ -287,8 +287,15 @@ public TextEdit[] FormatLine(int line) { builder.EnsureEndsWithSpace(); break; - case TokenKind.Name: case TokenKind.Constant: + if (token.IsString && next != null && next.IsString) { + builder.Append(token); + builder.EnsureEndsWithSpace(); + break; + } + goto case TokenKind.Name; + + case TokenKind.Name: case TokenKind.KeywordFalse: case TokenKind.KeywordTrue: case TokenKind.Ellipsis: // Ellipsis is a value @@ -410,19 +417,9 @@ public bool MatchesClose(TokenExt other) { public bool IsKeyword => (Kind >= TokenKind.FirstKeyword && Kind <= TokenKind.LastKeyword) || Kind == TokenKind.KeywordAsync || Kind == TokenKind.KeywordAwait; - public bool IsMultilineString { - get { - if (Span.Start.Line == Span.End.Line) { - return false; - } + public bool IsString => Kind == TokenKind.Constant && Token != Tokens.NoneToken && (Token.Value is string || Token.Value is AsciiString); - if (Kind != TokenKind.Constant || Token == Tokens.NoneToken) { - return false; - } - - return Token.Value is string || Token.Value is AsciiString; - } - } + public bool IsMultilineString => Span.Start.Line != Span.End.Line && IsString; public bool IsSimpleSliceToLeft { get {