diff --git a/eng/targets/Settings.props b/eng/targets/Settings.props index 8fa59a0307a0b..6d23d84991370 100644 --- a/eng/targets/Settings.props +++ b/eng/targets/Settings.props @@ -17,8 +17,6 @@ $(NoWarn);NU1507 - $(NoWarn);RSEXPERIMENTAL005 - CommonExtensions Microsoft\VBCSharp\LanguageServices diff --git a/src/Compilers/CSharp/Portable/CSharpResources.resx b/src/Compilers/CSharp/Portable/CSharpResources.resx index 611416fe327f8..4180b45fb01c3 100644 --- a/src/Compilers/CSharp/Portable/CSharpResources.resx +++ b/src/Compilers/CSharp/Portable/CSharpResources.resx @@ -8129,7 +8129,7 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ '#:' directives cannot be after first token in file - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') '#:' directives cannot be after '#if' directive diff --git a/src/Compilers/CSharp/Portable/Generated/CSharp.Generated.g4 b/src/Compilers/CSharp/Portable/Generated/CSharp.Generated.g4 index 02c4b6ce75cbe..ae009be6b61cd 100644 --- a/src/Compilers/CSharp/Portable/Generated/CSharp.Generated.g4 +++ b/src/Compilers/CSharp/Portable/Generated/CSharp.Generated.g4 @@ -1335,7 +1335,7 @@ error_directive_trivia ; ignored_directive_trivia - : '#' ':' + : '#' ':' string_literal_token? ; line_or_span_directive_trivia diff --git a/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Internal.Generated.cs b/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Internal.Generated.cs index 5a024081d1d9b..e714bb0d4bf4c 100644 --- a/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Internal.Generated.cs +++ b/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Internal.Generated.cs @@ -26608,44 +26608,60 @@ internal sealed partial class IgnoredDirectiveTriviaSyntax : DirectiveTriviaSynt { internal readonly SyntaxToken hashToken; internal readonly SyntaxToken colonToken; + internal readonly SyntaxToken? content; internal readonly SyntaxToken endOfDirectiveToken; internal readonly bool isActive; - internal IgnoredDirectiveTriviaSyntax(SyntaxKind kind, SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken endOfDirectiveToken, bool isActive, DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations) + internal IgnoredDirectiveTriviaSyntax(SyntaxKind kind, SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken? content, SyntaxToken endOfDirectiveToken, bool isActive, DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations) : base(kind, diagnostics, annotations) { - this.SlotCount = 3; + this.SlotCount = 4; this.AdjustFlagsAndWidth(hashToken); this.hashToken = hashToken; this.AdjustFlagsAndWidth(colonToken); this.colonToken = colonToken; + if (content != null) + { + this.AdjustFlagsAndWidth(content); + this.content = content; + } this.AdjustFlagsAndWidth(endOfDirectiveToken); this.endOfDirectiveToken = endOfDirectiveToken; this.isActive = isActive; } - internal IgnoredDirectiveTriviaSyntax(SyntaxKind kind, SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken endOfDirectiveToken, bool isActive, SyntaxFactoryContext context) + internal IgnoredDirectiveTriviaSyntax(SyntaxKind kind, SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken? content, SyntaxToken endOfDirectiveToken, bool isActive, SyntaxFactoryContext context) : base(kind) { this.SetFactoryContext(context); - this.SlotCount = 3; + this.SlotCount = 4; this.AdjustFlagsAndWidth(hashToken); this.hashToken = hashToken; this.AdjustFlagsAndWidth(colonToken); this.colonToken = colonToken; + if (content != null) + { + this.AdjustFlagsAndWidth(content); + this.content = content; + } this.AdjustFlagsAndWidth(endOfDirectiveToken); this.endOfDirectiveToken = endOfDirectiveToken; this.isActive = isActive; } - internal IgnoredDirectiveTriviaSyntax(SyntaxKind kind, SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken endOfDirectiveToken, bool isActive) + internal IgnoredDirectiveTriviaSyntax(SyntaxKind kind, SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken? content, SyntaxToken endOfDirectiveToken, bool isActive) : base(kind) { - this.SlotCount = 3; + this.SlotCount = 4; this.AdjustFlagsAndWidth(hashToken); this.hashToken = hashToken; this.AdjustFlagsAndWidth(colonToken); this.colonToken = colonToken; + if (content != null) + { + this.AdjustFlagsAndWidth(content); + this.content = content; + } this.AdjustFlagsAndWidth(endOfDirectiveToken); this.endOfDirectiveToken = endOfDirectiveToken; this.isActive = isActive; @@ -26653,6 +26669,7 @@ internal IgnoredDirectiveTriviaSyntax(SyntaxKind kind, SyntaxToken hashToken, Sy public override SyntaxToken HashToken => this.hashToken; public SyntaxToken ColonToken => this.colonToken; + public SyntaxToken? Content => this.content; public override SyntaxToken EndOfDirectiveToken => this.endOfDirectiveToken; public override bool IsActive => this.isActive; @@ -26661,7 +26678,8 @@ internal IgnoredDirectiveTriviaSyntax(SyntaxKind kind, SyntaxToken hashToken, Sy { 0 => this.hashToken, 1 => this.colonToken, - 2 => this.endOfDirectiveToken, + 2 => this.content, + 3 => this.endOfDirectiveToken, _ => null, }; @@ -26670,11 +26688,11 @@ internal IgnoredDirectiveTriviaSyntax(SyntaxKind kind, SyntaxToken hashToken, Sy public override void Accept(CSharpSyntaxVisitor visitor) => visitor.VisitIgnoredDirectiveTrivia(this); public override TResult Accept(CSharpSyntaxVisitor visitor) => visitor.VisitIgnoredDirectiveTrivia(this); - public IgnoredDirectiveTriviaSyntax Update(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken endOfDirectiveToken, bool isActive) + public IgnoredDirectiveTriviaSyntax Update(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken content, SyntaxToken endOfDirectiveToken, bool isActive) { - if (hashToken != this.HashToken || colonToken != this.ColonToken || endOfDirectiveToken != this.EndOfDirectiveToken) + if (hashToken != this.HashToken || colonToken != this.ColonToken || content != this.Content || endOfDirectiveToken != this.EndOfDirectiveToken) { - var newNode = SyntaxFactory.IgnoredDirectiveTrivia(hashToken, colonToken, endOfDirectiveToken, isActive); + var newNode = SyntaxFactory.IgnoredDirectiveTrivia(hashToken, colonToken, content, endOfDirectiveToken, isActive); var diags = GetDiagnostics(); if (diags?.Length > 0) newNode = newNode.WithDiagnosticsGreen(diags); @@ -26688,10 +26706,10 @@ public IgnoredDirectiveTriviaSyntax Update(SyntaxToken hashToken, SyntaxToken co } internal override GreenNode SetDiagnostics(DiagnosticInfo[]? diagnostics) - => new IgnoredDirectiveTriviaSyntax(this.Kind, this.hashToken, this.colonToken, this.endOfDirectiveToken, this.isActive, diagnostics, GetAnnotations()); + => new IgnoredDirectiveTriviaSyntax(this.Kind, this.hashToken, this.colonToken, this.content, this.endOfDirectiveToken, this.isActive, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[]? annotations) - => new IgnoredDirectiveTriviaSyntax(this.Kind, this.hashToken, this.colonToken, this.endOfDirectiveToken, this.isActive, GetDiagnostics(), annotations); + => new IgnoredDirectiveTriviaSyntax(this.Kind, this.hashToken, this.colonToken, this.content, this.endOfDirectiveToken, this.isActive, GetDiagnostics(), annotations); } internal sealed partial class NullableDirectiveTriviaSyntax : DirectiveTriviaSyntax @@ -28046,7 +28064,7 @@ public override CSharpSyntaxNode VisitShebangDirectiveTrivia(ShebangDirectiveTri => node.Update((SyntaxToken)Visit(node.HashToken), (SyntaxToken)Visit(node.ExclamationToken), (SyntaxToken)Visit(node.EndOfDirectiveToken), node.IsActive); public override CSharpSyntaxNode VisitIgnoredDirectiveTrivia(IgnoredDirectiveTriviaSyntax node) - => node.Update((SyntaxToken)Visit(node.HashToken), (SyntaxToken)Visit(node.ColonToken), (SyntaxToken)Visit(node.EndOfDirectiveToken), node.IsActive); + => node.Update((SyntaxToken)Visit(node.HashToken), (SyntaxToken)Visit(node.ColonToken), (SyntaxToken)Visit(node.Content), (SyntaxToken)Visit(node.EndOfDirectiveToken), node.IsActive); public override CSharpSyntaxNode VisitNullableDirectiveTrivia(NullableDirectiveTriviaSyntax node) => node.Update((SyntaxToken)Visit(node.HashToken), (SyntaxToken)Visit(node.NullableKeyword), (SyntaxToken)Visit(node.SettingToken), (SyntaxToken)Visit(node.TargetToken), (SyntaxToken)Visit(node.EndOfDirectiveToken), node.IsActive); @@ -33332,18 +33350,27 @@ public ShebangDirectiveTriviaSyntax ShebangDirectiveTrivia(SyntaxToken hashToken return new ShebangDirectiveTriviaSyntax(SyntaxKind.ShebangDirectiveTrivia, hashToken, exclamationToken, endOfDirectiveToken, isActive, this.context); } - public IgnoredDirectiveTriviaSyntax IgnoredDirectiveTrivia(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken endOfDirectiveToken, bool isActive) + public IgnoredDirectiveTriviaSyntax IgnoredDirectiveTrivia(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken? content, SyntaxToken endOfDirectiveToken, bool isActive) { #if DEBUG if (hashToken == null) throw new ArgumentNullException(nameof(hashToken)); if (hashToken.Kind != SyntaxKind.HashToken) throw new ArgumentException(nameof(hashToken)); if (colonToken == null) throw new ArgumentNullException(nameof(colonToken)); if (colonToken.Kind != SyntaxKind.ColonToken) throw new ArgumentException(nameof(colonToken)); + if (content != null) + { + switch (content.Kind) + { + case SyntaxKind.StringLiteralToken: + case SyntaxKind.None: break; + default: throw new ArgumentException(nameof(content)); + } + } if (endOfDirectiveToken == null) throw new ArgumentNullException(nameof(endOfDirectiveToken)); if (endOfDirectiveToken.Kind != SyntaxKind.EndOfDirectiveToken) throw new ArgumentException(nameof(endOfDirectiveToken)); #endif - return new IgnoredDirectiveTriviaSyntax(SyntaxKind.IgnoredDirectiveTrivia, hashToken, colonToken, endOfDirectiveToken, isActive, this.context); + return new IgnoredDirectiveTriviaSyntax(SyntaxKind.IgnoredDirectiveTrivia, hashToken, colonToken, content, endOfDirectiveToken, isActive, this.context); } public NullableDirectiveTriviaSyntax NullableDirectiveTrivia(SyntaxToken hashToken, SyntaxToken nullableKeyword, SyntaxToken settingToken, SyntaxToken? targetToken, SyntaxToken endOfDirectiveToken, bool isActive) @@ -38654,18 +38681,27 @@ public static ShebangDirectiveTriviaSyntax ShebangDirectiveTrivia(SyntaxToken ha return new ShebangDirectiveTriviaSyntax(SyntaxKind.ShebangDirectiveTrivia, hashToken, exclamationToken, endOfDirectiveToken, isActive); } - public static IgnoredDirectiveTriviaSyntax IgnoredDirectiveTrivia(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken endOfDirectiveToken, bool isActive) + public static IgnoredDirectiveTriviaSyntax IgnoredDirectiveTrivia(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken? content, SyntaxToken endOfDirectiveToken, bool isActive) { #if DEBUG if (hashToken == null) throw new ArgumentNullException(nameof(hashToken)); if (hashToken.Kind != SyntaxKind.HashToken) throw new ArgumentException(nameof(hashToken)); if (colonToken == null) throw new ArgumentNullException(nameof(colonToken)); if (colonToken.Kind != SyntaxKind.ColonToken) throw new ArgumentException(nameof(colonToken)); + if (content != null) + { + switch (content.Kind) + { + case SyntaxKind.StringLiteralToken: + case SyntaxKind.None: break; + default: throw new ArgumentException(nameof(content)); + } + } if (endOfDirectiveToken == null) throw new ArgumentNullException(nameof(endOfDirectiveToken)); if (endOfDirectiveToken.Kind != SyntaxKind.EndOfDirectiveToken) throw new ArgumentException(nameof(endOfDirectiveToken)); #endif - return new IgnoredDirectiveTriviaSyntax(SyntaxKind.IgnoredDirectiveTrivia, hashToken, colonToken, endOfDirectiveToken, isActive); + return new IgnoredDirectiveTriviaSyntax(SyntaxKind.IgnoredDirectiveTrivia, hashToken, colonToken, content, endOfDirectiveToken, isActive); } public static NullableDirectiveTriviaSyntax NullableDirectiveTrivia(SyntaxToken hashToken, SyntaxToken nullableKeyword, SyntaxToken settingToken, SyntaxToken? targetToken, SyntaxToken endOfDirectiveToken, bool isActive) diff --git a/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs b/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs index 6998b9cf5448b..39a57a7941a96 100644 --- a/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs +++ b/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs @@ -2230,7 +2230,7 @@ public partial class CSharpSyntaxRewriter : CSharpSyntaxVisitor => node.Update(VisitToken(node.HashToken), VisitToken(node.ExclamationToken), VisitToken(node.EndOfDirectiveToken), node.IsActive); public override SyntaxNode? VisitIgnoredDirectiveTrivia(IgnoredDirectiveTriviaSyntax node) - => node.Update(VisitToken(node.HashToken), VisitToken(node.ColonToken), VisitToken(node.EndOfDirectiveToken), node.IsActive); + => node.Update(VisitToken(node.HashToken), VisitToken(node.ColonToken), VisitToken(node.Content), VisitToken(node.EndOfDirectiveToken), node.IsActive); public override SyntaxNode? VisitNullableDirectiveTrivia(NullableDirectiveTriviaSyntax node) => node.Update(VisitToken(node.HashToken), VisitToken(node.NullableKeyword), VisitToken(node.SettingToken), VisitToken(node.TargetToken), VisitToken(node.EndOfDirectiveToken), node.IsActive); @@ -6521,17 +6521,27 @@ public static ShebangDirectiveTriviaSyntax ShebangDirectiveTrivia(bool isActive) => SyntaxFactory.ShebangDirectiveTrivia(SyntaxFactory.Token(SyntaxKind.HashToken), SyntaxFactory.Token(SyntaxKind.ExclamationToken), SyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), isActive); /// Creates a new IgnoredDirectiveTriviaSyntax instance. - public static IgnoredDirectiveTriviaSyntax IgnoredDirectiveTrivia(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken endOfDirectiveToken, bool isActive) + public static IgnoredDirectiveTriviaSyntax IgnoredDirectiveTrivia(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken content, SyntaxToken endOfDirectiveToken, bool isActive) { if (hashToken.Kind() != SyntaxKind.HashToken) throw new ArgumentException(nameof(hashToken)); if (colonToken.Kind() != SyntaxKind.ColonToken) throw new ArgumentException(nameof(colonToken)); + switch (content.Kind()) + { + case SyntaxKind.StringLiteralToken: + case SyntaxKind.None: break; + default: throw new ArgumentException(nameof(content)); + } if (endOfDirectiveToken.Kind() != SyntaxKind.EndOfDirectiveToken) throw new ArgumentException(nameof(endOfDirectiveToken)); - return (IgnoredDirectiveTriviaSyntax)Syntax.InternalSyntax.SyntaxFactory.IgnoredDirectiveTrivia((Syntax.InternalSyntax.SyntaxToken)hashToken.Node!, (Syntax.InternalSyntax.SyntaxToken)colonToken.Node!, (Syntax.InternalSyntax.SyntaxToken)endOfDirectiveToken.Node!, isActive).CreateRed(); + return (IgnoredDirectiveTriviaSyntax)Syntax.InternalSyntax.SyntaxFactory.IgnoredDirectiveTrivia((Syntax.InternalSyntax.SyntaxToken)hashToken.Node!, (Syntax.InternalSyntax.SyntaxToken)colonToken.Node!, (Syntax.InternalSyntax.SyntaxToken?)content.Node, (Syntax.InternalSyntax.SyntaxToken)endOfDirectiveToken.Node!, isActive).CreateRed(); } + /// Creates a new IgnoredDirectiveTriviaSyntax instance. + public static IgnoredDirectiveTriviaSyntax IgnoredDirectiveTrivia(SyntaxToken content, bool isActive) + => SyntaxFactory.IgnoredDirectiveTrivia(SyntaxFactory.Token(SyntaxKind.HashToken), SyntaxFactory.Token(SyntaxKind.ColonToken), content, SyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), isActive); + /// Creates a new IgnoredDirectiveTriviaSyntax instance. public static IgnoredDirectiveTriviaSyntax IgnoredDirectiveTrivia(bool isActive) - => SyntaxFactory.IgnoredDirectiveTrivia(SyntaxFactory.Token(SyntaxKind.HashToken), SyntaxFactory.Token(SyntaxKind.ColonToken), SyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), isActive); + => SyntaxFactory.IgnoredDirectiveTrivia(SyntaxFactory.Token(SyntaxKind.HashToken), SyntaxFactory.Token(SyntaxKind.ColonToken), default, SyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), isActive); /// Creates a new NullableDirectiveTriviaSyntax instance. public static NullableDirectiveTriviaSyntax NullableDirectiveTrivia(SyntaxToken hashToken, SyntaxToken nullableKeyword, SyntaxToken settingToken, SyntaxToken targetToken, SyntaxToken endOfDirectiveToken, bool isActive) diff --git a/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Syntax.Generated.cs b/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Syntax.Generated.cs index 4623b79d7ea54..3dfe0b57fd6f0 100644 --- a/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Syntax.Generated.cs +++ b/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Syntax.Generated.cs @@ -16590,7 +16590,16 @@ internal IgnoredDirectiveTriviaSyntax(InternalSyntax.CSharpSyntaxNode green, Syn public SyntaxToken ColonToken => new SyntaxToken(this, ((InternalSyntax.IgnoredDirectiveTriviaSyntax)this.Green).colonToken, GetChildPosition(1), GetChildIndex(1)); - public override SyntaxToken EndOfDirectiveToken => new SyntaxToken(this, ((InternalSyntax.IgnoredDirectiveTriviaSyntax)this.Green).endOfDirectiveToken, GetChildPosition(2), GetChildIndex(2)); + public SyntaxToken Content + { + get + { + var slot = ((Syntax.InternalSyntax.IgnoredDirectiveTriviaSyntax)this.Green).content; + return slot != null ? new SyntaxToken(this, slot, GetChildPosition(2), GetChildIndex(2)) : default; + } + } + + public override SyntaxToken EndOfDirectiveToken => new SyntaxToken(this, ((InternalSyntax.IgnoredDirectiveTriviaSyntax)this.Green).endOfDirectiveToken, GetChildPosition(3), GetChildIndex(3)); public override bool IsActive => ((InternalSyntax.IgnoredDirectiveTriviaSyntax)this.Green).IsActive; @@ -16601,11 +16610,11 @@ internal IgnoredDirectiveTriviaSyntax(InternalSyntax.CSharpSyntaxNode green, Syn public override void Accept(CSharpSyntaxVisitor visitor) => visitor.VisitIgnoredDirectiveTrivia(this); public override TResult? Accept(CSharpSyntaxVisitor visitor) where TResult : default => visitor.VisitIgnoredDirectiveTrivia(this); - public IgnoredDirectiveTriviaSyntax Update(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken endOfDirectiveToken, bool isActive) + public IgnoredDirectiveTriviaSyntax Update(SyntaxToken hashToken, SyntaxToken colonToken, SyntaxToken content, SyntaxToken endOfDirectiveToken, bool isActive) { - if (hashToken != this.HashToken || colonToken != this.ColonToken || endOfDirectiveToken != this.EndOfDirectiveToken) + if (hashToken != this.HashToken || colonToken != this.ColonToken || content != this.Content || endOfDirectiveToken != this.EndOfDirectiveToken) { - var newNode = SyntaxFactory.IgnoredDirectiveTrivia(hashToken, colonToken, endOfDirectiveToken, isActive); + var newNode = SyntaxFactory.IgnoredDirectiveTrivia(hashToken, colonToken, content, endOfDirectiveToken, isActive); var annotations = GetAnnotations(); return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } @@ -16614,11 +16623,12 @@ public IgnoredDirectiveTriviaSyntax Update(SyntaxToken hashToken, SyntaxToken co } internal override DirectiveTriviaSyntax WithHashTokenCore(SyntaxToken hashToken) => WithHashToken(hashToken); - public new IgnoredDirectiveTriviaSyntax WithHashToken(SyntaxToken hashToken) => Update(hashToken, this.ColonToken, this.EndOfDirectiveToken, this.IsActive); - public IgnoredDirectiveTriviaSyntax WithColonToken(SyntaxToken colonToken) => Update(this.HashToken, colonToken, this.EndOfDirectiveToken, this.IsActive); + public new IgnoredDirectiveTriviaSyntax WithHashToken(SyntaxToken hashToken) => Update(hashToken, this.ColonToken, this.Content, this.EndOfDirectiveToken, this.IsActive); + public IgnoredDirectiveTriviaSyntax WithColonToken(SyntaxToken colonToken) => Update(this.HashToken, colonToken, this.Content, this.EndOfDirectiveToken, this.IsActive); + public IgnoredDirectiveTriviaSyntax WithContent(SyntaxToken content) => Update(this.HashToken, this.ColonToken, content, this.EndOfDirectiveToken, this.IsActive); internal override DirectiveTriviaSyntax WithEndOfDirectiveTokenCore(SyntaxToken endOfDirectiveToken) => WithEndOfDirectiveToken(endOfDirectiveToken); - public new IgnoredDirectiveTriviaSyntax WithEndOfDirectiveToken(SyntaxToken endOfDirectiveToken) => Update(this.HashToken, this.ColonToken, endOfDirectiveToken, this.IsActive); - public IgnoredDirectiveTriviaSyntax WithIsActive(bool isActive) => Update(this.HashToken, this.ColonToken, this.EndOfDirectiveToken, isActive); + public new IgnoredDirectiveTriviaSyntax WithEndOfDirectiveToken(SyntaxToken endOfDirectiveToken) => Update(this.HashToken, this.ColonToken, this.Content, endOfDirectiveToken, this.IsActive); + public IgnoredDirectiveTriviaSyntax WithIsActive(bool isActive) => Update(this.HashToken, this.ColonToken, this.Content, this.EndOfDirectiveToken, isActive); } /// diff --git a/src/Compilers/CSharp/Portable/Parser/DirectiveParser.cs b/src/Compilers/CSharp/Portable/Parser/DirectiveParser.cs index 8ab5f8c772445..4c94b14373785 100644 --- a/src/Compilers/CSharp/Portable/Parser/DirectiveParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/DirectiveParser.cs @@ -702,7 +702,8 @@ private DirectiveTriviaSyntax ParseIgnoredDirective(SyntaxToken hash, SyntaxToke colon = this.AddError(colon, ErrorCode.ERR_PPIgnoredFollowsIf); } - return SyntaxFactory.IgnoredDirectiveTrivia(hash, colon, this.ParseEndOfDirectiveWithOptionalPreprocessingMessage(), isActive); + SyntaxToken endOfDirective = this.lexer.LexEndOfDirectiveWithOptionalContent(out SyntaxToken content); + return SyntaxFactory.IgnoredDirectiveTrivia(hash, colon, content, endOfDirective, isActive); } private SyntaxToken ParseEndOfDirectiveWithOptionalPreprocessingMessage() diff --git a/src/Compilers/CSharp/Portable/Parser/Lexer.cs b/src/Compilers/CSharp/Portable/Parser/Lexer.cs index 719961f828e30..af53a0ecb60ab 100644 --- a/src/Compilers/CSharp/Portable/Parser/Lexer.cs +++ b/src/Compilers/CSharp/Portable/Parser/Lexer.cs @@ -2510,7 +2510,7 @@ private SyntaxToken LexDirectiveToken() return token; } - public SyntaxToken LexEndOfDirectiveWithOptionalPreprocessingMessage() + private string? LexOptionalPreprocessingMessage() { PooledStringBuilder? builder = null; @@ -2534,10 +2534,11 @@ public SyntaxToken LexEndOfDirectiveWithOptionalPreprocessingMessage() this.TextWindow.AdvanceChar(); } - var leading = builder == null - ? null - : SyntaxFactory.PreprocessingMessage(builder.ToStringAndFree()); + return builder?.ToStringAndFree(); + } + private SyntaxToken LexEndOfDirectiveAfterOptionalPreprocessingMessage(SyntaxTrivia? leading) + { // now try to consume the EOL if there. var directiveTriviaCache = _directiveTriviaCache; directiveTriviaCache?.Clear(); @@ -2552,6 +2553,23 @@ public SyntaxToken LexEndOfDirectiveWithOptionalPreprocessingMessage() return endOfDirective; } + public SyntaxToken LexEndOfDirectiveWithOptionalPreprocessingMessage() + { + var leading = this.LexOptionalPreprocessingMessage() is { } message + ? SyntaxFactory.PreprocessingMessage(message) + : null; + + return this.LexEndOfDirectiveAfterOptionalPreprocessingMessage(leading); + } + + public SyntaxToken LexEndOfDirectiveWithOptionalContent(out SyntaxToken? content) + { + content = this.LexOptionalPreprocessingMessage() is { } message + ? SyntaxToken.StringLiteral(message) + : null; + return this.LexEndOfDirectiveAfterOptionalPreprocessingMessage(null); + } + private bool ScanDirectiveToken(ref TokenInfo info) { char character; diff --git a/src/Compilers/CSharp/Portable/PublicAPI.Unshipped.txt b/src/Compilers/CSharp/Portable/PublicAPI.Unshipped.txt index fd4173df29920..ea3989be75d17 100644 --- a/src/Compilers/CSharp/Portable/PublicAPI.Unshipped.txt +++ b/src/Compilers/CSharp/Portable/PublicAPI.Unshipped.txt @@ -40,21 +40,26 @@ static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ExtensionDeclaration(Microsof virtual Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitExtensionDeclaration(Microsoft.CodeAnalysis.CSharp.Syntax.ExtensionDeclarationSyntax! node) -> void virtual Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitExtensionDeclaration(Microsoft.CodeAnalysis.CSharp.Syntax.ExtensionDeclarationSyntax! node) -> TResult? -[RSEXPERIMENTAL005]Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax -[RSEXPERIMENTAL005]Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.ColonToken.get -> Microsoft.CodeAnalysis.SyntaxToken -[RSEXPERIMENTAL005]Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Update(Microsoft.CodeAnalysis.SyntaxToken hashToken, Microsoft.CodeAnalysis.SyntaxToken colonToken, Microsoft.CodeAnalysis.SyntaxToken endOfDirectiveToken, bool isActive) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! -[RSEXPERIMENTAL005]Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithColonToken(Microsoft.CodeAnalysis.SyntaxToken colonToken) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! -[RSEXPERIMENTAL005]Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithEndOfDirectiveToken(Microsoft.CodeAnalysis.SyntaxToken endOfDirectiveToken) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! -[RSEXPERIMENTAL005]Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithHashToken(Microsoft.CodeAnalysis.SyntaxToken hashToken) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! -[RSEXPERIMENTAL005]Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithIsActive(bool isActive) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.ColonToken.get -> Microsoft.CodeAnalysis.SyntaxToken +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Content.get -> Microsoft.CodeAnalysis.SyntaxToken +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Update(Microsoft.CodeAnalysis.SyntaxToken hashToken, Microsoft.CodeAnalysis.SyntaxToken colonToken, Microsoft.CodeAnalysis.SyntaxToken content, Microsoft.CodeAnalysis.SyntaxToken endOfDirectiveToken, bool isActive) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithColonToken(Microsoft.CodeAnalysis.SyntaxToken colonToken) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithContent(Microsoft.CodeAnalysis.SyntaxToken content) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithEndOfDirectiveToken(Microsoft.CodeAnalysis.SyntaxToken endOfDirectiveToken) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithHashToken(Microsoft.CodeAnalysis.SyntaxToken hashToken) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithIsActive(bool isActive) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! +Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.Content.get -> Microsoft.CodeAnalysis.SyntaxToken +Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.WithContent(Microsoft.CodeAnalysis.SyntaxToken content) -> Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax! Microsoft.CodeAnalysis.CSharp.SyntaxKind.IgnoredDirectiveTrivia = 9080 -> Microsoft.CodeAnalysis.CSharp.SyntaxKind override Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitIgnoredDirectiveTrivia(Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! node) -> Microsoft.CodeAnalysis.SyntaxNode? -[RSEXPERIMENTAL005]override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Accept(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor! visitor) -> void -[RSEXPERIMENTAL005]override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Accept(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor! visitor) -> TResult? -[RSEXPERIMENTAL005]override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.EndOfDirectiveToken.get -> Microsoft.CodeAnalysis.SyntaxToken -[RSEXPERIMENTAL005]override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.HashToken.get -> Microsoft.CodeAnalysis.SyntaxToken -[RSEXPERIMENTAL005]override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.IsActive.get -> bool +override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Accept(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor! visitor) -> void +override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Accept(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor! visitor) -> TResult? +override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.EndOfDirectiveToken.get -> Microsoft.CodeAnalysis.SyntaxToken +override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.HashToken.get -> Microsoft.CodeAnalysis.SyntaxToken +override Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.IsActive.get -> bool static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IgnoredDirectiveTrivia(bool isActive) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! -static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IgnoredDirectiveTrivia(Microsoft.CodeAnalysis.SyntaxToken hashToken, Microsoft.CodeAnalysis.SyntaxToken colonToken, Microsoft.CodeAnalysis.SyntaxToken endOfDirectiveToken, bool isActive) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! +static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IgnoredDirectiveTrivia(Microsoft.CodeAnalysis.SyntaxToken content, bool isActive) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! +static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IgnoredDirectiveTrivia(Microsoft.CodeAnalysis.SyntaxToken hashToken, Microsoft.CodeAnalysis.SyntaxToken colonToken, Microsoft.CodeAnalysis.SyntaxToken content, Microsoft.CodeAnalysis.SyntaxToken endOfDirectiveToken, bool isActive) -> Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! virtual Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitIgnoredDirectiveTrivia(Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! node) -> void virtual Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitIgnoredDirectiveTrivia(Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax! node) -> TResult? diff --git a/src/Compilers/CSharp/Portable/Syntax/IgnoredDirectiveTriviaSyntax.cs b/src/Compilers/CSharp/Portable/Syntax/IgnoredDirectiveTriviaSyntax.cs deleted file mode 100644 index 584eb1aef7c14..0000000000000 --- a/src/Compilers/CSharp/Portable/Syntax/IgnoredDirectiveTriviaSyntax.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Diagnostics.CodeAnalysis; - -// NOTE: This whole file should be removed once the experimental attribute is not needed -// (the source generator should be used to emit this code instead). - -namespace Microsoft.CodeAnalysis.CSharp.Syntax; - -[Experimental(RoslynExperiments.IgnoredDirectives, UrlFormat = RoslynExperiments.IgnoredDirectives_Url)] -partial class IgnoredDirectiveTriviaSyntax; diff --git a/src/Compilers/CSharp/Portable/Syntax/ShebangDirectiveTriviaSyntax.cs b/src/Compilers/CSharp/Portable/Syntax/ShebangDirectiveTriviaSyntax.cs new file mode 100644 index 0000000000000..3189a6cfae3e5 --- /dev/null +++ b/src/Compilers/CSharp/Portable/Syntax/ShebangDirectiveTriviaSyntax.cs @@ -0,0 +1,57 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +namespace Microsoft.CodeAnalysis.CSharp.Syntax +{ + partial class ShebangDirectiveTriviaSyntax + { + public SyntaxToken Content + { + get + { + var token = InternalSyntax.SyntaxToken.StringLiteral(this.EndOfDirectiveToken.LeadingTrivia.ToString()); + return token != null ? new SyntaxToken(this, token, GetChildPosition(2), GetChildIndex(2)) : default; + } + } + + public ShebangDirectiveTriviaSyntax WithContent(SyntaxToken content) + { + if (content != this.Content) + { + return (ShebangDirectiveTriviaSyntax)((InternalSyntax.ShebangDirectiveTriviaSyntax)this.Green) + .WithContent((InternalSyntax.SyntaxToken)content.Node!).CreateRed(); + } + + return this; + } + } +} + +namespace Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax +{ + partial class ShebangDirectiveTriviaSyntax + { + public ShebangDirectiveTriviaSyntax WithContent(SyntaxToken content) + { + SyntaxToken endOfDirectiveToken = this.EndOfDirectiveToken; + + if (content.Kind is SyntaxKind.StringLiteralToken) + { + endOfDirectiveToken = endOfDirectiveToken.TokenWithLeadingTrivia(SyntaxFactory.PreprocessingMessage(content.ToString())); + } + else if (content.Kind is not SyntaxKind.None) + { + throw new ArgumentException(nameof(content)); + } + + return Update( + this.HashToken, + this.ExclamationToken, + endOfDirectiveToken, + this.IsActive); + } + } +} diff --git a/src/Compilers/CSharp/Portable/Syntax/Syntax.xml b/src/Compilers/CSharp/Portable/Syntax/Syntax.xml index 369768857720f..95b4705cd93c3 100644 --- a/src/Compilers/CSharp/Portable/Syntax/Syntax.xml +++ b/src/Compilers/CSharp/Portable/Syntax/Syntax.xml @@ -5114,7 +5114,6 @@ - @@ -5123,6 +5122,9 @@ + + + diff --git a/src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs b/src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs index 4376ad61d88f2..1ff38a74be252 100644 --- a/src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs +++ b/src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs @@ -709,7 +709,8 @@ private static bool NeedsSeparator(SyntaxToken token, SyntaxToken next) if (token.IsKind(SyntaxKind.ColonToken)) { return !token.Parent.IsKind(SyntaxKind.InterpolationFormatClause) && - !token.Parent.IsKind(SyntaxKind.XmlPrefix); + !token.Parent.IsKind(SyntaxKind.XmlPrefix) && + !token.Parent.IsKind(SyntaxKind.IgnoredDirectiveTrivia); } if (next.IsKind(SyntaxKind.ColonToken)) diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf index 344d4b128b789..3d79bd11661e4 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.cs.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf index d8cc687591ed3..a0a30438faa22 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.de.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf index 1bbebe82943bb..0fa56921765c0 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.es.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf index cafe17844a0b4..dacfd934cfc66 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.fr.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf index db97ace0ae56d..dbb39adec576b 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.it.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf index a1ba411fc0134..2fe149e67467e 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ja.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf index dea7078e009e4..2ae3848fb03d3 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ko.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf index 434cd933d2262..b2002b61d8cdd 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.pl.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf index 7c7e74a0eb44b..96577cd4f8abf 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.pt-BR.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf index 96459e55e0274..354260955eb1a 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.ru.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf index 85efa757102a7..626e181516062 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.tr.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf index d05cbeb6be7e7..7496d6d49d20c 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hans.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf b/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf index b30ef2cfe42ab..aba15a23f88b9 100644 --- a/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf +++ b/src/Compilers/CSharp/Portable/xlf/CSharpResources.zh-Hant.xlf @@ -1693,8 +1693,8 @@ - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') - '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') + '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') diff --git a/src/Compilers/CSharp/Test/Syntax/Generated/Syntax.Test.xml.Generated.cs b/src/Compilers/CSharp/Test/Syntax/Generated/Syntax.Test.xml.Generated.cs index 10a3e4a9a239e..ce449253b8932 100644 --- a/src/Compilers/CSharp/Test/Syntax/Generated/Syntax.Test.xml.Generated.cs +++ b/src/Compilers/CSharp/Test/Syntax/Generated/Syntax.Test.xml.Generated.cs @@ -743,7 +743,7 @@ private static Syntax.InternalSyntax.ShebangDirectiveTriviaSyntax GenerateSheban => InternalSyntaxFactory.ShebangDirectiveTrivia(InternalSyntaxFactory.Token(SyntaxKind.HashToken), InternalSyntaxFactory.Token(SyntaxKind.ExclamationToken), InternalSyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), new bool()); private static Syntax.InternalSyntax.IgnoredDirectiveTriviaSyntax GenerateIgnoredDirectiveTrivia() - => InternalSyntaxFactory.IgnoredDirectiveTrivia(InternalSyntaxFactory.Token(SyntaxKind.HashToken), InternalSyntaxFactory.Token(SyntaxKind.ColonToken), InternalSyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), new bool()); + => InternalSyntaxFactory.IgnoredDirectiveTrivia(InternalSyntaxFactory.Token(SyntaxKind.HashToken), InternalSyntaxFactory.Token(SyntaxKind.ColonToken), null, InternalSyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), new bool()); private static Syntax.InternalSyntax.NullableDirectiveTriviaSyntax GenerateNullableDirectiveTrivia() => InternalSyntaxFactory.NullableDirectiveTrivia(InternalSyntaxFactory.Token(SyntaxKind.HashToken), InternalSyntaxFactory.Token(SyntaxKind.NullableKeyword), InternalSyntaxFactory.Token(SyntaxKind.EnableKeyword), null, InternalSyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), new bool()); @@ -3892,6 +3892,7 @@ public void TestIgnoredDirectiveTriviaFactoryAndProperties() Assert.Equal(SyntaxKind.HashToken, node.HashToken.Kind); Assert.Equal(SyntaxKind.ColonToken, node.ColonToken.Kind); + Assert.Null(node.Content); Assert.Equal(SyntaxKind.EndOfDirectiveToken, node.EndOfDirectiveToken.Kind); Assert.Equal(new bool(), node.IsActive); @@ -11049,7 +11050,7 @@ private static ShebangDirectiveTriviaSyntax GenerateShebangDirectiveTrivia() => SyntaxFactory.ShebangDirectiveTrivia(SyntaxFactory.Token(SyntaxKind.HashToken), SyntaxFactory.Token(SyntaxKind.ExclamationToken), SyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), new bool()); private static IgnoredDirectiveTriviaSyntax GenerateIgnoredDirectiveTrivia() - => SyntaxFactory.IgnoredDirectiveTrivia(SyntaxFactory.Token(SyntaxKind.HashToken), SyntaxFactory.Token(SyntaxKind.ColonToken), SyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), new bool()); + => SyntaxFactory.IgnoredDirectiveTrivia(SyntaxFactory.Token(SyntaxKind.HashToken), SyntaxFactory.Token(SyntaxKind.ColonToken), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), new bool()); private static NullableDirectiveTriviaSyntax GenerateNullableDirectiveTrivia() => SyntaxFactory.NullableDirectiveTrivia(SyntaxFactory.Token(SyntaxKind.HashToken), SyntaxFactory.Token(SyntaxKind.NullableKeyword), SyntaxFactory.Token(SyntaxKind.EnableKeyword), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.EndOfDirectiveToken), new bool()); @@ -14198,9 +14199,10 @@ public void TestIgnoredDirectiveTriviaFactoryAndProperties() Assert.Equal(SyntaxKind.HashToken, node.HashToken.Kind()); Assert.Equal(SyntaxKind.ColonToken, node.ColonToken.Kind()); + Assert.Equal(SyntaxKind.None, node.Content.Kind()); Assert.Equal(SyntaxKind.EndOfDirectiveToken, node.EndOfDirectiveToken.Kind()); Assert.Equal(new bool(), node.IsActive); - var newNode = node.WithHashToken(node.HashToken).WithColonToken(node.ColonToken).WithEndOfDirectiveToken(node.EndOfDirectiveToken).WithIsActive(node.IsActive); + var newNode = node.WithHashToken(node.HashToken).WithColonToken(node.ColonToken).WithContent(node.Content).WithEndOfDirectiveToken(node.EndOfDirectiveToken).WithIsActive(node.IsActive); Assert.Equal(node, newNode); } diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/IgnoredDirectiveParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/IgnoredDirectiveParsingTests.cs index 5acd0beb53958..aff2e711954b2 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/IgnoredDirectiveParsingTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/IgnoredDirectiveParsingTests.cs @@ -5,6 +5,7 @@ using System.Linq; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.CSharp.Test.Utilities; +using Roslyn.Test.Utilities; using Xunit; using Xunit.Abstractions; @@ -26,7 +27,7 @@ public void FeatureFlag(bool script) VerifyTrivia(); UsingTree(source, options, - // (2,2): error CS9282: '#:' directives can be only used in file-based programs ('/feature:FileBasedProgram') + // (2,2): error CS9282: '#:' directives can be only used in file-based programs ('-features:FileBasedProgram') // #:name value Diagnostic(ErrorCode.ERR_PPIgnoredNeedsFileBasedProgram, ":").WithLocation(2, 2)); @@ -48,10 +49,8 @@ public void FeatureFlag(bool script) { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "name value"); N(SyntaxKind.EndOfDirectiveToken); - { - L(SyntaxKind.PreprocessingMessageTrivia, "name value"); - } } } } @@ -77,10 +76,8 @@ public void FeatureFlag(bool script) { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "name value"); N(SyntaxKind.EndOfDirectiveToken); - { - L(SyntaxKind.PreprocessingMessageTrivia, "name value"); - } } } } @@ -113,9 +110,10 @@ public void Api() Assert.True(SyntaxFacts.IsTrivia(trivia.Kind())); var structure = (IgnoredDirectiveTriviaSyntax)trivia.GetStructure()!; Assert.Equal(":", structure.DirectiveNameToken.ToFullString()); - var messageTrivia = structure.EndOfDirectiveToken.GetLeadingTrivia().Single(); - Assert.Equal(SyntaxKind.PreprocessingMessageTrivia, messageTrivia.Kind()); - Assert.Equal("abc", messageTrivia.ToString()); + Assert.Empty(structure.EndOfDirectiveToken.GetLeadingTrivia()); + var content = structure.Content; + Assert.Equal(SyntaxKind.StringLiteralToken, content.Kind()); + Assert.Equal("abc", content.ToString()); trivia.GetDiagnostics().Verify(); } @@ -134,15 +132,29 @@ public void Api_Diagnostics() Assert.True(SyntaxFacts.IsTrivia(trivia.Kind())); var structure = (IgnoredDirectiveTriviaSyntax)trivia.GetStructure()!; Assert.Equal(":", structure.DirectiveNameToken.ToFullString()); - var messageTrivia = structure.EndOfDirectiveToken.GetLeadingTrivia().Single(); - Assert.Equal(SyntaxKind.PreprocessingMessageTrivia, messageTrivia.Kind()); - Assert.Equal("abc", messageTrivia.ToString()); + Assert.Empty(structure.EndOfDirectiveToken.GetLeadingTrivia()); + var content = structure.Content; + Assert.Equal(SyntaxKind.StringLiteralToken, content.Kind()); + Assert.Equal("abc", content.ToString()); trivia.GetDiagnostics().Verify( // (3,2): error CS9283: '#:' directives cannot be after '#if' directive // #:abc Diagnostic(ErrorCode.ERR_PPIgnoredFollowsIf, ":").WithLocation(3, 2)); } + [Fact] + public void Api_Shebang() + { + var root = SyntaxFactory.ParseCompilationUnit("#!abc", options: TestOptions.Regular.WithFeature(FeatureName)); + var trivia = root.EndOfFileToken.GetLeadingTrivia().Last(); + Assert.Equal(SyntaxKind.ShebangDirectiveTrivia, trivia.Kind()); + var structure = (ShebangDirectiveTriviaSyntax)trivia.GetStructure()!; + var xyz = SyntaxFactory.Token(default, SyntaxKind.StringLiteralToken, "xyz", "xyz", default); + var ijk = SyntaxFactory.Token(default, SyntaxKind.StringLiteralToken, "ijk", "ijk", default); + AssertEx.Equal("#!xyz", structure.WithContent(xyz).ToFullString()); + AssertEx.Equal("#!ijk", structure.WithContent(xyz).WithContent(ijk).ToFullString()); + } + [Theory, CombinatorialData] public void ShebangNotFirst(bool script, bool featureFlag) { @@ -217,9 +229,9 @@ public void AfterToken() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "x"); N(SyntaxKind.EndOfDirectiveToken); { - L(SyntaxKind.PreprocessingMessageTrivia, "x"); T(SyntaxKind.EndOfLineTrivia, "\n"); } } @@ -243,10 +255,8 @@ public void AfterToken() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "y"); N(SyntaxKind.EndOfDirectiveToken); - { - L(SyntaxKind.PreprocessingMessageTrivia, "y"); - } } } } @@ -281,9 +291,9 @@ public void AfterIf() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "x"); N(SyntaxKind.EndOfDirectiveToken); { - L(SyntaxKind.PreprocessingMessageTrivia, "x"); T(SyntaxKind.EndOfLineTrivia, "\n"); } } @@ -307,9 +317,9 @@ public void AfterIf() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "y"); N(SyntaxKind.EndOfDirectiveToken); { - L(SyntaxKind.PreprocessingMessageTrivia, "y"); T(SyntaxKind.EndOfLineTrivia, "\n"); } } @@ -326,10 +336,8 @@ public void AfterIf() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "z"); N(SyntaxKind.EndOfDirectiveToken); - { - L(SyntaxKind.PreprocessingMessageTrivia, "z"); - } } } } @@ -356,9 +364,9 @@ public void AfterComment() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "x"); N(SyntaxKind.EndOfDirectiveToken); { - L(SyntaxKind.PreprocessingMessageTrivia, "x"); T(SyntaxKind.EndOfLineTrivia, "\n"); } } @@ -368,10 +376,8 @@ public void AfterComment() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "y"); N(SyntaxKind.EndOfDirectiveToken); - { - L(SyntaxKind.PreprocessingMessageTrivia, "y"); - } } } } @@ -398,9 +404,9 @@ public void AfterDefine() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "x"); N(SyntaxKind.EndOfDirectiveToken); { - L(SyntaxKind.PreprocessingMessageTrivia, "x"); T(SyntaxKind.EndOfLineTrivia, "\n"); } } @@ -421,10 +427,8 @@ public void AfterDefine() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "y"); N(SyntaxKind.EndOfDirectiveToken); - { - L(SyntaxKind.PreprocessingMessageTrivia, "y"); - } } } } @@ -450,10 +454,8 @@ public void SpaceBeforeHash() { N(SyntaxKind.HashToken); N(SyntaxKind.ColonToken); + N(SyntaxKind.StringLiteralToken, "x"); N(SyntaxKind.EndOfDirectiveToken); - { - L(SyntaxKind.PreprocessingMessageTrivia, "x"); - } } } } diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/ScriptParsingTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/ScriptParsingTests.cs index 1ed38eebcfb49..4ca42f0fd2622 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/ScriptParsingTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/ScriptParsingTests.cs @@ -9739,6 +9739,10 @@ private void TestShebang(DirectiveTriviaSyntax directive, string expectedSkipped var skippedText = endOfDirective.LeadingTrivia.Single(); Assert.Equal(SyntaxKind.PreprocessingMessageTrivia, skippedText.Kind()); Assert.Equal(expectedSkippedText, skippedText.ToString()); + var content = shebang.Content; + Assert.False(content.HasLeadingTrivia || content.HasTrailingTrivia); + Assert.Equal(SyntaxKind.StringLiteralToken, content.Kind()); + Assert.Equal(expectedSkippedText, content.ToString()); } #endregion diff --git a/src/Compilers/Core/Portable/InternalUtilities/RoslynExperiments.cs b/src/Compilers/Core/Portable/InternalUtilities/RoslynExperiments.cs index 3919a71673d49..46806a6a16c69 100644 --- a/src/Compilers/Core/Portable/InternalUtilities/RoslynExperiments.cs +++ b/src/Compilers/Core/Portable/InternalUtilities/RoslynExperiments.cs @@ -18,6 +18,5 @@ internal static class RoslynExperiments internal const string GeneratorHostOutputs = "RSEXPERIMENTAL004"; internal const string GeneratorHostOutputs_Url = "https://github.com/dotnet/roslyn/issues/74753"; - internal const string IgnoredDirectives = "RSEXPERIMENTAL005"; - internal const string IgnoredDirectives_Url = "https://github.com/dotnet/roslyn/issues/77697"; + // Previously taken: RSEXPERIMENTAL005 - https://github.com/dotnet/roslyn/issues/77697 } diff --git a/src/Tools/SemanticSearch/ReferenceAssemblies/Apis/Microsoft.CodeAnalysis.CSharp.txt b/src/Tools/SemanticSearch/ReferenceAssemblies/Apis/Microsoft.CodeAnalysis.CSharp.txt index 31577ead6d1b7..9ee0ce9af8434 100644 --- a/src/Tools/SemanticSearch/ReferenceAssemblies/Apis/Microsoft.CodeAnalysis.CSharp.txt +++ b/src/Tools/SemanticSearch/ReferenceAssemblies/Apis/Microsoft.CodeAnalysis.CSharp.txt @@ -2832,12 +2832,14 @@ Microsoft.CodeAnalysis.CSharp.Syntax.IfStatementSyntax.get_Statement Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Accept(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor) Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Accept``1(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor{``0}) -Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Update(Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean) +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.Update(Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean) Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithColonToken(Microsoft.CodeAnalysis.SyntaxToken) +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithContent(Microsoft.CodeAnalysis.SyntaxToken) Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithEndOfDirectiveToken(Microsoft.CodeAnalysis.SyntaxToken) Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithHashToken(Microsoft.CodeAnalysis.SyntaxToken) Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.WithIsActive(System.Boolean) Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.get_ColonToken +Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.get_Content Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.get_EndOfDirectiveToken Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.get_HashToken Microsoft.CodeAnalysis.CSharp.Syntax.IgnoredDirectiveTriviaSyntax.get_IsActive @@ -3985,10 +3987,12 @@ Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.Accept(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor) Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.Accept``1(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor{``0}) Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.Update(Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean) +Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.WithContent(Microsoft.CodeAnalysis.SyntaxToken) Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.WithEndOfDirectiveToken(Microsoft.CodeAnalysis.SyntaxToken) Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.WithExclamationToken(Microsoft.CodeAnalysis.SyntaxToken) Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.WithHashToken(Microsoft.CodeAnalysis.SyntaxToken) Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.WithIsActive(System.Boolean) +Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.get_Content Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.get_EndOfDirectiveToken Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.get_ExclamationToken Microsoft.CodeAnalysis.CSharp.Syntax.ShebangDirectiveTriviaSyntax.get_HashToken @@ -5075,7 +5079,8 @@ Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IfStatement(Microsoft.CodeAnalysis.C Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IfStatement(Microsoft.CodeAnalysis.SyntaxList{Microsoft.CodeAnalysis.CSharp.Syntax.AttributeListSyntax},Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.ElseClauseSyntax) Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IfStatement(Microsoft.CodeAnalysis.SyntaxList{Microsoft.CodeAnalysis.CSharp.Syntax.AttributeListSyntax},Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.ElseClauseSyntax) Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IfStatement(Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.ElseClauseSyntax) -Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IgnoredDirectiveTrivia(Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean) +Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IgnoredDirectiveTrivia(Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,System.Boolean) +Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IgnoredDirectiveTrivia(Microsoft.CodeAnalysis.SyntaxToken,System.Boolean) Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IgnoredDirectiveTrivia(System.Boolean) Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ImplicitArrayCreationExpression(Microsoft.CodeAnalysis.CSharp.Syntax.InitializerExpressionSyntax) Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ImplicitArrayCreationExpression(Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.InitializerExpressionSyntax)