Skip to content

Commit

Permalink
Fix !! incremental parsing (#59977)
Browse files Browse the repository at this point in the history
  • Loading branch information
Youssef1313 authored Mar 8, 2022
1 parent ea22fec commit 15bf05a
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/Compilers/CSharp/Portable/Parser/Blender.Reader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ private static bool IsFabricatedToken(SyntaxKind kind)
{
case SyntaxKind.GreaterThanGreaterThanToken:
case SyntaxKind.GreaterThanGreaterThanEqualsToken:
case SyntaxKind.ExclamationExclamationToken:
return true;
default:
return SyntaxFacts.IsContextualKeyword(kind);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,19 @@ private SyntaxTree Parse(string text, params string[] defines)
return SyntaxFactory.ParseSyntaxTree(itext, options);
}

private SyntaxTree Parse6(string text)
private SyntaxTree Parse(string text, LanguageVersion languageVersion)
{
var options = new CSharpParseOptions(languageVersion: LanguageVersion.CSharp6);
var options = new CSharpParseOptions(languageVersion: languageVersion);
var itext = SourceText.From(text);
return SyntaxFactory.ParseSyntaxTree(itext, options);
}

private SyntaxTree Parse6(string text)
=> Parse(text, LanguageVersion.CSharp6);

private SyntaxTree ParsePreview(string text)
=> Parse(text, LanguageVersion.Preview);

[Fact]
public void TestChangeClassNameWithNonMatchingMethod()
{
Expand All @@ -51,6 +57,31 @@ public void TestChangeClassNameWithNonMatchingMethod()
SyntaxKind.IdentifierToken);
}

[Fact]
public void TestExclamationExclamation()
{
var text = @"#nullable enable
public class C {
public void M(string? x !!) { // no error.
}
}";
var oldTree = this.ParsePreview(text);
var newTree = oldTree.WithReplaceFirst("?", "");
Assert.Equal(0, oldTree.GetCompilationUnitRoot().Errors().Length);
Assert.Equal(0, newTree.GetCompilationUnitRoot().Errors().Length);

var diffs = SyntaxDifferences.GetRebuiltNodes(oldTree, newTree);
TestDiffsInOrder(diffs,
SyntaxKind.CompilationUnit,
SyntaxKind.ClassDeclaration,
SyntaxKind.MethodDeclaration,
SyntaxKind.ParameterList,
SyntaxKind.Parameter,
SyntaxKind.PredefinedType,
SyntaxKind.StringKeyword);
}

[Fact]
public void TestChangeClassNameToNotMatchConstructor()
{
Expand Down

0 comments on commit 15bf05a

Please sign in to comment.