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)})]");
70
WriteLine
("// <auto-generated />");
72
WriteLine
("#nullable enable");
74
WriteLine
("using System;");
75
WriteLine
("using System.Collections.Generic;");
76
WriteLine
("using System.Diagnostics.CodeAnalysis;");
77
WriteLine
("using Microsoft.CodeAnalysis.Syntax.InternalSyntax;");
78
WriteLine
("using Roslyn.Utilities;");
79
WriteLine
("using CoreSyntax = Microsoft.CodeAnalysis.Syntax.InternalSyntax;");
87
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax;");
98
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp.Syntax;");
105
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp;");
106
WriteLine
("using System.Diagnostics.CodeAnalysis;");
107
WriteLine
("using Microsoft.CodeAnalysis.CSharp.Syntax;");
130
WriteLine
($"internal abstract partial class {node.Name} : {node.Base}");
134
WriteLine
($"internal {node.Name}(SyntaxKind kind, DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations)");
135
WriteLine
(" : base(kind, diagnostics, annotations)");
139
WriteLine
("SetFlags(NodeFlags.ContainsDirectives);");
144
WriteLine
($"internal {node.Name}(SyntaxKind kind)");
145
WriteLine
(" : base(kind)");
149
WriteLine
("SetFlags(NodeFlags.ContainsDirectives);");
166
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}CoreSyntax.{field.Type} {field.Name} {{ get; }}");
170
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}{(GetFieldType(field, green: true))} {field.Name} {{ get; }}");
180
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}");
189
WriteLine
($"internal sealed partial class {node.Name} : {node.Base}");
198
WriteLine
($"internal readonly {type} {CamelCase(field.Name)};");
203
WriteLine
($"internal readonly {field.Type} {CamelCase(field.Name)};");
212
WriteLine
(", DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations)");
213
WriteLine
(" : base(kind, diagnostics, annotations)");
224
WriteLine
(", SyntaxFactoryContext context)");
225
WriteLine
(" : base(kind)");
227
WriteLine
("this.SetFactoryContext(context);");
237
WriteLine
(")");
238
WriteLine
(" : base(kind)");
251
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(this.{CamelCase(field.Name)});");
256
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(new CoreSyntax.SyntaxList<CSharpSyntaxNode>(this.{CamelCase(field.Name)}));");
261
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(this.{CamelCase(field.Name)});");
265
WriteLine
($"public {OverrideOrNewModifier(field)}{(GetFieldType(field, green: true))} {field.Name} => this.{CamelCase(field.Name)};");
272
WriteLine
($"public {OverrideOrNewModifier(field)}{field.Type} {field.Name} => this.{CamelCase(field.Name)};");
281
WriteLine
(" => null;");
287
WriteLine
($"=> index == 0 ? this.{CamelCase(nodeFields[0].Name)} : null;");
294
WriteLine
("=> index switch");
299
WriteLine
($"{i} => this.{CamelCase(field.Name)},");
301
WriteLine
("_ => null,");
307
WriteLine
($"internal override SyntaxNode CreateRed(SyntaxNode? parent, int position) => new CSharp.Syntax.{node.Name}(this, parent, position);");
335
WriteLine
("SetFlags(NodeFlags.ContainsAttributes);");
339
WriteLine
($"this.SlotCount = {nodeFields.Count};");
345
WriteLine
($"if ({CamelCase(field.Name)} != null)");
347
WriteLine
($"this.AdjustFlagsAndWidth({CamelCase(field.Name)});");
348
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
353
WriteLine
($"this.AdjustFlagsAndWidth({CamelCase(field.Name)});");
354
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
360
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
367
WriteLine
("internal override GreenNode SetAnnotations(SyntaxAnnotation[]? annotations)");
374
WriteLine
(");");
380
WriteLine
("internal override GreenNode SetDiagnostics(DiagnosticInfo[]? diagnostics)");
387
WriteLine
(");");
393
WriteLine
($"public override void Accept(CSharpSyntaxVisitor visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
394
WriteLine
($"public override TResult Accept<TResult>(CSharpSyntaxVisitor<TResult> visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
408
WriteLine
("internal partial class CSharpSyntaxVisitor" + (withResult ? "<TResult>" : ""));
412
WriteLine
($"public virtual {(withResult ? "TResult" : "void")} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => this.DefaultVisit(node);");
432
WriteLine
(")");
449
WriteLine
(")");
455
WriteLine
(");");
456
WriteLine
("var diags = GetDiagnostics();");
457
WriteLine
("if (diags?.Length > 0)");
458
WriteLine
(" newNode = newNode.WithDiagnosticsGreen(diags);");
459
WriteLine
("var annotations = GetAnnotations();");
460
WriteLine
("if (annotations?.Length > 0)");
461
WriteLine
(" newNode = newNode.WithAnnotationsGreen(annotations);");
462
WriteLine
("return newNode;");
467
WriteLine
("return this;");
476
WriteLine
("internal partial class CSharpSyntaxRewriter : CSharpSyntaxVisitor<CSharpSyntaxNode>");
486
WriteLine
($"public override CSharpSyntaxNode Visit{StripPost(node.Name, "Syntax")}({node.Name} node)");
491
WriteLine
("=> node;");
505
WriteLine
(");");
518
WriteLine
("internal partial class ContextAwareSyntax");
521
WriteLine
("private SyntaxFactoryContext context;");
524
WriteLine
("public ContextAwareSyntax(SyntaxFactoryContext context)");
525
WriteLine
(" => this.context = context;");
535
WriteLine
("internal static partial class SyntaxFactory");
557
WriteLine
(")");
563
WriteLine
("switch (kind)");
568
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
570
WriteLine
("default: throw new ArgumentException(nameof(kind));");
582
WriteLine
($"if ({CamelCase(field.Name)} == null) throw new ArgumentNullException(nameof({CamelCase(field.Name)}));");
588
WriteLine
($"if ({CamelCase(field.Name)} != null)");
594
WriteLine
($"if ({pname}.Kind != SyntaxKind.{field.Kinds[0].Name}) throw new ArgumentException(nameof({pname}));");
598
WriteLine
($"switch ({pname}.Kind)");
609
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
612
WriteLine
($"default: throw new ArgumentException(nameof({pname}));");
645
WriteLine
("int hash;");
657
WriteLine
(", out hash);");
659
WriteLine
($"if (cached != null) return ({nd.Name})cached;");
665
WriteLine
(");");
667
WriteLine
("if (hash >= 0)");
671
WriteLine
("SyntaxNodeCache.AddNode(result, hash);");
677
WriteLine
("return result;");
684
WriteLine
(");");
745
WriteLine
($"public abstract partial class {node.Name} : {node.Base}");
747
WriteLine
($"internal {node.Name}(InternalSyntax.CSharpSyntaxNode green, SyntaxNode? parent, int position)");
748
WriteLine
(" : base(green, parent, position)");
764
WriteLine
($"{"public"} abstract {(IsNew(field) ? "new " : "")}{fieldType} {field.Name} {{ get; }}");
765
WriteLine
($"public {node.Name} With{field.Name}({fieldType} {CamelCase(field.Name)}) => With{field.Name}Core({CamelCase(field.Name)});");
766
WriteLine
($"internal abstract {node.Name} With{field.Name}Core({fieldType} {CamelCase(field.Name)});");
772
WriteLine
($"public {node.Name} Add{field.Name}(params {argType}[] items) => Add{field.Name}Core(items);");
773
WriteLine
($"internal abstract {node.Name} Add{field.Name}Core(params {argType}[] items);");
787
WriteLine
($"public {node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(items);");
788
WriteLine
($"internal abstract {node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items);");
801
WriteLine
($"{"public"} abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}");
815
WriteLine
($"public new {node.Name} With{baseField.Name}({GetRedFieldType(baseField)} {CamelCase(baseField.Name)}) => ({node.Name})With{baseField.Name}Core({CamelCase(baseField.Name)});");
824
WriteLine
($"public new {node.Name} Add{baseField.Name}(params {argType}[] items) => ({node.Name})Add{baseField.Name}Core(items);");
839
WriteLine
($"public new {baseType.Name} Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}Core(items);");
864
WriteLine
($"public sealed partial class {node.Name} : {node.Base}");
877
WriteLine
($"private SyntaxNode? {CamelCase(field.Name)};");
882
WriteLine
($"private {type} {CamelCase(field.Name)};");
889
WriteLine
($"internal {node.Name}(InternalSyntax.CSharpSyntaxNode green, SyntaxNode? parent, int position)");
890
WriteLine
(" : base(green, parent, position)");
896
WriteLine
("Validate();");
904
WriteLine
("private partial void Validate();");
921
WriteLine
("get");
923
WriteLine
($"var slot = ((Syntax.InternalSyntax.{node.Name})this.Green).{CamelCase(field.Name)};");
924
WriteLine
($"return slot != null ? new SyntaxToken(this, slot, {GetChildPosition(i)}, {GetChildIndex(i)}) : default;");
930
WriteLine
($" => new SyntaxToken(this, ((InternalSyntax.{node.Name})this.Green).{CamelCase(field.Name)}, {GetChildPosition(i)}, {GetChildIndex(i)});");
937
WriteLine
($"public {OverrideOrNewModifier(field)}SyntaxTokenList {field.Name}");
939
WriteLine
("get");
941
WriteLine
($"var slot = this.Green.GetSlot({i});");
942
WriteLine
($"return slot != null ? new SyntaxTokenList(this, slot, {GetChildPosition(i)}, {GetChildIndex(i)}) : default;");
954
WriteLine
($" => new {field.Type}(GetRed(ref this.{CamelCase(field.Name)}, {i}));");
960
WriteLine
("get");
963
WriteLine
($"var red = GetRed(ref this.{CamelCase(field.Name)}, {i});");
964
WriteLine
($"return red != null ? new {field.Type}(red, {GetChildIndex(i)}) : default;");
977
WriteLine
($" => GetRedAtZero(ref this.{CamelCase(field.Name)}){suffix};");
981
WriteLine
($" => GetRed(ref this.{CamelCase(field.Name)}, {i}){suffix};");
992
WriteLine
($"{"public"} {OverrideOrNewModifier(field)}{field.Type} {field.Name} => ((InternalSyntax.{node.Name})this.Green).{field.Name};");
1004
WriteLine
(" => null;");
1014
WriteLine
($" => index == {index} ? {whenTrue}{suffix} : null;");
1020
WriteLine
("=> index switch");
1027
WriteLine
($"{index} => GetRedAtZero(ref this.{CamelCase(field.Name)}){suffix},");
1031
WriteLine
($"{index} => GetRed(ref this.{CamelCase(field.Name)}, {index}){suffix},");
1034
WriteLine
("_ => null,");
1050
WriteLine
(" => null;");
1055
WriteLine
($" => index == {index} ? this.{CamelCase(field.Name)} : null;");
1061
WriteLine
("=> index switch");
1065
WriteLine
($"{index} => this.{CamelCase(field.Name)},");
1067
WriteLine
("_ => null,");
1114
WriteLine
($"public override {(genericResult ? "TResult?" : "void")} Accept{genericArgs}(CSharpSyntaxVisitor{genericArgs} visitor){(genericResult ? " where TResult : default" : "")} => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
1129
WriteLine
("public partial class CSharpSyntaxVisitor" + genericArgs);
1139
WriteLine
($"public virtual {(genericResult ? "TResult?" : "void")} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => this.DefaultVisit(node);");
1150
WriteLine
(")");
1167
WriteLine
(")");
1173
WriteLine
(");");
1174
WriteLine
("var annotations = GetAnnotations();");
1175
WriteLine
("return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode;");
1180
WriteLine
("return this;");
1206
WriteLine
(");");
1220
WriteLine
(");");
1309
WriteLine
($"internal override {baseType.Name} Add{field.Name}Core(params {baseArgType}[] items) => Add{field.Name}(items);");
1315
WriteLine
($"public{(isNew ? " new " : " ")}{node.Name} Add{field.Name}(params {argType}[] items) => With{StripPost(field.Name, "Opt")}(this.{field.Name}.AddRange(items));");
1328
WriteLine
($"internal override {baseType.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(items);");
1343
WriteLine
($"var {varName} = this.{field.Name} ?? SyntaxFactory.{factoryName}();");
1344
WriteLine
($"return With{StripPost(field.Name, "Opt")}({varName}.With{StripPost(referencedNodeField.Name, "Opt")}({varName}.{referencedNodeField.Name}.AddRange(items)));");
1349
WriteLine
($" => With{StripPost(field.Name, "Opt")}(this.{field.Name}.With{StripPost(referencedNodeField.Name, "Opt")}(this.{field.Name}.{referencedNodeField.Name}.AddRange(items)));");
1358
WriteLine
("public partial class CSharpSyntaxRewriter : CSharpSyntaxVisitor<SyntaxNode?>");
1368
WriteLine
($"public override SyntaxNode? Visit{StripPost(node.Name, "Syntax")}({node.Name} node)");
1372
WriteLine
(" => node;");
1394
WriteLine
(");");
1404
WriteLine
("public static partial class SyntaxFactory");
1498
WriteLine
(")");
1504
WriteLine
("switch (kind)");
1509
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
1511
WriteLine
("default: throw new ArgumentException(nameof(kind));");
1533
WriteLine
($"if ({pname}.Kind() != SyntaxKind.{kinds[0].Name}) throw new ArgumentException(nameof({pname}));");
1537
WriteLine
($"switch ({pname}.Kind())");
1541
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
1543
WriteLine
($"default: throw new ArgumentException(nameof({pname}));");
1550
WriteLine
($"if ({CamelCase(field.Name)} == null) throw new ArgumentNullException(nameof({CamelCase(field.Name)}));");
1583
WriteLine
(").CreateRed();");
1639
WriteLine
($"private static SyntaxKind Get{StripPost(nd.Name, "Syntax")}{StripPost(field.Name, "Opt")}Kind(SyntaxKind kind)");
1641
WriteLine
("=> kind switch");
1648
WriteLine
($"SyntaxKind.{nKind.Name} => SyntaxKind.{pKind.Name},");
1651
WriteLine
("_ => throw new ArgumentOutOfRangeException(),");
1686
WriteLine
(")");
1695
WriteLine
(");");
1793
WriteLine
(")");
1822
WriteLine
(");");
1872
WriteLine
($"/// {line.TrimStart()}");
1890
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);");