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)