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)})]");
103
WriteLine
("// <auto-generated />");
105
WriteLine
("#nullable enable");
107
WriteLine
("using System;");
108
WriteLine
("using System.Collections.Generic;");
109
WriteLine
("using System.Diagnostics.CodeAnalysis;");
110
WriteLine
("using Microsoft.CodeAnalysis.Syntax.InternalSyntax;");
111
WriteLine
("using Roslyn.Utilities;");
112
WriteLine
("using CoreSyntax = Microsoft.CodeAnalysis.Syntax.InternalSyntax;");
120
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax;");
131
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp.Syntax;");
138
WriteLine
("namespace Microsoft.CodeAnalysis.CSharp;");
139
WriteLine
("using System.Diagnostics.CodeAnalysis;");
140
WriteLine
("using Microsoft.CodeAnalysis.CSharp.Syntax;");
163
WriteLine
($"internal abstract partial class {node.Name} : {node.Base}");
167
WriteLine
($"internal {node.Name}(SyntaxKind kind, DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations)");
168
WriteLine
(" : base(kind, diagnostics, annotations)");
172
WriteLine
("SetFlags(NodeFlags.ContainsDirectives);");
177
WriteLine
($"internal {node.Name}(SyntaxKind kind)");
178
WriteLine
(" : base(kind)");
182
WriteLine
("SetFlags(NodeFlags.ContainsDirectives);");
199
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}CoreSyntax.{field.Type} {field.Name} {{ get; }}");
203
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}{(GetFieldType(field, green: true))} {field.Name} {{ get; }}");
213
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}");
222
WriteLine
($"internal sealed partial class {node.Name} : {node.Base}");
231
WriteLine
($"internal readonly {type} {CamelCase(field.Name)};");
236
WriteLine
($"internal readonly {field.Type} {CamelCase(field.Name)};");
245
WriteLine
(", DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations)");
246
WriteLine
(" : base(kind, diagnostics, annotations)");
257
WriteLine
(", SyntaxFactoryContext context)");
258
WriteLine
(" : base(kind)");
260
WriteLine
("this.SetFactoryContext(context);");
270
WriteLine
(")");
271
WriteLine
(" : base(kind)");
284
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(this.{CamelCase(field.Name)});");
289
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(new CoreSyntax.SyntaxList<CSharpSyntaxNode>(this.{CamelCase(field.Name)}));");
294
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(this.{CamelCase(field.Name)});");
298
WriteLine
($"public {OverrideOrNewModifier(field)}{(GetFieldType(field, green: true))} {field.Name} => this.{CamelCase(field.Name)};");
305
WriteLine
($"public {OverrideOrNewModifier(field)}{field.Type} {field.Name} => this.{CamelCase(field.Name)};");
314
WriteLine
(" => null;");
320
WriteLine
($"=> index == 0 ? this.{CamelCase(nodeFields[0].Name)} : null;");
327
WriteLine
("=> index switch");
332
WriteLine
($"{i} => this.{CamelCase(field.Name)},");
334
WriteLine
("_ => null,");
340
WriteLine
($"internal override SyntaxNode CreateRed(SyntaxNode? parent, int position) => new CSharp.Syntax.{node.Name}(this, parent, position);");
368
WriteLine
("SetFlags(NodeFlags.ContainsAttributes);");
372
WriteLine
($"this.SlotCount = {nodeFields.Count};");
378
WriteLine
($"if ({CamelCase(field.Name)} != null)");
380
WriteLine
($"this.AdjustFlagsAndWidth({CamelCase(field.Name)});");
381
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
386
WriteLine
($"this.AdjustFlagsAndWidth({CamelCase(field.Name)});");
387
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
393
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
400
WriteLine
("internal override GreenNode SetAnnotations(SyntaxAnnotation[]? annotations)");
407
WriteLine
(");");
413
WriteLine
("internal override GreenNode SetDiagnostics(DiagnosticInfo[]? diagnostics)");
420
WriteLine
(");");
426
WriteLine
($"public override void Accept(CSharpSyntaxVisitor visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
427
WriteLine
($"public override TResult Accept<TResult>(CSharpSyntaxVisitor<TResult> visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
441
WriteLine
("internal partial class CSharpSyntaxVisitor" + (withResult ? "<TResult>" : ""));
445
WriteLine
($"public virtual {(withResult ? "TResult" : "void")} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => this.DefaultVisit(node);");
465
WriteLine
(")");
482
WriteLine
(")");
488
WriteLine
(");");
489
WriteLine
("var diags = GetDiagnostics();");
490
WriteLine
("if (diags?.Length > 0)");
491
WriteLine
(" newNode = newNode.WithDiagnosticsGreen(diags);");
492
WriteLine
("var annotations = GetAnnotations();");
493
WriteLine
("if (annotations?.Length > 0)");
494
WriteLine
(" newNode = newNode.WithAnnotationsGreen(annotations);");
495
WriteLine
("return newNode;");
500
WriteLine
("return this;");
509
WriteLine
("internal partial class CSharpSyntaxRewriter : CSharpSyntaxVisitor<CSharpSyntaxNode>");
519
WriteLine
($"public override CSharpSyntaxNode Visit{StripPost(node.Name, "Syntax")}({node.Name} node)");
524
WriteLine
("=> node;");
538
WriteLine
(");");
551
WriteLine
("internal partial class ContextAwareSyntax");
554
WriteLine
("private SyntaxFactoryContext context;");
557
WriteLine
("public ContextAwareSyntax(SyntaxFactoryContext context)");
558
WriteLine
(" => this.context = context;");
568
WriteLine
("internal static partial class SyntaxFactory");
590
WriteLine
(")");
596
WriteLine
("switch (kind)");
601
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
603
WriteLine
("default: throw new ArgumentException(nameof(kind));");
615
WriteLine
($"if ({CamelCase(field.Name)} == null) throw new ArgumentNullException(nameof({CamelCase(field.Name)}));");
621
WriteLine
($"if ({CamelCase(field.Name)} != null)");
627
WriteLine
($"if ({pname}.Kind != SyntaxKind.{field.Kinds[0].Name}) throw new ArgumentException(nameof({pname}));");
631
WriteLine
($"switch ({pname}.Kind)");
642
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
645
WriteLine
($"default: throw new ArgumentException(nameof({pname}));");
678
WriteLine
("int hash;");
690
WriteLine
(", out hash);");
692
WriteLine
($"if (cached != null) return ({nd.Name})cached;");
698
WriteLine
(");");
700
WriteLine
("if (hash >= 0)");
704
WriteLine
("SyntaxNodeCache.AddNode(result, hash);");
710
WriteLine
("return result;");
717
WriteLine
(");");
778
WriteLine
($"public abstract partial class {node.Name} : {node.Base}");
780
WriteLine
($"internal {node.Name}(InternalSyntax.CSharpSyntaxNode green, SyntaxNode? parent, int position)");
781
WriteLine
(" : base(green, parent, position)");
797
WriteLine
($"{"public"} abstract {(IsNew(field) ? "new " : "")}{fieldType} {field.Name} {{ get; }}");
798
WriteLine
($"public {node.Name} With{field.Name}({fieldType} {CamelCase(field.Name)}) => With{field.Name}Core({CamelCase(field.Name)});");
799
WriteLine
($"internal abstract {node.Name} With{field.Name}Core({fieldType} {CamelCase(field.Name)});");
805
WriteLine
($"public {node.Name} Add{field.Name}(params {argType}[] items) => Add{field.Name}Core(items);");
806
WriteLine
($"internal abstract {node.Name} Add{field.Name}Core(params {argType}[] items);");
820
WriteLine
($"public {node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(items);");
821
WriteLine
($"internal abstract {node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items);");
834
WriteLine
($"{"public"} abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}");
848
WriteLine
($"public new {node.Name} With{baseField.Name}({GetRedFieldType(baseField)} {CamelCase(baseField.Name)}) => ({node.Name})With{baseField.Name}Core({CamelCase(baseField.Name)});");
857
WriteLine
($"public new {node.Name} Add{baseField.Name}(params {argType}[] items) => ({node.Name})Add{baseField.Name}Core(items);");
872
WriteLine
($"public new {baseType.Name} Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}Core(items);");
897
WriteLine
($"public sealed partial class {node.Name} : {node.Base}");
910
WriteLine
($"private SyntaxNode? {CamelCase(field.Name)};");
915
WriteLine
($"private {type} {CamelCase(field.Name)};");
922
WriteLine
($"internal {node.Name}(InternalSyntax.CSharpSyntaxNode green, SyntaxNode? parent, int position)");
923
WriteLine
(" : base(green, parent, position)");
929
WriteLine
("Validate();");
937
WriteLine
("private partial void Validate();");
954
WriteLine
("get");
956
WriteLine
($"var slot = ((Syntax.InternalSyntax.{node.Name})this.Green).{CamelCase(field.Name)};");
957
WriteLine
($"return slot != null ? new SyntaxToken(this, slot, {GetChildPosition(i)}, {GetChildIndex(i)}) : default;");
963
WriteLine
($" => new SyntaxToken(this, ((InternalSyntax.{node.Name})this.Green).{CamelCase(field.Name)}, {GetChildPosition(i)}, {GetChildIndex(i)});");
970
WriteLine
($"public {OverrideOrNewModifier(field)}SyntaxTokenList {field.Name}");
972
WriteLine
("get");
974
WriteLine
($"var slot = this.Green.GetSlot({i});");
975
WriteLine
($"return slot != null ? new SyntaxTokenList(this, slot, {GetChildPosition(i)}, {GetChildIndex(i)}) : default;");
987
WriteLine
($" => new {field.Type}(GetRed(ref this.{CamelCase(field.Name)}, {i}));");
993
WriteLine
("get");
996
WriteLine
($"var red = GetRed(ref this.{CamelCase(field.Name)}, {i});");
997
WriteLine
($"return red != null ? new {field.Type}(red, {GetChildIndex(i)}) : default;");
1010
WriteLine
($" => GetRedAtZero(ref this.{CamelCase(field.Name)}){suffix};");
1014
WriteLine
($" => GetRed(ref this.{CamelCase(field.Name)}, {i}){suffix};");
1025
WriteLine
($"{"public"} {OverrideOrNewModifier(field)}{field.Type} {field.Name} => ((InternalSyntax.{node.Name})this.Green).{field.Name};");
1037
WriteLine
(" => null;");
1047
WriteLine
($" => index == {index} ? {whenTrue}{suffix} : null;");
1053
WriteLine
("=> index switch");
1060
WriteLine
($"{index} => GetRedAtZero(ref this.{CamelCase(field.Name)}){suffix},");
1064
WriteLine
($"{index} => GetRed(ref this.{CamelCase(field.Name)}, {index}){suffix},");
1067
WriteLine
("_ => null,");
1083
WriteLine
(" => null;");
1088
WriteLine
($" => index == {index} ? this.{CamelCase(field.Name)} : null;");
1094
WriteLine
("=> index switch");
1098
WriteLine
($"{index} => this.{CamelCase(field.Name)},");
1100
WriteLine
("_ => null,");
1147
WriteLine
($"public override {(genericResult ? "TResult?" : "void")} Accept{genericArgs}(CSharpSyntaxVisitor{genericArgs} visitor){(genericResult ? " where TResult : default" : "")} => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
1162
WriteLine
("public partial class CSharpSyntaxVisitor" + genericArgs);
1172
WriteLine
($"public virtual {(genericResult ? "TResult?" : "void")} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => this.DefaultVisit(node);");
1184
WriteLine
(")");
1201
WriteLine
(")");
1207
WriteLine
(");");
1208
WriteLine
("var annotations = GetAnnotations();");
1209
WriteLine
("return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode;");
1214
WriteLine
("return this;");
1240
WriteLine
(");");
1254
WriteLine
(");");
1343
WriteLine
($"internal override {baseType.Name} Add{field.Name}Core(params {baseArgType}[] items) => Add{field.Name}(items);");
1349
WriteLine
($"public{(isNew ? " new " : " ")}{node.Name} Add{field.Name}(params {argType}[] items) => With{StripPost(field.Name, "Opt")}(this.{field.Name}.AddRange(items));");
1362
WriteLine
($"internal override {baseType.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(items);");
1377
WriteLine
($"var {varName} = this.{field.Name} ?? SyntaxFactory.{factoryName}();");
1378
WriteLine
($"return With{StripPost(field.Name, "Opt")}({varName}.With{StripPost(referencedNodeField.Name, "Opt")}({varName}.{referencedNodeField.Name}.AddRange(items)));");
1383
WriteLine
($" => With{StripPost(field.Name, "Opt")}(this.{field.Name}.With{StripPost(referencedNodeField.Name, "Opt")}(this.{field.Name}.{referencedNodeField.Name}.AddRange(items)));");
1392
WriteLine
("public partial class CSharpSyntaxRewriter : CSharpSyntaxVisitor<SyntaxNode?>");
1402
WriteLine
($"public override SyntaxNode? Visit{StripPost(node.Name, "Syntax")}({node.Name} node)");
1406
WriteLine
(" => node;");
1428
WriteLine
(");");
1438
WriteLine
("public static partial class SyntaxFactory");
1532
WriteLine
(")");
1538
WriteLine
("switch (kind)");
1543
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
1545
WriteLine
("default: throw new ArgumentException(nameof(kind));");
1567
WriteLine
($"if ({pname}.Kind() != SyntaxKind.{kinds[0].Name}) throw new ArgumentException(nameof({pname}));");
1571
WriteLine
($"switch ({pname}.Kind())");
1575
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
1577
WriteLine
($"default: throw new ArgumentException(nameof({pname}));");
1584
WriteLine
($"if ({CamelCase(field.Name)} == null) throw new ArgumentNullException(nameof({CamelCase(field.Name)}));");
1617
WriteLine
(").CreateRed();");
1673
WriteLine
($"private static SyntaxKind Get{StripPost(nd.Name, "Syntax")}{StripPost(field.Name, "Opt")}Kind(SyntaxKind kind)");
1675
WriteLine
("=> kind switch");
1682
WriteLine
($"SyntaxKind.{nKind.Name} => SyntaxKind.{pKind.Name},");
1685
WriteLine
("_ => throw new ArgumentOutOfRangeException(),");
1720
WriteLine
(")");
1729
WriteLine
(");");
1827
WriteLine
(")");
1856
WriteLine
(");");
1906
WriteLine
($"/// {line.TrimStart()}");
1924
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);");