From 73f14cd043962864d27dbbf6066ee2020bbb6846 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 15 Mar 2024 11:46:19 -0700 Subject: [PATCH 1/8] Fix excessive compilation times due to speculative parsing after an incomplete string --- .../CSharp/Portable/Parser/LanguageParser.cs | 48 +- .../CollectionExpressionParsingTests.cs | 1419 +++++++++++++++++ 2 files changed, 1464 insertions(+), 3 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs index 830d75daae40f..4d9a61966c9b1 100644 --- a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs @@ -1040,6 +1040,7 @@ private AttributeSyntax ParseAttribute() SyntaxKind.CloseParenToken, static @this => @this.IsPossibleAttributeArgument(), static @this => @this.ParseAttributeArgument(), + immediatelyAbort, skipBadAttributeArgumentTokens, allowTrailingSeparator: false, requireOneElement: false, @@ -1058,6 +1059,20 @@ static PostSkipAction skipBadAttributeArgumentTokens( static (p, closeKind) => p.CurrentToken.Kind == closeKind, expectedKind, closeKind); } + + static bool immediatelyAbort(AttributeArgumentSyntax argument) + { + // We can be very thrown off by incomplete strings in an attribute argument (especially as the lexer + // will restart on the next line with the contents of the string then being interpreted as more + // arguments). Bail out in this case to prevent going off the rails. + if (argument.expression is LiteralExpressionSyntax { Kind: SyntaxKind.StringLiteralExpression, Token: var literalToken } && + literalToken.GetDiagnostics().Contains(d => d.Code == (int)ErrorCode.ERR_NewlineInConst)) + { + return true; + } + + return false; + } } private bool IsPossibleAttributeArgument() @@ -13348,6 +13363,7 @@ private delegate PostSkipAction SkipBadTokens( /// All the callbacks should passed as static lambdas or static methods to prevent unnecessary delegate /// allocations. /// + private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( ref SyntaxToken openToken, SyntaxKind closeTokenKind, @@ -13357,6 +13373,29 @@ private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( bool allowTrailingSeparator, bool requireOneElement, bool allowSemicolonAsSeparator) where TNode : GreenNode + { + return ParseCommaSeparatedSyntaxList( + ref openToken, + closeTokenKind, + isPossibleElement, + parseElement, + immediatelyAbort: null, + skipBadTokens, + allowTrailingSeparator, + requireOneElement, + allowSemicolonAsSeparator); + } + + private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( + ref SyntaxToken openToken, + SyntaxKind closeTokenKind, + Func isPossibleElement, + Func parseElement, + Func? immediatelyAbort, + SkipBadTokens skipBadTokens, + bool allowTrailingSeparator, + bool requireOneElement, + bool allowSemicolonAsSeparator) where TNode : GreenNode { // If we ever want this function to parse out separated lists with a different separator, we can // parameterize this method on this value. @@ -13369,7 +13408,8 @@ private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( if (requireOneElement || shouldParseSeparatorOrElement()) { // first argument - nodes.Add(parseElement(this)); + var node = parseElement(this); + nodes.Add(node); // now that we've gotten one element, we don't require any more. requireOneElement = false; @@ -13377,7 +13417,8 @@ private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( // Ensure that if parsing separators/elements doesn't move us forward, that we always bail out from // parsing this list. int lastTokenPosition = -1; - while (IsMakingProgress(ref lastTokenPosition)) + + while (immediatelyAbort?.Invoke(node) != true && IsMakingProgress(ref lastTokenPosition)) { if (this.CurrentToken.Kind == closeTokenKind) break; @@ -13402,7 +13443,8 @@ private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( } } - nodes.Add(parseElement(this)); + node = parseElement(this); + nodes.Add(node); continue; } diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs index 75cde7ce70fbc..77cd5ddf135a0 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs @@ -17128,4 +17128,1423 @@ public void CollectionExpressionParsingSlotCounts([CombinatorialRange(1, 20)] in N(SyntaxKind.CloseBracketToken); EOF(); } + + [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] + public void TestIncompleteString1() + { + UsingTree(""" + namespace Hl7.Fhir.Model + { + [Serializable] + [DataContract] + [FhirType("Bundle","http://hl7.org/fhir/StructureDefinition/Bundle", IsResource=true)] + public partial class Bundle : Hl7.Fhir.Model.Resource + { + public override string TypeName { get { return "Bundle"; } } + [FhirEnumeration("BundleType")] + public enum BundleType + { + [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to a collection of records, documents, or other + materials of historical interest.")] + Archives, + [EnumLiteral("author", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to the context's author.")] + Author, + [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Identifies the entity that blocks access to a resource + following receipt of a legal demand.")] + BlockedBy, + [EnumLiteral("bookmark", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Gives a permanent link to use for bookmarking purposes.")] + Bookmark, + [EnumLiteral("canonical", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Designates the preferred version of a resource (the IRI and its contents).")] + Canonical, + } + } + } + """, + // (12,99): error CS1010: Newline in constant + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(12, 99), + // (12,154): error CS1026: ) expected + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(12, 154), + // (12,154): error CS1003: Syntax error, ',' expected + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(12, 154), + // (13,17): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(13, 17), + // (13,20): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "historical").WithArguments(",").WithLocation(13, 20), + // (13,31): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "interest").WithArguments(",").WithLocation(13, 31), + // (13,40): error CS1001: Identifier expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(13, 40), + // (13,40): error CS1010: Newline in constant + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(13, 40), + // (13,43): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(13, 43), + // (14,16): error CS1003: Syntax error, ']' expected + // Archives, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(14, 16), + // (17,101): error CS1010: Newline in constant + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Identifies the entity that blocks access to a resource + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(17, 101), + // (17,156): error CS1026: ) expected + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Identifies the entity that blocks access to a resource + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(17, 156), + // (17,156): error CS1003: Syntax error, ',' expected + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Identifies the entity that blocks access to a resource + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(17, 156), + // (18,17): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "receipt").WithArguments(",").WithLocation(18, 17), + // (18,25): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(18, 25), + // (18,28): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "a").WithArguments(",").WithLocation(18, 28), + // (18,30): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "legal").WithArguments(",").WithLocation(18, 30), + // (18,36): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "demand").WithArguments(",").WithLocation(18, 36), + // (18,43): error CS1001: Identifier expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(18, 43), + // (18,43): error CS1010: Newline in constant + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(18, 43), + // (18,46): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(18, 46), + // (19,17): error CS1003: Syntax error, ']' expected + // BlockedBy, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(19, 17)); + + + N(SyntaxKind.CompilationUnit); + { + N(SyntaxKind.NamespaceDeclaration); + { + N(SyntaxKind.NamespaceKeyword); + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Hl7"); + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Fhir"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Model"); + } + } + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.ClassDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Serializable"); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "DataContract"); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "FhirType"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Bundle\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/StructureDefinition/Bundle\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.NameEquals); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "IsResource"); + } + N(SyntaxKind.EqualsToken); + } + N(SyntaxKind.TrueLiteralExpression); + { + N(SyntaxKind.TrueKeyword); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.PartialKeyword); + N(SyntaxKind.ClassKeyword); + N(SyntaxKind.IdentifierToken, "Bundle"); + N(SyntaxKind.BaseList); + { + N(SyntaxKind.ColonToken); + N(SyntaxKind.SimpleBaseType); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Hl7"); + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Fhir"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Model"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Resource"); + } + } + } + } + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.PropertyDeclaration); + { + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.OverrideKeyword); + N(SyntaxKind.PredefinedType); + { + N(SyntaxKind.StringKeyword); + } + N(SyntaxKind.IdentifierToken, "TypeName"); + N(SyntaxKind.AccessorList); + { + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.GetAccessorDeclaration); + { + N(SyntaxKind.GetKeyword); + N(SyntaxKind.Block); + { + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.ReturnStatement); + { + N(SyntaxKind.ReturnKeyword); + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Bundle\""); + } + N(SyntaxKind.SemicolonToken); + } + N(SyntaxKind.CloseBraceToken); + } + } + N(SyntaxKind.CloseBraceToken); + } + } + N(SyntaxKind.EnumDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "FhirEnumeration"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"BundleType\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.EnumKeyword); + N(SyntaxKind.IdentifierToken, "BundleType"); + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"archives\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Refers to a collection of records, documents, or other"); + } + } + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "materials"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "of"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "historical"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "interest"); + } + N(SyntaxKind.DotToken); + M(SyntaxKind.IdentifierName); + { + M(SyntaxKind.IdentifierToken); + } + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Archives"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"author\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Refers to the context's author.\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Author"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"blocked-by\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Identifies the entity that blocks access to a resource"); + } + } + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "following"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "receipt"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "of"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "a"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "legal"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "demand"); + } + N(SyntaxKind.DotToken); + M(SyntaxKind.IdentifierName); + { + M(SyntaxKind.IdentifierToken); + } + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "BlockedBy"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"bookmark\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Gives a permanent link to use for bookmarking purposes.\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Bookmark"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"canonical\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Designates the preferred version of a resource (the IRI and its contents).\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Canonical"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.EndOfFileToken); + } + EOF(); + } + + [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] + public void TestIncompleteString2() + { + UsingTree(""" + namespace Hl7.Fhir.Model + { + [Serializable] + [DataContract] + [FhirType("Bundle","http://hl7.org/fhir/StructureDefinition/Bundle", IsResource=true)] + public partial class Bundle : Hl7.Fhir.Model.Resource + { + public override string TypeName { get { return "Bundle"; } } + [FhirEnumeration("BundleType")] + public enum BundleType + { + [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Refers to a collection of records, documents, or other + materials of historical interest.")] + Archives, + [EnumLiteral("author", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to the context's author.")] + Author, + [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Identifies the entity that blocks access to a resource + following receipt of a legal demand.")] + BlockedBy, + [EnumLiteral("bookmark", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Gives a permanent link to use for bookmarking purposes.")] + Bookmark, + [EnumLiteral("canonical", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Designates the preferred version of a resource (the IRI and its contents).")] + Canonical, + } + } + } + """, + // (12,104): error CS1010: Newline in constant + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(12, 104), + // (12,159): error CS1026: ) expected + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(12, 159), + // (12,159): error CS1003: Syntax error, ',' expected + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(12, 159), + // (13,17): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(13, 17), + // (13,20): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "historical").WithArguments(",").WithLocation(13, 20), + // (13,31): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "interest").WithArguments(",").WithLocation(13, 31), + // (13,40): error CS1001: Identifier expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(13, 40), + // (13,40): error CS1010: Newline in constant + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(13, 40), + // (13,43): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(13, 43), + // (14,16): error CS1003: Syntax error, ']' expected + // Archives, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(14, 16), + // (17,106): error CS1010: Newline in constant + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Identifies the entity that blocks access to a resource + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(17, 106), + // (17,161): error CS1026: ) expected + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Identifies the entity that blocks access to a resource + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(17, 161), + // (17,161): error CS1003: Syntax error, ',' expected + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Identifies the entity that blocks access to a resource + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(17, 161), + // (18,17): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "receipt").WithArguments(",").WithLocation(18, 17), + // (18,25): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(18, 25), + // (18,28): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "a").WithArguments(",").WithLocation(18, 28), + // (18,30): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "legal").WithArguments(",").WithLocation(18, 30), + // (18,36): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "demand").WithArguments(",").WithLocation(18, 36), + // (18,43): error CS1001: Identifier expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(18, 43), + // (18,43): error CS1010: Newline in constant + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(18, 43), + // (18,46): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(18, 46), + // (19,17): error CS1003: Syntax error, ']' expected + // BlockedBy, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(19, 17)); + + N(SyntaxKind.CompilationUnit); + { + N(SyntaxKind.NamespaceDeclaration); + { + N(SyntaxKind.NamespaceKeyword); + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Hl7"); + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Fhir"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Model"); + } + } + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.ClassDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Serializable"); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "DataContract"); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "FhirType"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Bundle\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/StructureDefinition/Bundle\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.NameEquals); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "IsResource"); + } + N(SyntaxKind.EqualsToken); + } + N(SyntaxKind.TrueLiteralExpression); + { + N(SyntaxKind.TrueKeyword); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.PartialKeyword); + N(SyntaxKind.ClassKeyword); + N(SyntaxKind.IdentifierToken, "Bundle"); + N(SyntaxKind.BaseList); + { + N(SyntaxKind.ColonToken); + N(SyntaxKind.SimpleBaseType); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Hl7"); + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Fhir"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Model"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Resource"); + } + } + } + } + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.PropertyDeclaration); + { + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.OverrideKeyword); + N(SyntaxKind.PredefinedType); + { + N(SyntaxKind.StringKeyword); + } + N(SyntaxKind.IdentifierToken, "TypeName"); + N(SyntaxKind.AccessorList); + { + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.GetAccessorDeclaration); + { + N(SyntaxKind.GetKeyword); + N(SyntaxKind.Block); + { + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.ReturnStatement); + { + N(SyntaxKind.ReturnKeyword); + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Bundle\""); + } + N(SyntaxKind.SemicolonToken); + } + N(SyntaxKind.CloseBraceToken); + } + } + N(SyntaxKind.CloseBraceToken); + } + } + N(SyntaxKind.EnumDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "FhirEnumeration"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"BundleType\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.EnumKeyword); + N(SyntaxKind.IdentifierToken, "BundleType"); + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"archives\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"X\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Refers to a collection of records, documents, or other"); + } + } + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "materials"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "of"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "historical"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "interest"); + } + N(SyntaxKind.DotToken); + M(SyntaxKind.IdentifierName); + { + M(SyntaxKind.IdentifierToken); + } + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Archives"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"author\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Refers to the context's author.\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Author"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"blocked-by\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"X\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Identifies the entity that blocks access to a resource"); + } + } + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "following"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "receipt"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "of"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "a"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "legal"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "demand"); + } + N(SyntaxKind.DotToken); + M(SyntaxKind.IdentifierName); + { + M(SyntaxKind.IdentifierToken); + } + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "BlockedBy"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"bookmark\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Gives a permanent link to use for bookmarking purposes.\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Bookmark"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"canonical\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Designates the preferred version of a resource (the IRI and its contents).\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Canonical"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.EndOfFileToken); + } + EOF(); + } } From 579960053550d7362d3651ad37167a4f4f16e3a1 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sun, 17 Mar 2024 15:05:39 -0700 Subject: [PATCH 2/8] nrt --- src/Compilers/CSharp/Portable/Parser/LanguageParser.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs index 4d9a61966c9b1..86d3b0d1c9aa2 100644 --- a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs @@ -13386,6 +13386,8 @@ private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( allowSemicolonAsSeparator); } +#nullable enable + private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( ref SyntaxToken openToken, SyntaxKind closeTokenKind, @@ -13483,6 +13485,8 @@ bool shouldParseSeparatorOrElement() } } +#nullable disable + private DisposableResetPoint GetDisposableResetPoint(bool resetOnDispose) => new DisposableResetPoint(this, resetOnDispose, GetResetPoint()); From c518c5149cca6a5433d5f9135340683abf2048fd Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sun, 17 Mar 2024 15:17:14 -0700 Subject: [PATCH 3/8] Lint --- .../Test/Syntax/Parsing/CollectionExpressionParsingTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs index 77cd5ddf135a0..513aeea1ac9ce 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs @@ -17227,7 +17227,6 @@ public enum BundleType // BlockedBy, Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(19, 17)); - N(SyntaxKind.CompilationUnit); { N(SyntaxKind.NamespaceDeclaration); From 7b4be0ddc924b5c7a1bf5942065e496b8707bc20 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 19 Mar 2024 13:48:04 -0700 Subject: [PATCH 4/8] new line --- src/Compilers/CSharp/Portable/Parser/LanguageParser.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs index 86d3b0d1c9aa2..bca573d36349d 100644 --- a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs @@ -13363,7 +13363,6 @@ private delegate PostSkipAction SkipBadTokens( /// All the callbacks should passed as static lambdas or static methods to prevent unnecessary delegate /// allocations. /// - private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( ref SyntaxToken openToken, SyntaxKind closeTokenKind, From 2a5c5f5c7edb55657681bf4ceed5cf130416b333 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 19 Mar 2024 13:59:05 -0700 Subject: [PATCH 5/8] Support untermniated interpolated strings as well --- .../CSharp/Portable/Parser/LanguageParser.cs | 3 + .../CollectionExpressionParsingTests.cs | 1470 +++++++++++++++++ 2 files changed, 1473 insertions(+) diff --git a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs index bca573d36349d..2fe432ec11b14 100644 --- a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs @@ -1071,6 +1071,9 @@ static bool immediatelyAbort(AttributeArgumentSyntax argument) return true; } + if (argument.expression is InterpolatedStringExpressionSyntax { StringStartToken.Kind: SyntaxKind.InterpolatedStringStartToken, StringEndToken.IsMissing: true }) + return true; + return false; } } diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs index 513aeea1ac9ce..f9409e92ce1c9 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs @@ -18546,4 +18546,1474 @@ public enum BundleType } EOF(); } + + [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] + public void TestIncompleteString3() + { + UsingTree(""" + namespace Hl7.Fhir.Model + { + [Serializable] + [DataContract] + [FhirType("Bundle","http://hl7.org/fhir/StructureDefinition/Bundle", IsResource=true)] + public partial class Bundle : Hl7.Fhir.Model.Resource + { + public override string TypeName { get { return "Bundle"; } } + [FhirEnumeration("BundleType")] + public enum BundleType + { + [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to a collection of records, documents, or other + materials of historical interest.")] + Archives, + [EnumLiteral("author", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to the context's author.")] + Author, + [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($" + following receipt of a legal demand.")] + BlockedBy, + [EnumLiteral("bookmark", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Gives a permanent link to use for bookmarking purposes.")] + Bookmark, + [EnumLiteral("canonical", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Designates the preferred version of a resource (the IRI and its contents).")] + Canonical, + } + } + } + """, + // (12,154): error CS1039: Unterminated string literal + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_UnterminatedStringLit, "r").WithLocation(12, 154), + // (12,155): error CS1026: ) expected + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(12, 155), + // (12,155): error CS1003: Syntax error, ',' expected + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(12, 155), + // (13,17): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(13, 17), + // (13,20): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "historical").WithArguments(",").WithLocation(13, 20), + // (13,31): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "interest").WithArguments(",").WithLocation(13, 31), + // (13,40): error CS1001: Identifier expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(13, 40), + // (13,40): error CS1010: Newline in constant + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(13, 40), + // (13,43): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(13, 43), + // (14,16): error CS1003: Syntax error, ']' expected + // Archives, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(14, 16), + // (17,102): error CS1039: Unterminated string literal + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($" + Diagnostic(ErrorCode.ERR_UnterminatedStringLit, @"""").WithLocation(17, 102), + // (17,103): error CS1026: ) expected + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($" + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(17, 103), + // (17,103): error CS1003: Syntax error, ',' expected + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($" + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(17, 103), + // (18,17): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "receipt").WithArguments(",").WithLocation(18, 17), + // (18,25): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(18, 25), + // (18,28): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "a").WithArguments(",").WithLocation(18, 28), + // (18,30): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "legal").WithArguments(",").WithLocation(18, 30), + // (18,36): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "demand").WithArguments(",").WithLocation(18, 36), + // (18,43): error CS1001: Identifier expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(18, 43), + // (18,43): error CS1010: Newline in constant + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(18, 43), + // (18,46): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(18, 46), + // (19,17): error CS1003: Syntax error, ']' expected + // BlockedBy, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(19, 17)); + + N(SyntaxKind.CompilationUnit); + { + N(SyntaxKind.NamespaceDeclaration); + { + N(SyntaxKind.NamespaceKeyword); + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Hl7"); + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Fhir"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Model"); + } + } + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.ClassDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Serializable"); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "DataContract"); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "FhirType"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Bundle\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/StructureDefinition/Bundle\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.NameEquals); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "IsResource"); + } + N(SyntaxKind.EqualsToken); + } + N(SyntaxKind.TrueLiteralExpression); + { + N(SyntaxKind.TrueKeyword); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.PartialKeyword); + N(SyntaxKind.ClassKeyword); + N(SyntaxKind.IdentifierToken, "Bundle"); + N(SyntaxKind.BaseList); + { + N(SyntaxKind.ColonToken); + N(SyntaxKind.SimpleBaseType); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Hl7"); + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Fhir"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Model"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Resource"); + } + } + } + } + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.PropertyDeclaration); + { + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.OverrideKeyword); + N(SyntaxKind.PredefinedType); + { + N(SyntaxKind.StringKeyword); + } + N(SyntaxKind.IdentifierToken, "TypeName"); + N(SyntaxKind.AccessorList); + { + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.GetAccessorDeclaration); + { + N(SyntaxKind.GetKeyword); + N(SyntaxKind.Block); + { + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.ReturnStatement); + { + N(SyntaxKind.ReturnKeyword); + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Bundle\""); + } + N(SyntaxKind.SemicolonToken); + } + N(SyntaxKind.CloseBraceToken); + } + } + N(SyntaxKind.CloseBraceToken); + } + } + N(SyntaxKind.EnumDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "FhirEnumeration"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"BundleType\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.EnumKeyword); + N(SyntaxKind.IdentifierToken, "BundleType"); + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"archives\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + M(SyntaxKind.InterpolatedStringEndToken); + } + } + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "materials"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "of"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "historical"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "interest"); + } + N(SyntaxKind.DotToken); + M(SyntaxKind.IdentifierName); + { + M(SyntaxKind.IdentifierToken); + } + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Archives"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"author\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + N(SyntaxKind.InterpolatedStringEndToken); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Author"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"blocked-by\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + M(SyntaxKind.InterpolatedStringEndToken); + } + } + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "following"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "receipt"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "of"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "a"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "legal"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "demand"); + } + N(SyntaxKind.DotToken); + M(SyntaxKind.IdentifierName); + { + M(SyntaxKind.IdentifierToken); + } + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "BlockedBy"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"bookmark\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + N(SyntaxKind.InterpolatedStringEndToken); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Bookmark"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"canonical\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + N(SyntaxKind.InterpolatedStringEndToken); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Canonical"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.EndOfFileToken); + } + EOF(); + } + + [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] + public void TestIncompleteString4() + { + UsingTree(""" + namespace Hl7.Fhir.Model + { + [Serializable] + [DataContract] + [FhirType("Bundle","http://hl7.org/fhir/StructureDefinition/Bundle", IsResource=true)] + public partial class Bundle : Hl7.Fhir.Model.Resource + { + public override string TypeName { get { return "Bundle"; } } + [FhirEnumeration("BundleType")] + public enum BundleType + { + [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other + materials of historical interest.")] + Archives, + [EnumLiteral("author", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to the context's author.")] + Author, + [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $" + following receipt of a legal demand.")] + BlockedBy, + [EnumLiteral("bookmark", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Gives a permanent link to use for bookmarking purposes.")] + Bookmark, + [EnumLiteral("canonical", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Designates the preferred version of a resource (the IRI and its contents).")] + Canonical, + } + } + } + """, + // (12,160): error CS1039: Unterminated string literal + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_UnterminatedStringLit, "r").WithLocation(12, 160), + // (12,161): error CS1026: ) expected + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(12, 161), + // (12,161): error CS1003: Syntax error, ',' expected + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(12, 161), + // (13,17): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(13, 17), + // (13,20): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "historical").WithArguments(",").WithLocation(13, 20), + // (13,31): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "interest").WithArguments(",").WithLocation(13, 31), + // (13,40): error CS1001: Identifier expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(13, 40), + // (13,40): error CS1010: Newline in constant + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(13, 40), + // (13,43): error CS1003: Syntax error, ',' expected + // materials of historical interest.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(13, 43), + // (14,16): error CS1003: Syntax error, ']' expected + // Archives, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(14, 16), + // (17,108): error CS1039: Unterminated string literal + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $" + Diagnostic(ErrorCode.ERR_UnterminatedStringLit, @"""").WithLocation(17, 108), + // (17,109): error CS1026: ) expected + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $" + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(17, 109), + // (17,109): error CS1003: Syntax error, ',' expected + // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $" + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(17, 109), + // (18,17): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "receipt").WithArguments(",").WithLocation(18, 17), + // (18,25): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(18, 25), + // (18,28): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "a").WithArguments(",").WithLocation(18, 28), + // (18,30): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "legal").WithArguments(",").WithLocation(18, 30), + // (18,36): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "demand").WithArguments(",").WithLocation(18, 36), + // (18,43): error CS1001: Identifier expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(18, 43), + // (18,43): error CS1010: Newline in constant + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(18, 43), + // (18,46): error CS1003: Syntax error, ',' expected + // following receipt of a legal demand.")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(18, 46), + // (19,17): error CS1003: Syntax error, ']' expected + // BlockedBy, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(19, 17)); + + N(SyntaxKind.CompilationUnit); + { + N(SyntaxKind.NamespaceDeclaration); + { + N(SyntaxKind.NamespaceKeyword); + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Hl7"); + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Fhir"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Model"); + } + } + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.ClassDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Serializable"); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "DataContract"); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "FhirType"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Bundle\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/StructureDefinition/Bundle\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.NameEquals); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "IsResource"); + } + N(SyntaxKind.EqualsToken); + } + N(SyntaxKind.TrueLiteralExpression); + { + N(SyntaxKind.TrueKeyword); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.PartialKeyword); + N(SyntaxKind.ClassKeyword); + N(SyntaxKind.IdentifierToken, "Bundle"); + N(SyntaxKind.BaseList); + { + N(SyntaxKind.ColonToken); + N(SyntaxKind.SimpleBaseType); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Hl7"); + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Fhir"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Model"); + } + } + N(SyntaxKind.DotToken); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Resource"); + } + } + } + } + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.PropertyDeclaration); + { + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.OverrideKeyword); + N(SyntaxKind.PredefinedType); + { + N(SyntaxKind.StringKeyword); + } + N(SyntaxKind.IdentifierToken, "TypeName"); + N(SyntaxKind.AccessorList); + { + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.GetAccessorDeclaration); + { + N(SyntaxKind.GetKeyword); + N(SyntaxKind.Block); + { + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.ReturnStatement); + { + N(SyntaxKind.ReturnKeyword); + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Bundle\""); + } + N(SyntaxKind.SemicolonToken); + } + N(SyntaxKind.CloseBraceToken); + } + } + N(SyntaxKind.CloseBraceToken); + } + } + N(SyntaxKind.EnumDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "FhirEnumeration"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"BundleType\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.EnumKeyword); + N(SyntaxKind.IdentifierToken, "BundleType"); + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"archives\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + N(SyntaxKind.InterpolatedStringEndToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + M(SyntaxKind.InterpolatedStringEndToken); + } + } + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "materials"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "of"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "historical"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "interest"); + } + N(SyntaxKind.DotToken); + M(SyntaxKind.IdentifierName); + { + M(SyntaxKind.IdentifierToken); + } + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Archives"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"author\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + N(SyntaxKind.InterpolatedStringEndToken); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Author"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"blocked-by\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + N(SyntaxKind.InterpolatedStringEndToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + M(SyntaxKind.InterpolatedStringEndToken); + } + } + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "following"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "receipt"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "of"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "a"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "legal"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.QualifiedName); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "demand"); + } + N(SyntaxKind.DotToken); + M(SyntaxKind.IdentifierName); + { + M(SyntaxKind.IdentifierToken); + } + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "BlockedBy"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"bookmark\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + N(SyntaxKind.InterpolatedStringEndToken); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Bookmark"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "EnumLiteral"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"canonical\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); + { + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + N(SyntaxKind.InterpolatedStringEndToken); + } + } + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.IdentifierToken, "Canonical"); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.EndOfFileToken); + } + EOF(); + } } From 7ff7901719c244c37ad9730258454064af69db13 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 19 Mar 2024 14:00:36 -0700 Subject: [PATCH 6/8] Expand nullable scope --- src/Compilers/CSharp/Portable/Parser/LanguageParser.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs index 2fe432ec11b14..007aab4bc1859 100644 --- a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs @@ -13339,6 +13339,8 @@ private bool IsInQuery private delegate PostSkipAction SkipBadTokens( LanguageParser parser, ref SyntaxToken openToken, SeparatedSyntaxListBuilder builder, SyntaxKind expectedKind, SyntaxKind closeTokenKind) where TNode : GreenNode; +#nullable enable + /// /// Parses a comma separated list of nodes. /// @@ -13388,8 +13390,6 @@ private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( allowSemicolonAsSeparator); } -#nullable enable - private SeparatedSyntaxList ParseCommaSeparatedSyntaxList( ref SyntaxToken openToken, SyntaxKind closeTokenKind, From 110155b2438b2a9d53bde8d2e8244bb511a3cbfc Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 19 Mar 2024 14:37:19 -0700 Subject: [PATCH 7/8] lint --- .../Test/Syntax/Parsing/CollectionExpressionParsingTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs index f9409e92ce1c9..5665e6ac85dc1 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs @@ -19301,7 +19301,7 @@ public enum BundleType } """, // (12,160): error CS1039: Unterminated string literal - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other + // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other Diagnostic(ErrorCode.ERR_UnterminatedStringLit, "r").WithLocation(12, 160), // (12,161): error CS1026: ) expected // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other From d1b4bf6fe2b71fd641e057d9e8bf577570942881 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 20 Mar 2024 09:53:08 -0700 Subject: [PATCH 8/8] Simplify tests --- .../CollectionExpressionParsingTests.cs | 3438 ++++------------- 1 file changed, 767 insertions(+), 2671 deletions(-) diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs index 5665e6ac85dc1..5eed36571065c 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/CollectionExpressionParsingTests.cs @@ -17133,151 +17133,148 @@ public void CollectionExpressionParsingSlotCounts([CombinatorialRange(1, 20)] in public void TestIncompleteString1() { UsingTree(""" - namespace Hl7.Fhir.Model - { - [Serializable] - [DataContract] - [FhirType("Bundle","http://hl7.org/fhir/StructureDefinition/Bundle", IsResource=true)] - public partial class Bundle : Hl7.Fhir.Model.Resource - { - public override string TypeName { get { return "Bundle"; } } - [FhirEnumeration("BundleType")] - public enum BundleType - { - [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to a collection of records, documents, or other - materials of historical interest.")] - Archives, - [EnumLiteral("author", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to the context's author.")] - Author, - [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Identifies the entity that blocks access to a resource - following receipt of a legal demand.")] - BlockedBy, - [EnumLiteral("bookmark", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Gives a permanent link to use for bookmarking purposes.")] - Bookmark, - [EnumLiteral("canonical", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Designates the preferred version of a resource (the IRI and its contents).")] - Canonical, - } - } + public enum BundleType + { + [A("B", "C"), Description("Goo + bar baz")] + A, + [A("B", "C"), Description("Goo + bar baz")] + B, } """, - // (12,99): error CS1010: Newline in constant - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(12, 99), - // (12,154): error CS1026: ) expected - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(12, 154), - // (12,154): error CS1003: Syntax error, ',' expected - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(12, 154), - // (13,17): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(13, 17), - // (13,20): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "historical").WithArguments(",").WithLocation(13, 20), - // (13,31): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "interest").WithArguments(",").WithLocation(13, 31), - // (13,40): error CS1001: Identifier expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(13, 40), - // (13,40): error CS1010: Newline in constant - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(13, 40), - // (13,43): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(13, 43), - // (14,16): error CS1003: Syntax error, ']' expected - // Archives, - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(14, 16), - // (17,101): error CS1010: Newline in constant - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Identifies the entity that blocks access to a resource - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(17, 101), - // (17,156): error CS1026: ) expected - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Identifies the entity that blocks access to a resource - Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(17, 156), - // (17,156): error CS1003: Syntax error, ',' expected - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Identifies the entity that blocks access to a resource - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(17, 156), - // (18,17): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "receipt").WithArguments(",").WithLocation(18, 17), - // (18,25): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(18, 25), - // (18,28): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "a").WithArguments(",").WithLocation(18, 28), - // (18,30): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "legal").WithArguments(",").WithLocation(18, 30), - // (18,36): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "demand").WithArguments(",").WithLocation(18, 36), - // (18,43): error CS1001: Identifier expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(18, 43), - // (18,43): error CS1010: Newline in constant - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(18, 43), - // (18,46): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(18, 46), - // (19,17): error CS1003: Syntax error, ']' expected - // BlockedBy, - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(19, 17)); + // (3,31): error CS1010: Newline in constant + // [A("B", "C"), Description("Goo + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(3, 31), + // (3,35): error CS1026: ) expected + // [A("B", "C"), Description("Goo + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(3, 35), + // (3,35): error CS1003: Syntax error, ',' expected + // [A("B", "C"), Description("Goo + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(3, 35), + // (4,9): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "baz").WithArguments(",").WithLocation(4, 9), + // (4,12): error CS1010: Newline in constant + // bar baz")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(4, 12), + // (4,15): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(4, 15), + // (5,7): error CS1003: Syntax error, ']' expected + // A, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(5, 7), + // (6,31): error CS1010: Newline in constant + // [A("B", "C"), Description("Goo + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(6, 31), + // (6,35): error CS1026: ) expected + // [A("B", "C"), Description("Goo + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(6, 35), + // (6,35): error CS1003: Syntax error, ',' expected + // [A("B", "C"), Description("Goo + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(6, 35), + // (7,9): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "baz").WithArguments(",").WithLocation(7, 9), + // (7,12): error CS1010: Newline in constant + // bar baz")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(7, 12), + // (7,15): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(7, 15), + // (8,7): error CS1003: Syntax error, ']' expected + // B, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(8, 7), + // (8,7): error CS1001: Identifier expected + // B, + Diagnostic(ErrorCode.ERR_IdentifierExpected, "").WithLocation(8, 7)); N(SyntaxKind.CompilationUnit); { - N(SyntaxKind.NamespaceDeclaration); + N(SyntaxKind.EnumDeclaration); { - N(SyntaxKind.NamespaceKeyword); - N(SyntaxKind.QualifiedName); + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.EnumKeyword); + N(SyntaxKind.IdentifierToken, "BundleType"); + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.EnumMemberDeclaration); { - N(SyntaxKind.QualifiedName); + N(SyntaxKind.AttributeList); { - N(SyntaxKind.IdentifierName); + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); { - N(SyntaxKind.IdentifierToken, "Hl7"); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "A"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"B\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"C\""); + } + } + N(SyntaxKind.CloseParenToken); + } } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); { - N(SyntaxKind.IdentifierToken, "Fhir"); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Goo"); + } + } + M(SyntaxKind.CloseParenToken); + } } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Model"); - } - } - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.ClassDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); + M(SyntaxKind.CommaToken); N(SyntaxKind.Attribute); { N(SyntaxKind.IdentifierName); { - N(SyntaxKind.IdentifierToken, "Serializable"); + N(SyntaxKind.IdentifierToken, "bar"); } } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); + M(SyntaxKind.CommaToken); N(SyntaxKind.Attribute); { N(SyntaxKind.IdentifierName); { - N(SyntaxKind.IdentifierToken, "DataContract"); + N(SyntaxKind.IdentifierToken, "baz"); } } - N(SyntaxKind.CloseBracketToken); + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "A"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); } N(SyntaxKind.AttributeList); { @@ -17286,7 +17283,7 @@ public enum BundleType { N(SyntaxKind.IdentifierName); { - N(SyntaxKind.IdentifierToken, "FhirType"); + N(SyntaxKind.IdentifierToken, "A"); } N(SyntaxKind.AttributeArgumentList); { @@ -17295,7 +17292,7 @@ public enum BundleType { N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.StringLiteralToken, "\"Bundle\""); + N(SyntaxKind.StringLiteralToken, "\"B\""); } } N(SyntaxKind.CommaToken); @@ -17303,682 +17300,468 @@ public enum BundleType { N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/StructureDefinition/Bundle\""); + N(SyntaxKind.StringLiteralToken, "\"C\""); } } - N(SyntaxKind.CommaToken); + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.NameEquals); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "IsResource"); - } - N(SyntaxKind.EqualsToken); - } - N(SyntaxKind.TrueLiteralExpression); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.TrueKeyword); + N(SyntaxKind.StringLiteralToken, "\"Goo"); } } - N(SyntaxKind.CloseParenToken); + M(SyntaxKind.CloseParenToken); } } - N(SyntaxKind.CloseBracketToken); + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "bar"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "baz"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "B"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); } - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.PartialKeyword); - N(SyntaxKind.ClassKeyword); - N(SyntaxKind.IdentifierToken, "Bundle"); - N(SyntaxKind.BaseList); + M(SyntaxKind.IdentifierToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.EndOfFileToken); + } + EOF(); + } + + [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] + public void TestIncompleteString2() + { + UsingTree(""" + public enum BundleType + { + [A("B", "C"), Description("X", "Goo + bar baz")] + A, + [A("B", "C"), Description("X", "Goo + bar baz")] + B, + } + """, + // (3,36): error CS1010: Newline in constant + // [A("B", "C"), Description("X", "Goo + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(3, 36), + // (3,40): error CS1026: ) expected + // [A("B", "C"), Description("X", "Goo + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(3, 40), + // (3,40): error CS1003: Syntax error, ',' expected + // [A("B", "C"), Description("X", "Goo + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(3, 40), + // (4,9): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "baz").WithArguments(",").WithLocation(4, 9), + // (4,12): error CS1010: Newline in constant + // bar baz")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(4, 12), + // (4,15): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(4, 15), + // (5,7): error CS1003: Syntax error, ']' expected + // A, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(5, 7), + // (6,36): error CS1010: Newline in constant + // [A("B", "C"), Description("X", "Goo + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(6, 36), + // (6,40): error CS1026: ) expected + // [A("B", "C"), Description("X", "Goo + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(6, 40), + // (6,40): error CS1003: Syntax error, ',' expected + // [A("B", "C"), Description("X", "Goo + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(6, 40), + // (7,9): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "baz").WithArguments(",").WithLocation(7, 9), + // (7,12): error CS1010: Newline in constant + // bar baz")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(7, 12), + // (7,15): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(7, 15), + // (8,7): error CS1003: Syntax error, ']' expected + // B, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(8, 7), + // (8,7): error CS1001: Identifier expected + // B, + Diagnostic(ErrorCode.ERR_IdentifierExpected, "").WithLocation(8, 7)); + + N(SyntaxKind.CompilationUnit); + { + N(SyntaxKind.EnumDeclaration); + { + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.EnumKeyword); + N(SyntaxKind.IdentifierToken, "BundleType"); + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); { - N(SyntaxKind.ColonToken); - N(SyntaxKind.SimpleBaseType); + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); { - N(SyntaxKind.QualifiedName); + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "A"); + } + N(SyntaxKind.AttributeArgumentList); { - N(SyntaxKind.QualifiedName); + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Hl7"); - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Fhir"); - } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.IdentifierToken, "Model"); + N(SyntaxKind.StringLiteralToken, "\"B\""); } } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierToken, "Resource"); + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"C\""); + } } + N(SyntaxKind.CloseParenToken); } } - } - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.PropertyDeclaration); - { - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.OverrideKeyword); - N(SyntaxKind.PredefinedType); - { - N(SyntaxKind.StringKeyword); - } - N(SyntaxKind.IdentifierToken, "TypeName"); - N(SyntaxKind.AccessorList); + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); { - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.GetAccessorDeclaration); + N(SyntaxKind.IdentifierName); { - N(SyntaxKind.GetKeyword); - N(SyntaxKind.Block); + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.ReturnStatement); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.ReturnKeyword); - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Bundle\""); - } - N(SyntaxKind.SemicolonToken); + N(SyntaxKind.StringLiteralToken, "\"X\""); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"Goo"); } - N(SyntaxKind.CloseBraceToken); } + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "bar"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "baz"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "A"); } - N(SyntaxKind.CloseBraceToken); } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); } - N(SyntaxKind.EnumDeclaration); + N(SyntaxKind.AttributeList); { - N(SyntaxKind.AttributeList); + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.IdentifierName); { - N(SyntaxKind.IdentifierName); + N(SyntaxKind.IdentifierToken, "A"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierToken, "FhirEnumeration"); + N(SyntaxKind.StringLiteralExpression); + { + N(SyntaxKind.StringLiteralToken, "\"B\""); + } } - N(SyntaxKind.AttributeArgumentList); + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"BundleType\""); - } + N(SyntaxKind.StringLiteralToken, "\"C\""); } - N(SyntaxKind.CloseParenToken); } + N(SyntaxKind.CloseParenToken); } - N(SyntaxKind.CloseBracketToken); } - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.EnumKeyword); - N(SyntaxKind.IdentifierToken, "BundleType"); - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.EnumMemberDeclaration); + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); { - N(SyntaxKind.AttributeList); + N(SyntaxKind.IdentifierName); { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"archives\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Refers to a collection of records, documents, or other"); - } - } - M(SyntaxKind.CloseParenToken); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "materials"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "of"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "historical"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "interest"); - } - N(SyntaxKind.DotToken); - M(SyntaxKind.IdentifierName); - { - M(SyntaxKind.IdentifierToken); - } - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Archives"); - } - } - N(SyntaxKind.CommaToken); - M(SyntaxKind.CloseBracketToken); + N(SyntaxKind.IdentifierToken, "Description"); } - N(SyntaxKind.AttributeList); + N(SyntaxKind.AttributeArgumentList); { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"author\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); + N(SyntaxKind.StringLiteralToken, "\"X\""); } } N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Refers to the context's author.\""); - } - } - N(SyntaxKind.CloseParenToken); + N(SyntaxKind.StringLiteralToken, "\"Goo"); } } - N(SyntaxKind.CloseBracketToken); + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "bar"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "baz"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "B"); } - N(SyntaxKind.IdentifierToken, "Author"); } N(SyntaxKind.CommaToken); - N(SyntaxKind.EnumMemberDeclaration); + M(SyntaxKind.CloseBracketToken); + } + M(SyntaxKind.IdentifierToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.EndOfFileToken); + } + EOF(); + } + + [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] + public void TestIncompleteString3() + { + UsingTree(""" + public enum BundleType + { + [A("B", "C"), Description($"Goo + bar baz")] + A, + [A("B", "C"), Description($"Goo + bar baz")] + B, + } + """, + // (3,35): error CS1039: Unterminated string literal + // [A("B", "C"), Description($"Goo + Diagnostic(ErrorCode.ERR_UnterminatedStringLit, "o").WithLocation(3, 35), + // (3,36): error CS1026: ) expected + // [A("B", "C"), Description($"Goo + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(3, 36), + // (3,36): error CS1003: Syntax error, ',' expected + // [A("B", "C"), Description($"Goo + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(3, 36), + // (4,9): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "baz").WithArguments(",").WithLocation(4, 9), + // (4,12): error CS1010: Newline in constant + // bar baz")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(4, 12), + // (4,15): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(4, 15), + // (5,7): error CS1003: Syntax error, ']' expected + // A, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(5, 7), + // (6,35): error CS1039: Unterminated string literal + // [A("B", "C"), Description($"Goo + Diagnostic(ErrorCode.ERR_UnterminatedStringLit, "o").WithLocation(6, 35), + // (6,36): error CS1026: ) expected + // [A("B", "C"), Description($"Goo + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(6, 36), + // (6,36): error CS1003: Syntax error, ',' expected + // [A("B", "C"), Description($"Goo + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(6, 36), + // (7,9): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "baz").WithArguments(",").WithLocation(7, 9), + // (7,12): error CS1010: Newline in constant + // bar baz")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(7, 12), + // (7,15): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(7, 15), + // (8,7): error CS1003: Syntax error, ']' expected + // B, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(8, 7), + // (8,7): error CS1001: Identifier expected + // B, + Diagnostic(ErrorCode.ERR_IdentifierExpected, "").WithLocation(8, 7)); + + N(SyntaxKind.CompilationUnit); + { + N(SyntaxKind.EnumDeclaration); + { + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.EnumKeyword); + N(SyntaxKind.IdentifierToken, "BundleType"); + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); { - N(SyntaxKind.AttributeList); + N(SyntaxKind.IdentifierName); { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.IdentifierToken, "A"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"blocked-by\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); + N(SyntaxKind.StringLiteralToken, "\"B\""); } } N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Identifies the entity that blocks access to a resource"); - } - } - M(SyntaxKind.CloseParenToken); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "following"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "receipt"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "of"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "a"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.IdentifierToken, "legal"); + N(SyntaxKind.StringLiteralToken, "\"C\""); } } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.QualifiedName); + N(SyntaxKind.InterpolatedStringExpression); { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "demand"); - } - N(SyntaxKind.DotToken); - M(SyntaxKind.IdentifierName); + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); { - M(SyntaxKind.IdentifierToken); + N(SyntaxKind.InterpolatedStringTextToken); } + M(SyntaxKind.InterpolatedStringEndToken); } } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "BlockedBy"); - } - } - N(SyntaxKind.CommaToken); - M(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"bookmark\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Gives a permanent link to use for bookmarking purposes.\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); + M(SyntaxKind.CloseParenToken); } - N(SyntaxKind.IdentifierToken, "Bookmark"); } - N(SyntaxKind.CommaToken); - N(SyntaxKind.EnumMemberDeclaration); + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); { - N(SyntaxKind.AttributeList); + N(SyntaxKind.IdentifierName); { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"canonical\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Designates the preferred version of a resource (the IRI and its contents).\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); + N(SyntaxKind.IdentifierToken, "bar"); } - N(SyntaxKind.IdentifierToken, "Canonical"); - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.CloseBraceToken); - } - N(SyntaxKind.CloseBraceToken); - } - N(SyntaxKind.CloseBraceToken); - } - N(SyntaxKind.EndOfFileToken); - } - EOF(); - } - - [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] - public void TestIncompleteString2() - { - UsingTree(""" - namespace Hl7.Fhir.Model - { - [Serializable] - [DataContract] - [FhirType("Bundle","http://hl7.org/fhir/StructureDefinition/Bundle", IsResource=true)] - public partial class Bundle : Hl7.Fhir.Model.Resource - { - public override string TypeName { get { return "Bundle"; } } - [FhirEnumeration("BundleType")] - public enum BundleType - { - [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Refers to a collection of records, documents, or other - materials of historical interest.")] - Archives, - [EnumLiteral("author", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Refers to the context's author.")] - Author, - [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Identifies the entity that blocks access to a resource - following receipt of a legal demand.")] - BlockedBy, - [EnumLiteral("bookmark", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Gives a permanent link to use for bookmarking purposes.")] - Bookmark, - [EnumLiteral("canonical", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("Designates the preferred version of a resource (the IRI and its contents).")] - Canonical, - } - } - } - """, - // (12,104): error CS1010: Newline in constant - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(12, 104), - // (12,159): error CS1026: ) expected - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(12, 159), - // (12,159): error CS1003: Syntax error, ',' expected - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(12, 159), - // (13,17): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(13, 17), - // (13,20): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "historical").WithArguments(",").WithLocation(13, 20), - // (13,31): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "interest").WithArguments(",").WithLocation(13, 31), - // (13,40): error CS1001: Identifier expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(13, 40), - // (13,40): error CS1010: Newline in constant - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(13, 40), - // (13,43): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(13, 43), - // (14,16): error CS1003: Syntax error, ']' expected - // Archives, - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(14, 16), - // (17,106): error CS1010: Newline in constant - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Identifies the entity that blocks access to a resource - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(17, 106), - // (17,161): error CS1026: ) expected - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Identifies the entity that blocks access to a resource - Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(17, 161), - // (17,161): error CS1003: Syntax error, ',' expected - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description("X", "Identifies the entity that blocks access to a resource - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(17, 161), - // (18,17): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "receipt").WithArguments(",").WithLocation(18, 17), - // (18,25): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(18, 25), - // (18,28): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "a").WithArguments(",").WithLocation(18, 28), - // (18,30): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "legal").WithArguments(",").WithLocation(18, 30), - // (18,36): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "demand").WithArguments(",").WithLocation(18, 36), - // (18,43): error CS1001: Identifier expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(18, 43), - // (18,43): error CS1010: Newline in constant - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(18, 43), - // (18,46): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(18, 46), - // (19,17): error CS1003: Syntax error, ']' expected - // BlockedBy, - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(19, 17)); - - N(SyntaxKind.CompilationUnit); - { - N(SyntaxKind.NamespaceDeclaration); - { - N(SyntaxKind.NamespaceKeyword); - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Hl7"); - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Fhir"); } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Model"); - } - } - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.ClassDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); + M(SyntaxKind.CommaToken); N(SyntaxKind.Attribute); { N(SyntaxKind.IdentifierName); { - N(SyntaxKind.IdentifierToken, "Serializable"); + N(SyntaxKind.IdentifierToken, "baz"); } } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); + M(SyntaxKind.CommaToken); N(SyntaxKind.Attribute); { N(SyntaxKind.IdentifierName); { - N(SyntaxKind.IdentifierToken, "DataContract"); + N(SyntaxKind.IdentifierToken, "A"); } } - N(SyntaxKind.CloseBracketToken); + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); } N(SyntaxKind.AttributeList); { @@ -17987,2028 +17770,341 @@ public enum BundleType { N(SyntaxKind.IdentifierName); { - N(SyntaxKind.IdentifierToken, "FhirType"); + N(SyntaxKind.IdentifierToken, "A"); } N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Bundle\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/StructureDefinition/Bundle\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.NameEquals); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "IsResource"); - } - N(SyntaxKind.EqualsToken); - } - N(SyntaxKind.TrueLiteralExpression); - { - N(SyntaxKind.TrueKeyword); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.PartialKeyword); - N(SyntaxKind.ClassKeyword); - N(SyntaxKind.IdentifierToken, "Bundle"); - N(SyntaxKind.BaseList); - { - N(SyntaxKind.ColonToken); - N(SyntaxKind.SimpleBaseType); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Hl7"); - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Fhir"); - } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Model"); - } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Resource"); - } - } - } - } - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.PropertyDeclaration); - { - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.OverrideKeyword); - N(SyntaxKind.PredefinedType); - { - N(SyntaxKind.StringKeyword); - } - N(SyntaxKind.IdentifierToken, "TypeName"); - N(SyntaxKind.AccessorList); - { - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.GetAccessorDeclaration); - { - N(SyntaxKind.GetKeyword); - N(SyntaxKind.Block); - { - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.ReturnStatement); - { - N(SyntaxKind.ReturnKeyword); - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Bundle\""); - } - N(SyntaxKind.SemicolonToken); - } - N(SyntaxKind.CloseBraceToken); - } - } - N(SyntaxKind.CloseBraceToken); - } - } - N(SyntaxKind.EnumDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "FhirEnumeration"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"BundleType\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.EnumKeyword); - N(SyntaxKind.IdentifierToken, "BundleType"); - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.EnumMemberDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"archives\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"X\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Refers to a collection of records, documents, or other"); - } - } - M(SyntaxKind.CloseParenToken); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "materials"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "of"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "historical"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "interest"); - } - N(SyntaxKind.DotToken); - M(SyntaxKind.IdentifierName); - { - M(SyntaxKind.IdentifierToken); - } - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Archives"); - } - } - N(SyntaxKind.CommaToken); - M(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"author\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Refers to the context's author.\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.IdentifierToken, "Author"); - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.EnumMemberDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"blocked-by\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"X\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Identifies the entity that blocks access to a resource"); - } - } - M(SyntaxKind.CloseParenToken); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "following"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "receipt"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "of"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "a"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "legal"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "demand"); - } - N(SyntaxKind.DotToken); - M(SyntaxKind.IdentifierName); - { - M(SyntaxKind.IdentifierToken); - } - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "BlockedBy"); - } - } - N(SyntaxKind.CommaToken); - M(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"bookmark\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Gives a permanent link to use for bookmarking purposes.\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.IdentifierToken, "Bookmark"); - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.EnumMemberDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"canonical\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Designates the preferred version of a resource (the IRI and its contents).\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.IdentifierToken, "Canonical"); - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.CloseBraceToken); - } - N(SyntaxKind.CloseBraceToken); - } - N(SyntaxKind.CloseBraceToken); - } - N(SyntaxKind.EndOfFileToken); - } - EOF(); - } - - [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] - public void TestIncompleteString3() - { - UsingTree(""" - namespace Hl7.Fhir.Model - { - [Serializable] - [DataContract] - [FhirType("Bundle","http://hl7.org/fhir/StructureDefinition/Bundle", IsResource=true)] - public partial class Bundle : Hl7.Fhir.Model.Resource - { - public override string TypeName { get { return "Bundle"; } } - [FhirEnumeration("BundleType")] - public enum BundleType - { - [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to a collection of records, documents, or other - materials of historical interest.")] - Archives, - [EnumLiteral("author", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to the context's author.")] - Author, - [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($" - following receipt of a legal demand.")] - BlockedBy, - [EnumLiteral("bookmark", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Gives a permanent link to use for bookmarking purposes.")] - Bookmark, - [EnumLiteral("canonical", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Designates the preferred version of a resource (the IRI and its contents).")] - Canonical, - } - } - } - """, - // (12,154): error CS1039: Unterminated string literal - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_UnterminatedStringLit, "r").WithLocation(12, 154), - // (12,155): error CS1026: ) expected - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(12, 155), - // (12,155): error CS1003: Syntax error, ',' expected - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(12, 155), - // (13,17): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(13, 17), - // (13,20): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "historical").WithArguments(",").WithLocation(13, 20), - // (13,31): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "interest").WithArguments(",").WithLocation(13, 31), - // (13,40): error CS1001: Identifier expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(13, 40), - // (13,40): error CS1010: Newline in constant - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(13, 40), - // (13,43): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(13, 43), - // (14,16): error CS1003: Syntax error, ']' expected - // Archives, - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(14, 16), - // (17,102): error CS1039: Unterminated string literal - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($" - Diagnostic(ErrorCode.ERR_UnterminatedStringLit, @"""").WithLocation(17, 102), - // (17,103): error CS1026: ) expected - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($" - Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(17, 103), - // (17,103): error CS1003: Syntax error, ',' expected - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($" - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(17, 103), - // (18,17): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "receipt").WithArguments(",").WithLocation(18, 17), - // (18,25): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(18, 25), - // (18,28): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "a").WithArguments(",").WithLocation(18, 28), - // (18,30): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "legal").WithArguments(",").WithLocation(18, 30), - // (18,36): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "demand").WithArguments(",").WithLocation(18, 36), - // (18,43): error CS1001: Identifier expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(18, 43), - // (18,43): error CS1010: Newline in constant - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(18, 43), - // (18,46): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(18, 46), - // (19,17): error CS1003: Syntax error, ']' expected - // BlockedBy, - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(19, 17)); - - N(SyntaxKind.CompilationUnit); - { - N(SyntaxKind.NamespaceDeclaration); - { - N(SyntaxKind.NamespaceKeyword); - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Hl7"); - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Fhir"); - } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Model"); - } - } - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.ClassDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Serializable"); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "DataContract"); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "FhirType"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Bundle\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/StructureDefinition/Bundle\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.NameEquals); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "IsResource"); - } - N(SyntaxKind.EqualsToken); - } - N(SyntaxKind.TrueLiteralExpression); - { - N(SyntaxKind.TrueKeyword); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.PartialKeyword); - N(SyntaxKind.ClassKeyword); - N(SyntaxKind.IdentifierToken, "Bundle"); - N(SyntaxKind.BaseList); - { - N(SyntaxKind.ColonToken); - N(SyntaxKind.SimpleBaseType); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Hl7"); - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Fhir"); - } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Model"); - } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Resource"); - } - } - } - } - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.PropertyDeclaration); - { - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.OverrideKeyword); - N(SyntaxKind.PredefinedType); - { - N(SyntaxKind.StringKeyword); - } - N(SyntaxKind.IdentifierToken, "TypeName"); - N(SyntaxKind.AccessorList); - { - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.GetAccessorDeclaration); - { - N(SyntaxKind.GetKeyword); - N(SyntaxKind.Block); - { - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.ReturnStatement); - { - N(SyntaxKind.ReturnKeyword); - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Bundle\""); - } - N(SyntaxKind.SemicolonToken); - } - N(SyntaxKind.CloseBraceToken); - } - } - N(SyntaxKind.CloseBraceToken); - } - } - N(SyntaxKind.EnumDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "FhirEnumeration"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"BundleType\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.EnumKeyword); - N(SyntaxKind.IdentifierToken, "BundleType"); - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.EnumMemberDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"archives\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - M(SyntaxKind.InterpolatedStringEndToken); - } - } - M(SyntaxKind.CloseParenToken); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "materials"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "of"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "historical"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "interest"); - } - N(SyntaxKind.DotToken); - M(SyntaxKind.IdentifierName); - { - M(SyntaxKind.IdentifierToken); - } - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Archives"); - } - } - N(SyntaxKind.CommaToken); - M(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"author\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - N(SyntaxKind.InterpolatedStringEndToken); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.IdentifierToken, "Author"); - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.EnumMemberDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"blocked-by\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - M(SyntaxKind.InterpolatedStringEndToken); - } - } - M(SyntaxKind.CloseParenToken); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "following"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "receipt"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "of"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "a"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "legal"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "demand"); - } - N(SyntaxKind.DotToken); - M(SyntaxKind.IdentifierName); - { - M(SyntaxKind.IdentifierToken); - } - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "BlockedBy"); - } - } - N(SyntaxKind.CommaToken); - M(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"bookmark\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - N(SyntaxKind.InterpolatedStringEndToken); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.IdentifierToken, "Bookmark"); - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.EnumMemberDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"canonical\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - N(SyntaxKind.InterpolatedStringEndToken); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.IdentifierToken, "Canonical"); - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.CloseBraceToken); - } - N(SyntaxKind.CloseBraceToken); - } - N(SyntaxKind.CloseBraceToken); - } - N(SyntaxKind.EndOfFileToken); - } - EOF(); - } - - [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] - public void TestIncompleteString4() - { - UsingTree(""" - namespace Hl7.Fhir.Model - { - [Serializable] - [DataContract] - [FhirType("Bundle","http://hl7.org/fhir/StructureDefinition/Bundle", IsResource=true)] - public partial class Bundle : Hl7.Fhir.Model.Resource - { - public override string TypeName { get { return "Bundle"; } } - [FhirEnumeration("BundleType")] - public enum BundleType - { - [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other - materials of historical interest.")] - Archives, - [EnumLiteral("author", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Refers to the context's author.")] - Author, - [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $" - following receipt of a legal demand.")] - BlockedBy, - [EnumLiteral("bookmark", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Gives a permanent link to use for bookmarking purposes.")] - Bookmark, - [EnumLiteral("canonical", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"Designates the preferred version of a resource (the IRI and its contents).")] - Canonical, - } - } - } - """, - // (12,160): error CS1039: Unterminated string literal - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_UnterminatedStringLit, "r").WithLocation(12, 160), - // (12,161): error CS1026: ) expected - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(12, 161), - // (12,161): error CS1003: Syntax error, ',' expected - // [EnumLiteral("archives", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $"Refers to a collection of records, documents, or other - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(12, 161), - // (13,17): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(13, 17), - // (13,20): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "historical").WithArguments(",").WithLocation(13, 20), - // (13,31): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "interest").WithArguments(",").WithLocation(13, 31), - // (13,40): error CS1001: Identifier expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(13, 40), - // (13,40): error CS1010: Newline in constant - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(13, 40), - // (13,43): error CS1003: Syntax error, ',' expected - // materials of historical interest.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(13, 43), - // (14,16): error CS1003: Syntax error, ']' expected - // Archives, - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(14, 16), - // (17,108): error CS1039: Unterminated string literal - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $" - Diagnostic(ErrorCode.ERR_UnterminatedStringLit, @"""").WithLocation(17, 108), - // (17,109): error CS1026: ) expected - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $" - Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(17, 109), - // (17,109): error CS1003: Syntax error, ',' expected - // [EnumLiteral("blocked-by", "http://hl7.org/fhir/CodeSystem/iana-link-relations"), Description($"X", $" - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(17, 109), - // (18,17): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "receipt").WithArguments(",").WithLocation(18, 17), - // (18,25): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "of").WithArguments(",").WithLocation(18, 25), - // (18,28): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "a").WithArguments(",").WithLocation(18, 28), - // (18,30): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "legal").WithArguments(",").WithLocation(18, 30), - // (18,36): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "demand").WithArguments(",").WithLocation(18, 36), - // (18,43): error CS1001: Identifier expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_IdentifierExpected, @""")]").WithLocation(18, 43), - // (18,43): error CS1010: Newline in constant - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(18, 43), - // (18,46): error CS1003: Syntax error, ',' expected - // following receipt of a legal demand.")] - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(18, 46), - // (19,17): error CS1003: Syntax error, ']' expected - // BlockedBy, - Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(19, 17)); - - N(SyntaxKind.CompilationUnit); - { - N(SyntaxKind.NamespaceDeclaration); - { - N(SyntaxKind.NamespaceKeyword); - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Hl7"); - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Fhir"); - } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Model"); - } - } - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.ClassDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Serializable"); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "DataContract"); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "FhirType"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Bundle\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/StructureDefinition/Bundle\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.NameEquals); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "IsResource"); - } - N(SyntaxKind.EqualsToken); - } - N(SyntaxKind.TrueLiteralExpression); - { - N(SyntaxKind.TrueKeyword); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.PartialKeyword); - N(SyntaxKind.ClassKeyword); - N(SyntaxKind.IdentifierToken, "Bundle"); - N(SyntaxKind.BaseList); - { - N(SyntaxKind.ColonToken); - N(SyntaxKind.SimpleBaseType); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Hl7"); - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Fhir"); - } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Model"); - } - } - N(SyntaxKind.DotToken); - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Resource"); - } - } - } - } - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.PropertyDeclaration); - { - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.OverrideKeyword); - N(SyntaxKind.PredefinedType); - { - N(SyntaxKind.StringKeyword); - } - N(SyntaxKind.IdentifierToken, "TypeName"); - N(SyntaxKind.AccessorList); - { - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.GetAccessorDeclaration); - { - N(SyntaxKind.GetKeyword); - N(SyntaxKind.Block); - { - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.ReturnStatement); - { - N(SyntaxKind.ReturnKeyword); - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"Bundle\""); - } - N(SyntaxKind.SemicolonToken); - } - N(SyntaxKind.CloseBraceToken); - } - } - N(SyntaxKind.CloseBraceToken); - } - } - N(SyntaxKind.EnumDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "FhirEnumeration"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"BundleType\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.PublicKeyword); - N(SyntaxKind.EnumKeyword); - N(SyntaxKind.IdentifierToken, "BundleType"); - N(SyntaxKind.OpenBraceToken); - N(SyntaxKind.EnumMemberDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"archives\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - N(SyntaxKind.InterpolatedStringEndToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - M(SyntaxKind.InterpolatedStringEndToken); - } - } - M(SyntaxKind.CloseParenToken); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "materials"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "of"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "historical"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.QualifiedName); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "interest"); - } - N(SyntaxKind.DotToken); - M(SyntaxKind.IdentifierName); - { - M(SyntaxKind.IdentifierToken); - } - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Archives"); - } - } - N(SyntaxKind.CommaToken); - M(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"author\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - N(SyntaxKind.InterpolatedStringEndToken); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CloseBracketToken); - } - N(SyntaxKind.IdentifierToken, "Author"); - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.EnumMemberDeclaration); - { - N(SyntaxKind.AttributeList); - { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"blocked-by\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); - { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - N(SyntaxKind.InterpolatedStringEndToken); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - M(SyntaxKind.InterpolatedStringEndToken); - } - } - M(SyntaxKind.CloseParenToken); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "following"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); - { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "receipt"); - } - } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.IdentifierToken, "of"); + N(SyntaxKind.StringLiteralToken, "\"B\""); } } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.IdentifierToken, "a"); + N(SyntaxKind.StringLiteralToken, "\"C\""); } } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); + N(SyntaxKind.InterpolatedStringExpression); { - N(SyntaxKind.IdentifierToken, "legal"); + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); + { + N(SyntaxKind.InterpolatedStringTextToken); + } + M(SyntaxKind.InterpolatedStringEndToken); } } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "bar"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "baz"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "B"); + } + } + N(SyntaxKind.CommaToken); + M(SyntaxKind.CloseBracketToken); + } + M(SyntaxKind.IdentifierToken); + } + N(SyntaxKind.CloseBraceToken); + } + N(SyntaxKind.EndOfFileToken); + } + EOF(); + } + + [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/72557")] + public void TestIncompleteString4() + { + UsingTree(""" + public enum BundleType + { + [A("B", "C"), Description("X", $"Goo + bar baz")] + A, + [A("B", "C"), Description("X", $"Goo + bar baz")] + B, + } + """, + // (3,40): error CS1039: Unterminated string literal + // [A("B", "C"), Description("X", $"Goo + Diagnostic(ErrorCode.ERR_UnterminatedStringLit, "o").WithLocation(3, 40), + // (3,41): error CS1026: ) expected + // [A("B", "C"), Description("X", $"Goo + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(3, 41), + // (3,41): error CS1003: Syntax error, ',' expected + // [A("B", "C"), Description("X", $"Goo + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(3, 41), + // (4,9): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "baz").WithArguments(",").WithLocation(4, 9), + // (4,12): error CS1010: Newline in constant + // bar baz")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(4, 12), + // (4,15): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(4, 15), + // (5,7): error CS1003: Syntax error, ']' expected + // A, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(5, 7), + // (6,40): error CS1039: Unterminated string literal + // [A("B", "C"), Description("X", $"Goo + Diagnostic(ErrorCode.ERR_UnterminatedStringLit, "o").WithLocation(6, 40), + // (6,41): error CS1026: ) expected + // [A("B", "C"), Description("X", $"Goo + Diagnostic(ErrorCode.ERR_CloseParenExpected, "").WithLocation(6, 41), + // (6,41): error CS1003: Syntax error, ',' expected + // [A("B", "C"), Description("X", $"Goo + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(6, 41), + // (7,9): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "baz").WithArguments(",").WithLocation(7, 9), + // (7,12): error CS1010: Newline in constant + // bar baz")] + Diagnostic(ErrorCode.ERR_NewlineInConst, "").WithLocation(7, 12), + // (7,15): error CS1003: Syntax error, ',' expected + // bar baz")] + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments(",").WithLocation(7, 15), + // (8,7): error CS1003: Syntax error, ']' expected + // B, + Diagnostic(ErrorCode.ERR_SyntaxError, "").WithArguments("]").WithLocation(8, 7), + // (8,7): error CS1001: Identifier expected + // B, + Diagnostic(ErrorCode.ERR_IdentifierExpected, "").WithLocation(8, 7)); + + N(SyntaxKind.CompilationUnit); + { + N(SyntaxKind.EnumDeclaration); + { + N(SyntaxKind.PublicKeyword); + N(SyntaxKind.EnumKeyword); + N(SyntaxKind.IdentifierToken, "BundleType"); + N(SyntaxKind.OpenBraceToken); + N(SyntaxKind.EnumMemberDeclaration); + { + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "A"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.QualifiedName); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "demand"); - } - N(SyntaxKind.DotToken); - M(SyntaxKind.IdentifierName); - { - M(SyntaxKind.IdentifierToken); - } + N(SyntaxKind.StringLiteralToken, "\"B\""); } } - M(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.IdentifierToken, "BlockedBy"); + N(SyntaxKind.StringLiteralToken, "\"C\""); } } - N(SyntaxKind.CommaToken); - M(SyntaxKind.CloseBracketToken); + N(SyntaxKind.CloseParenToken); } - N(SyntaxKind.AttributeList); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); - } - N(SyntaxKind.AttributeArgumentList); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"bookmark\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); + N(SyntaxKind.StringLiteralToken, "\"X\""); } } N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); - { - N(SyntaxKind.IdentifierToken, "Description"); - } - N(SyntaxKind.AttributeArgumentList); + N(SyntaxKind.InterpolatedStringExpression); { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - N(SyntaxKind.InterpolatedStringEndToken); - } + N(SyntaxKind.InterpolatedStringTextToken); } - N(SyntaxKind.CloseParenToken); + M(SyntaxKind.InterpolatedStringEndToken); } } - N(SyntaxKind.CloseBracketToken); + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "bar"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "baz"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "A"); } - N(SyntaxKind.IdentifierToken, "Bookmark"); } N(SyntaxKind.CommaToken); - N(SyntaxKind.EnumMemberDeclaration); + M(SyntaxKind.CloseBracketToken); + } + N(SyntaxKind.AttributeList); + { + N(SyntaxKind.OpenBracketToken); + N(SyntaxKind.Attribute); { - N(SyntaxKind.AttributeList); + N(SyntaxKind.IdentifierName); { - N(SyntaxKind.OpenBracketToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.IdentifierToken, "A"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.IdentifierToken, "EnumLiteral"); + N(SyntaxKind.StringLiteralToken, "\"B\""); } - N(SyntaxKind.AttributeArgumentList); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"canonical\""); - } - } - N(SyntaxKind.CommaToken); - N(SyntaxKind.AttributeArgument); - { - N(SyntaxKind.StringLiteralExpression); - { - N(SyntaxKind.StringLiteralToken, "\"http://hl7.org/fhir/CodeSystem/iana-link-relations\""); - } - } - N(SyntaxKind.CloseParenToken); + N(SyntaxKind.StringLiteralToken, "\"C\""); } } - N(SyntaxKind.CommaToken); - N(SyntaxKind.Attribute); + N(SyntaxKind.CloseParenToken); + } + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "Description"); + } + N(SyntaxKind.AttributeArgumentList); + { + N(SyntaxKind.OpenParenToken); + N(SyntaxKind.AttributeArgument); { - N(SyntaxKind.IdentifierName); + N(SyntaxKind.StringLiteralExpression); { - N(SyntaxKind.IdentifierToken, "Description"); + N(SyntaxKind.StringLiteralToken, "\"X\""); } - N(SyntaxKind.AttributeArgumentList); + } + N(SyntaxKind.CommaToken); + N(SyntaxKind.AttributeArgument); + { + N(SyntaxKind.InterpolatedStringExpression); { - N(SyntaxKind.OpenParenToken); - N(SyntaxKind.AttributeArgument); + N(SyntaxKind.InterpolatedStringStartToken); + N(SyntaxKind.InterpolatedStringText); { - N(SyntaxKind.InterpolatedStringExpression); - { - N(SyntaxKind.InterpolatedStringStartToken); - N(SyntaxKind.InterpolatedStringText); - { - N(SyntaxKind.InterpolatedStringTextToken); - } - N(SyntaxKind.InterpolatedStringEndToken); - } + N(SyntaxKind.InterpolatedStringTextToken); } - N(SyntaxKind.CloseParenToken); + M(SyntaxKind.InterpolatedStringEndToken); } } - N(SyntaxKind.CloseBracketToken); + M(SyntaxKind.CloseParenToken); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "bar"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "baz"); + } + } + M(SyntaxKind.CommaToken); + N(SyntaxKind.Attribute); + { + N(SyntaxKind.IdentifierName); + { + N(SyntaxKind.IdentifierToken, "B"); } - N(SyntaxKind.IdentifierToken, "Canonical"); } N(SyntaxKind.CommaToken); - N(SyntaxKind.CloseBraceToken); + M(SyntaxKind.CloseBracketToken); } - N(SyntaxKind.CloseBraceToken); + M(SyntaxKind.IdentifierToken); } N(SyntaxKind.CloseBraceToken); }