242 references to WriteLine
CSharpSyntaxGenerator (242)
AbstractFileWriter.cs (3)
71
WriteLine
("");
121
WriteLine
("{");
128
WriteLine
("}" + extra);
SourceWriter.cs (188)
36
WriteLine
($"[Experimental(global::Microsoft.CodeAnalysis.RoslynExperiments.PreviewLanguageFeatureApi, UrlFormat = {QuoteString(experimentalUrl)})]");
42
WriteLine
("// <auto-generated />");
44
WriteLine
("#nullable enable");
46
WriteLine
("using System;");
47
WriteLine
("using System.Collections.Generic;");
48
WriteLine
("using System.Diagnostics.CodeAnalysis;");
49
WriteLine
("using Microsoft.CodeAnalysis.Syntax.InternalSyntax;");
50
WriteLine
("using Roslyn.Utilities;");
51
WriteLine
("using CoreSyntax = Microsoft.CodeAnalysis.Syntax.InternalSyntax;");
59
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax;");
70
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp.Syntax;");
77
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp;");
78
WriteLine
("using System.Diagnostics.CodeAnalysis;");
79
WriteLine
("using Microsoft.CodeAnalysis.CSharp.Syntax;");
102
WriteLine
($"internal abstract partial class {node.Name} : {node.Base}");
106
WriteLine
($"internal {node.Name}(SyntaxKind kind, DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations)");
107
WriteLine
(" : base(kind, diagnostics, annotations)");
111
WriteLine
("SetFlags(NodeFlags.ContainsDirectives);");
116
WriteLine
($"internal {node.Name}(SyntaxKind kind)");
117
WriteLine
(" : base(kind)");
121
WriteLine
("SetFlags(NodeFlags.ContainsDirectives);");
138
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}CoreSyntax.{field.Type} {field.Name} {{ get; }}");
142
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}{(GetFieldType(field, green: true))} {field.Name} {{ get; }}");
152
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}");
161
WriteLine
($"internal sealed partial class {node.Name} : {node.Base}");
170
WriteLine
($"internal readonly {type} {CamelCase(field.Name)};");
175
WriteLine
($"internal readonly {field.Type} {CamelCase(field.Name)};");
184
WriteLine
(", DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations)");
185
WriteLine
(" : base(kind, diagnostics, annotations)");
196
WriteLine
(", SyntaxFactoryContext context)");
197
WriteLine
(" : base(kind)");
199
WriteLine
("this.SetFactoryContext(context);");
209
WriteLine
(")");
210
WriteLine
(" : base(kind)");
223
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(this.{CamelCase(field.Name)});");
228
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(new CoreSyntax.SyntaxList<CSharpSyntaxNode>(this.{CamelCase(field.Name)}));");
233
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(this.{CamelCase(field.Name)});");
237
WriteLine
($"public {OverrideOrNewModifier(field)}{(GetFieldType(field, green: true))} {field.Name} => this.{CamelCase(field.Name)};");
244
WriteLine
($"public {OverrideOrNewModifier(field)}{field.Type} {field.Name} => this.{CamelCase(field.Name)};");
253
WriteLine
(" => null;");
259
WriteLine
($"=> index == 0 ? this.{CamelCase(nodeFields[0].Name)} : null;");
266
WriteLine
("=> index switch");
271
WriteLine
($"{i} => this.{CamelCase(field.Name)},");
273
WriteLine
("_ => null,");
279
WriteLine
($"internal override SyntaxNode CreateRed(SyntaxNode? parent, int position) => new CSharp.Syntax.{node.Name}(this, parent, position);");
307
WriteLine
("SetFlags(NodeFlags.ContainsAttributes);");
311
WriteLine
($"this.SlotCount = {nodeFields.Count};");
317
WriteLine
($"if ({CamelCase(field.Name)} != null)");
319
WriteLine
($"this.AdjustFlagsAndWidth({CamelCase(field.Name)});");
320
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
325
WriteLine
($"this.AdjustFlagsAndWidth({CamelCase(field.Name)});");
326
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
332
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
339
WriteLine
("internal override GreenNode SetAnnotations(SyntaxAnnotation[]? annotations)");
346
WriteLine
(");");
352
WriteLine
("internal override GreenNode SetDiagnostics(DiagnosticInfo[]? diagnostics)");
359
WriteLine
(");");
365
WriteLine
($"public override void Accept(CSharpSyntaxVisitor visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
366
WriteLine
($"public override TResult Accept<TResult>(CSharpSyntaxVisitor<TResult> visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
380
WriteLine
("internal partial class CSharpSyntaxVisitor" + (withResult ? "<TResult>" : ""));
384
WriteLine
($"public virtual {(withResult ? "TResult" : "void")} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => this.DefaultVisit(node);");
404
WriteLine
(")");
421
WriteLine
(")");
427
WriteLine
(");");
428
WriteLine
("var diags = GetDiagnostics();");
429
WriteLine
("if (diags?.Length > 0)");
430
WriteLine
(" newNode = newNode.WithDiagnosticsGreen(diags);");
431
WriteLine
("var annotations = GetAnnotations();");
432
WriteLine
("if (annotations?.Length > 0)");
433
WriteLine
(" newNode = newNode.WithAnnotationsGreen(annotations);");
434
WriteLine
("return newNode;");
439
WriteLine
("return this;");
448
WriteLine
("internal partial class CSharpSyntaxRewriter : CSharpSyntaxVisitor<CSharpSyntaxNode>");
458
WriteLine
($"public override CSharpSyntaxNode Visit{StripPost(node.Name, "Syntax")}({node.Name} node)");
463
WriteLine
("=> node;");
477
WriteLine
(");");
490
WriteLine
("internal partial class ContextAwareSyntax");
493
WriteLine
("private SyntaxFactoryContext context;");
496
WriteLine
("public ContextAwareSyntax(SyntaxFactoryContext context)");
497
WriteLine
(" => this.context = context;");
507
WriteLine
("internal static partial class SyntaxFactory");
529
WriteLine
(")");
535
WriteLine
("switch (kind)");
540
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
542
WriteLine
("default: throw new ArgumentException(nameof(kind));");
554
WriteLine
($"if ({CamelCase(field.Name)} == null) throw new ArgumentNullException(nameof({CamelCase(field.Name)}));");
560
WriteLine
($"if ({CamelCase(field.Name)} != null)");
566
WriteLine
($"if ({pname}.Kind != SyntaxKind.{field.Kinds[0].Name}) throw new ArgumentException(nameof({pname}));");
570
WriteLine
($"switch ({pname}.Kind)");
581
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
584
WriteLine
($"default: throw new ArgumentException(nameof({pname}));");
617
WriteLine
("int hash;");
629
WriteLine
(", out hash);");
631
WriteLine
($"if (cached != null) return ({nd.Name})cached;");
637
WriteLine
(");");
639
WriteLine
("if (hash >= 0)");
643
WriteLine
("SyntaxNodeCache.AddNode(result, hash);");
649
WriteLine
("return result;");
656
WriteLine
(");");
717
WriteLine
($"public abstract partial class {node.Name} : {node.Base}");
719
WriteLine
($"internal {node.Name}(InternalSyntax.CSharpSyntaxNode green, SyntaxNode? parent, int position)");
720
WriteLine
(" : base(green, parent, position)");
736
WriteLine
($"{"public"} abstract {(IsNew(field) ? "new " : "")}{fieldType} {field.Name} {{ get; }}");
737
WriteLine
($"public {node.Name} With{field.Name}({fieldType} {CamelCase(field.Name)}) => With{field.Name}Core({CamelCase(field.Name)});");
738
WriteLine
($"internal abstract {node.Name} With{field.Name}Core({fieldType} {CamelCase(field.Name)});");
744
WriteLine
($"public {node.Name} Add{field.Name}(params {argType}[] items) => Add{field.Name}Core(items);");
745
WriteLine
($"internal abstract {node.Name} Add{field.Name}Core(params {argType}[] items);");
759
WriteLine
($"public {node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(items);");
760
WriteLine
($"internal abstract {node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items);");
773
WriteLine
($"{"public"} abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}");
787
WriteLine
($"public new {node.Name} With{baseField.Name}({GetRedFieldType(baseField)} {CamelCase(baseField.Name)}) => ({node.Name})With{baseField.Name}Core({CamelCase(baseField.Name)});");
796
WriteLine
($"public new {node.Name} Add{baseField.Name}(params {argType}[] items) => ({node.Name})Add{baseField.Name}Core(items);");
811
WriteLine
($"public new {baseType.Name} Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}Core(items);");
836
WriteLine
($"public sealed partial class {node.Name} : {node.Base}");
849
WriteLine
($"private SyntaxNode? {CamelCase(field.Name)};");
854
WriteLine
($"private {type} {CamelCase(field.Name)};");
861
WriteLine
($"internal {node.Name}(InternalSyntax.CSharpSyntaxNode green, SyntaxNode? parent, int position)");
862
WriteLine
(" : base(green, parent, position)");
868
WriteLine
("Validate();");
876
WriteLine
("private partial void Validate();");
893
WriteLine
("get");
895
WriteLine
($"var slot = ((Syntax.InternalSyntax.{node.Name})this.Green).{CamelCase(field.Name)};");
896
WriteLine
($"return slot != null ? new SyntaxToken(this, slot, {GetChildPosition(i)}, {GetChildIndex(i)}) : default;");
902
WriteLine
($" => new SyntaxToken(this, ((InternalSyntax.{node.Name})this.Green).{CamelCase(field.Name)}, {GetChildPosition(i)}, {GetChildIndex(i)});");
909
WriteLine
($"public {OverrideOrNewModifier(field)}SyntaxTokenList {field.Name}");
911
WriteLine
("get");
913
WriteLine
($"var slot = this.Green.GetSlot({i});");
914
WriteLine
($"return slot != null ? new SyntaxTokenList(this, slot, {GetChildPosition(i)}, {GetChildIndex(i)}) : default;");
926
WriteLine
($" => new {field.Type}(GetRed(ref this.{CamelCase(field.Name)}, {i}));");
932
WriteLine
("get");
935
WriteLine
($"var red = GetRed(ref this.{CamelCase(field.Name)}, {i});");
936
WriteLine
($"return red != null ? new {field.Type}(red, {GetChildIndex(i)}) : default;");
949
WriteLine
($" => GetRedAtZero(ref this.{CamelCase(field.Name)}){suffix};");
953
WriteLine
($" => GetRed(ref this.{CamelCase(field.Name)}, {i}){suffix};");
964
WriteLine
($"{"public"} {OverrideOrNewModifier(field)}{field.Type} {field.Name} => ((InternalSyntax.{node.Name})this.Green).{field.Name};");
976
WriteLine
(" => null;");
986
WriteLine
($" => index == {index} ? {whenTrue}{suffix} : null;");
992
WriteLine
("=> index switch");
999
WriteLine
($"{index} => GetRedAtZero(ref this.{CamelCase(field.Name)}){suffix},");
1003
WriteLine
($"{index} => GetRed(ref this.{CamelCase(field.Name)}, {index}){suffix},");
1006
WriteLine
("_ => null,");
1022
WriteLine
(" => null;");
1027
WriteLine
($" => index == {index} ? this.{CamelCase(field.Name)} : null;");
1033
WriteLine
("=> index switch");
1037
WriteLine
($"{index} => this.{CamelCase(field.Name)},");
1039
WriteLine
("_ => null,");
1086
WriteLine
($"public override {(genericResult ? "TResult?" : "void")} Accept{genericArgs}(CSharpSyntaxVisitor{genericArgs} visitor){(genericResult ? " where TResult : default" : "")} => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
1101
WriteLine
("public partial class CSharpSyntaxVisitor" + genericArgs);
1111
WriteLine
($"public virtual {(genericResult ? "TResult?" : "void")} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => this.DefaultVisit(node);");
1122
WriteLine
(")");
1139
WriteLine
(")");
1145
WriteLine
(");");
1146
WriteLine
("var annotations = GetAnnotations();");
1147
WriteLine
("return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode;");
1152
WriteLine
("return this;");
1178
WriteLine
(");");
1192
WriteLine
(");");
1281
WriteLine
($"internal override {baseType.Name} Add{field.Name}Core(params {baseArgType}[] items) => Add{field.Name}(items);");
1287
WriteLine
($"public{(isNew ? " new " : " ")}{node.Name} Add{field.Name}(params {argType}[] items) => With{StripPost(field.Name, "Opt")}(this.{field.Name}.AddRange(items));");
1300
WriteLine
($"internal override {baseType.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(items);");
1315
WriteLine
($"var {varName} = this.{field.Name} ?? SyntaxFactory.{factoryName}();");
1316
WriteLine
($"return With{StripPost(field.Name, "Opt")}({varName}.With{StripPost(referencedNodeField.Name, "Opt")}({varName}.{referencedNodeField.Name}.AddRange(items)));");
1321
WriteLine
($" => With{StripPost(field.Name, "Opt")}(this.{field.Name}.With{StripPost(referencedNodeField.Name, "Opt")}(this.{field.Name}.{referencedNodeField.Name}.AddRange(items)));");
1330
WriteLine
("public partial class CSharpSyntaxRewriter : CSharpSyntaxVisitor<SyntaxNode?>");
1340
WriteLine
($"public override SyntaxNode? Visit{StripPost(node.Name, "Syntax")}({node.Name} node)");
1344
WriteLine
(" => node;");
1366
WriteLine
(");");
1376
WriteLine
("public static partial class SyntaxFactory");
1470
WriteLine
(")");
1476
WriteLine
("switch (kind)");
1481
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
1483
WriteLine
("default: throw new ArgumentException(nameof(kind));");
1505
WriteLine
($"if ({pname}.Kind() != SyntaxKind.{kinds[0].Name}) throw new ArgumentException(nameof({pname}));");
1509
WriteLine
($"switch ({pname}.Kind())");
1513
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
1515
WriteLine
($"default: throw new ArgumentException(nameof({pname}));");
1522
WriteLine
($"if ({CamelCase(field.Name)} == null) throw new ArgumentNullException(nameof({CamelCase(field.Name)}));");
1555
WriteLine
(").CreateRed();");
1611
WriteLine
($"private static SyntaxKind Get{StripPost(nd.Name, "Syntax")}{StripPost(field.Name, "Opt")}Kind(SyntaxKind kind)");
1613
WriteLine
("=> kind switch");
1620
WriteLine
($"SyntaxKind.{nKind.Name} => SyntaxKind.{pKind.Name},");
1623
WriteLine
("_ => throw new ArgumentOutOfRangeException(),");
1658
WriteLine
(")");
1667
WriteLine
(");");
1765
WriteLine
(")");
1794
WriteLine
(");");
1844
WriteLine
($"/// {line.TrimStart()}");
1862
WriteLine
($"{indent}/// {line.TrimStart()}");
TestWriter.cs (51)
26
WriteLine
("// <auto-generated />");
28
WriteLine
("using Microsoft.CodeAnalysis.CSharp.Syntax;");
29
WriteLine
("using Roslyn.Utilities;");
30
WriteLine
("using Xunit;");
31
WriteLine
("using InternalSyntaxFactory = Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxFactory;");
34
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp.UnitTests");
38
WriteLine
("public partial class GreenNodeTests");
41
WriteLine
("#region Green Generators");
43
WriteLine
("#endregion Green Generators");
46
WriteLine
("#region Green Factory and Property Tests");
48
WriteLine
("#endregion Green Factory and Property Tests");
51
WriteLine
("#region Green Rewriters");
53
WriteLine
("#endregion Green Rewriters");
58
WriteLine
("public partial class RedNodeTests");
61
WriteLine
("#region Red Generators");
63
WriteLine
("#endregion Red Generators");
66
WriteLine
("#region Red Factory and Property Tests");
68
WriteLine
("#endregion Red Factory and Property Tests");
71
WriteLine
("#region Red Rewriters");
73
WriteLine
("#endregion Red Rewriters");
106
WriteLine
($"private static {csharpNamespace}{node.Name} Generate{strippedName}()");
209
WriteLine
(");");
234
WriteLine
("[Fact]");
235
WriteLine
($"public void Test{strippedName}FactoryAndProperties()");
238
WriteLine
($"var node = Generate{strippedName}();");
251
WriteLine
($"Assert.Equal(SyntaxKind.None, node.{field.Name}.Kind());");
255
WriteLine
($"Assert.Null(node.{field.Name});");
263
WriteLine
($"Assert.Equal(SyntaxKind.{kind}, node.{field.Name}.Kind());");
267
WriteLine
($"Assert.Equal(SyntaxKind.{kind}, node.{field.Name}.Kind);");
274
WriteLine
($"Assert.NotEqual(default, node.{field.Name});");
281
WriteLine
($"Assert.Equal(default, node.{field.Name});");
285
WriteLine
($"Assert.NotNull(node.{field.Name});");
297
WriteLine
($"Assert.Equal(new {field.Type}(), node.{field.Name});");
306
WriteLine
($"var newNode = node{withStat};");
307
WriteLine
("Assert.Equal(node, newNode);");
314
WriteLine
("AttachAndCheckDiagnostics(node);");
344
WriteLine
("[Fact]");
345
WriteLine
($"public void Test{strippedName}TokenDeleteRewriter()");
348
WriteLine
($"var oldNode = Generate{strippedName}();");
349
WriteLine
("var rewriter = new TokenDeleteRewriter();");
350
WriteLine
("var newNode = rewriter.Visit(oldNode);");
353
WriteLine
("if(!oldNode.IsMissing)");
355
WriteLine
("Assert.NotEqual(oldNode, newNode);");
359
WriteLine
("Assert.NotNull(newNode);");
360
WriteLine
("Assert.True(newNode.IsMissing, \"No tokens => missing\");");
372
WriteLine
("[Fact]");
373
WriteLine
($"public void Test{strippedName}IdentityRewriter()");
376
WriteLine
($"var oldNode = Generate{strippedName}();");
377
WriteLine
("var rewriter = new IdentityRewriter();");
378
WriteLine
("var newNode = rewriter.Visit(oldNode);");
382
WriteLine
("Assert.Same(oldNode, newNode);");