From d2156079a2df245cbce74246361acabede2f23e9 Mon Sep 17 00:00:00 2001 From: Tim Pohlmann Date: Thu, 23 May 2024 10:39:52 +0200 Subject: [PATCH 1/2] Add Test to demonstrate bug --- .../BraceScanners/CSharpBraceScannerTests.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/Viasfora.Tests/BraceScanners/CSharpBraceScannerTests.cs b/tests/Viasfora.Tests/BraceScanners/CSharpBraceScannerTests.cs index 7014d6a..f829627 100644 --- a/tests/Viasfora.Tests/BraceScanners/CSharpBraceScannerTests.cs +++ b/tests/Viasfora.Tests/BraceScanners/CSharpBraceScannerTests.cs @@ -217,7 +217,16 @@ public void RawString1() { var extractor = new CSharpBraceScanner(); var chars = ExtractWithLines(extractor, input.Trim(), 0, 0); Assert.Equal(0, chars.Count); + } + + [Fact] + public void RawString2() { + String input = "($\"\"\"some \r\n string with \r\n{\"quotes\"} \"\"\")"; + var extractor = new CSharpBraceScanner(); + var chars = ExtractWithLines(extractor, input.Trim(), 0, 0); + Assert.Equal(3, chars.Count); // should be 4 (with interpolation support) or 2 (without interpolation support) } + // TODO: Support later /* [Fact] From d2cee1262d54fc7c7ac38f18f58bc755a66db29d Mon Sep 17 00:00:00 2001 From: Tim Pohlmann Date: Thu, 23 May 2024 10:40:55 +0200 Subject: [PATCH 2/2] Make interpolated strings not take precedence over interpolated raw strings --- src/Viasfora.Languages/BraceScanners/CSharpBraceScanner.cs | 2 +- tests/Viasfora.Tests/BraceScanners/CSharpBraceScannerTests.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Viasfora.Languages/BraceScanners/CSharpBraceScanner.cs b/src/Viasfora.Languages/BraceScanners/CSharpBraceScanner.cs index cbdf37f..d8f8583 100644 --- a/src/Viasfora.Languages/BraceScanners/CSharpBraceScanner.cs +++ b/src/Viasfora.Languages/BraceScanners/CSharpBraceScanner.cs @@ -73,7 +73,7 @@ private bool ParseText(ITextChars tc, ref CharPos pos) { this.multiLine = true; tc.Skip(2); this.ParseMultiLineString(tc); - } else if ( tc.Char() == '$' && tc.NChar() == '"' ) { + } else if ( tc.Char() == '$' && tc.NChar() == '"' && tc.NNChar() != '"') { // Roslyn interpolated string this.parsingExpression = false; this.status = stIString; diff --git a/tests/Viasfora.Tests/BraceScanners/CSharpBraceScannerTests.cs b/tests/Viasfora.Tests/BraceScanners/CSharpBraceScannerTests.cs index f829627..5a85e12 100644 --- a/tests/Viasfora.Tests/BraceScanners/CSharpBraceScannerTests.cs +++ b/tests/Viasfora.Tests/BraceScanners/CSharpBraceScannerTests.cs @@ -224,7 +224,7 @@ public void RawString2() { String input = "($\"\"\"some \r\n string with \r\n{\"quotes\"} \"\"\")"; var extractor = new CSharpBraceScanner(); var chars = ExtractWithLines(extractor, input.Trim(), 0, 0); - Assert.Equal(3, chars.Count); // should be 4 (with interpolation support) or 2 (without interpolation support) + Assert.Equal(2, chars.Count); // should be 4 when interpolation is supported } // TODO: Support later