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;");
140
WriteLine
("using System.Diagnostics.CodeAnalysis;");
141
WriteLine
("using Microsoft.CodeAnalysis.CSharp.Syntax;");
164
WriteLine
($"internal abstract partial class {node.Name} : {node.Base}");
168
WriteLine
($"internal {node.Name}(SyntaxKind kind, DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations)");
169
WriteLine
(" : base(kind, diagnostics, annotations)");
173
WriteLine
("SetFlags(NodeFlags.ContainsDirectives);");
178
WriteLine
($"internal {node.Name}(SyntaxKind kind)");
179
WriteLine
(" : base(kind)");
183
WriteLine
("SetFlags(NodeFlags.ContainsDirectives);");
200
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}CoreSyntax.{field.Type} {field.Name} {{ get; }}");
204
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}{(GetFieldType(field, green: true))} {field.Name} {{ get; }}");
214
WriteLine
($"public abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}");
223
WriteLine
($"internal sealed partial class {node.Name} : {node.Base}");
232
WriteLine
($"internal readonly {type} {CamelCase(field.Name)};");
237
WriteLine
($"internal readonly {field.Type} {CamelCase(field.Name)};");
246
WriteLine
(", DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations)");
247
WriteLine
(" : base(kind, diagnostics, annotations)");
258
WriteLine
(", SyntaxFactoryContext context)");
259
WriteLine
(" : base(kind)");
261
WriteLine
("this.SetFactoryContext(context);");
271
WriteLine
(")");
272
WriteLine
(" : base(kind)");
285
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(this.{CamelCase(field.Name)});");
290
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(new CoreSyntax.SyntaxList<CSharpSyntaxNode>(this.{CamelCase(field.Name)}));");
295
WriteLine
($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(this.{CamelCase(field.Name)});");
299
WriteLine
($"public {OverrideOrNewModifier(field)}{(GetFieldType(field, green: true))} {field.Name} => this.{CamelCase(field.Name)};");
306
WriteLine
($"public {OverrideOrNewModifier(field)}{field.Type} {field.Name} => this.{CamelCase(field.Name)};");
315
WriteLine
(" => null;");
321
WriteLine
($"=> index == 0 ? this.{CamelCase(nodeFields[0].Name)} : null;");
328
WriteLine
("=> index switch");
333
WriteLine
($"{i} => this.{CamelCase(field.Name)},");
335
WriteLine
("_ => null,");
341
WriteLine
($"internal override SyntaxNode CreateRed(SyntaxNode? parent, int position) => new CSharp.Syntax.{node.Name}(this, parent, position);");
369
WriteLine
("SetFlags(NodeFlags.ContainsAttributes);");
373
WriteLine
($"this.SlotCount = {nodeFields.Count};");
379
WriteLine
($"if ({CamelCase(field.Name)} != null)");
381
WriteLine
($"this.AdjustFlagsAndWidth({CamelCase(field.Name)});");
382
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
387
WriteLine
($"this.AdjustFlagsAndWidth({CamelCase(field.Name)});");
388
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
394
WriteLine
($"this.{CamelCase(field.Name)} = {CamelCase(field.Name)};");
401
WriteLine
("internal override GreenNode SetAnnotations(SyntaxAnnotation[]? annotations)");
408
WriteLine
(");");
414
WriteLine
("internal override GreenNode SetDiagnostics(DiagnosticInfo[]? diagnostics)");
421
WriteLine
(");");
427
WriteLine
($"public override void Accept(CSharpSyntaxVisitor visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
428
WriteLine
($"public override TResult Accept<TResult>(CSharpSyntaxVisitor<TResult> visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
442
WriteLine
("internal partial class CSharpSyntaxVisitor" + (withResult ? "<TResult>" : ""));
446
WriteLine
($"public virtual {(withResult ? "TResult" : "void")} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => this.DefaultVisit(node);");
466
WriteLine
(")");
483
WriteLine
(")");
489
WriteLine
(");");
490
WriteLine
("var diags = GetDiagnostics();");
491
WriteLine
("if (diags?.Length > 0)");
492
WriteLine
(" newNode = newNode.WithDiagnosticsGreen(diags);");
493
WriteLine
("var annotations = GetAnnotations();");
494
WriteLine
("if (annotations?.Length > 0)");
495
WriteLine
(" newNode = newNode.WithAnnotationsGreen(annotations);");
496
WriteLine
("return newNode;");
501
WriteLine
("return this;");
510
WriteLine
("internal partial class CSharpSyntaxRewriter : CSharpSyntaxVisitor<CSharpSyntaxNode>");
520
WriteLine
($"public override CSharpSyntaxNode Visit{StripPost(node.Name, "Syntax")}({node.Name} node)");
525
WriteLine
("=> node;");
539
WriteLine
(");");
552
WriteLine
("internal partial class ContextAwareSyntax");
555
WriteLine
("private SyntaxFactoryContext context;");
558
WriteLine
("public ContextAwareSyntax(SyntaxFactoryContext context)");
559
WriteLine
(" => this.context = context;");
569
WriteLine
("internal static partial class SyntaxFactory");
591
WriteLine
(")");
597
WriteLine
("switch (kind)");
602
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
604
WriteLine
("default: throw new ArgumentException(nameof(kind));");
616
WriteLine
($"if ({CamelCase(field.Name)} == null) throw new ArgumentNullException(nameof({CamelCase(field.Name)}));");
622
WriteLine
($"if ({CamelCase(field.Name)} != null)");
628
WriteLine
($"if ({pname}.Kind != SyntaxKind.{field.Kinds[0].Name}) throw new ArgumentException(nameof({pname}));");
632
WriteLine
($"switch ({pname}.Kind)");
643
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
646
WriteLine
($"default: throw new ArgumentException(nameof({pname}));");
679
WriteLine
("int hash;");
691
WriteLine
(", out hash);");
693
WriteLine
($"if (cached != null) return ({nd.Name})cached;");
699
WriteLine
(");");
701
WriteLine
("if (hash >= 0)");
705
WriteLine
("SyntaxNodeCache.AddNode(result, hash);");
711
WriteLine
("return result;");
718
WriteLine
(");");
779
WriteLine
($"public abstract partial class {node.Name} : {node.Base}");
781
WriteLine
($"internal {node.Name}(InternalSyntax.CSharpSyntaxNode green, SyntaxNode? parent, int position)");
782
WriteLine
(" : base(green, parent, position)");
798
WriteLine
($"{"public"} abstract {(IsNew(field) ? "new " : "")}{fieldType} {field.Name} {{ get; }}");
799
WriteLine
($"public {node.Name} With{field.Name}({fieldType} {CamelCase(field.Name)}) => With{field.Name}Core({CamelCase(field.Name)});");
800
WriteLine
($"internal abstract {node.Name} With{field.Name}Core({fieldType} {CamelCase(field.Name)});");
806
WriteLine
($"public {node.Name} Add{field.Name}(params {argType}[] items) => Add{field.Name}Core(items);");
807
WriteLine
($"internal abstract {node.Name} Add{field.Name}Core(params {argType}[] items);");
821
WriteLine
($"public {node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(items);");
822
WriteLine
($"internal abstract {node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items);");
835
WriteLine
($"{"public"} abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}");
849
WriteLine
($"public new {node.Name} With{baseField.Name}({GetRedFieldType(baseField)} {CamelCase(baseField.Name)}) => ({node.Name})With{baseField.Name}Core({CamelCase(baseField.Name)});");
858
WriteLine
($"public new {node.Name} Add{baseField.Name}(params {argType}[] items) => ({node.Name})Add{baseField.Name}Core(items);");
873
WriteLine
($"public new {baseType.Name} Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}Core(items);");
898
WriteLine
($"public sealed partial class {node.Name} : {node.Base}");
911
WriteLine
($"private SyntaxNode? {CamelCase(field.Name)};");
916
WriteLine
($"private {type} {CamelCase(field.Name)};");
923
WriteLine
($"internal {node.Name}(InternalSyntax.CSharpSyntaxNode green, SyntaxNode? parent, int position)");
924
WriteLine
(" : base(green, parent, position)");
930
WriteLine
("Validate();");
938
WriteLine
("private partial void Validate();");
955
WriteLine
("get");
957
WriteLine
($"var slot = ((Syntax.InternalSyntax.{node.Name})this.Green).{CamelCase(field.Name)};");
958
WriteLine
($"return slot != null ? new SyntaxToken(this, slot, {GetChildPosition(i)}, {GetChildIndex(i)}) : default;");
964
WriteLine
($" => new SyntaxToken(this, ((InternalSyntax.{node.Name})this.Green).{CamelCase(field.Name)}, {GetChildPosition(i)}, {GetChildIndex(i)});");
971
WriteLine
($"public {OverrideOrNewModifier(field)}SyntaxTokenList {field.Name}");
973
WriteLine
("get");
975
WriteLine
($"var slot = this.Green.GetSlot({i});");
976
WriteLine
($"return slot != null ? new SyntaxTokenList(this, slot, {GetChildPosition(i)}, {GetChildIndex(i)}) : default;");
988
WriteLine
($" => new {field.Type}(GetRed(ref this.{CamelCase(field.Name)}, {i}));");
994
WriteLine
("get");
997
WriteLine
($"var red = GetRed(ref this.{CamelCase(field.Name)}, {i});");
998
WriteLine
($"return red != null ? new {field.Type}(red, {GetChildIndex(i)}) : default;");
1011
WriteLine
($" => GetRedAtZero(ref this.{CamelCase(field.Name)}){suffix};");
1015
WriteLine
($" => GetRed(ref this.{CamelCase(field.Name)}, {i}){suffix};");
1026
WriteLine
($"{"public"} {OverrideOrNewModifier(field)}{field.Type} {field.Name} => ((InternalSyntax.{node.Name})this.Green).{field.Name};");
1038
WriteLine
(" => null;");
1048
WriteLine
($" => index == {index} ? {whenTrue}{suffix} : null;");
1054
WriteLine
("=> index switch");
1061
WriteLine
($"{index} => GetRedAtZero(ref this.{CamelCase(field.Name)}){suffix},");
1065
WriteLine
($"{index} => GetRed(ref this.{CamelCase(field.Name)}, {index}){suffix},");
1068
WriteLine
("_ => null,");
1084
WriteLine
(" => null;");
1089
WriteLine
($" => index == {index} ? this.{CamelCase(field.Name)} : null;");
1095
WriteLine
("=> index switch");
1099
WriteLine
($"{index} => this.{CamelCase(field.Name)},");
1101
WriteLine
("_ => null,");
1148
WriteLine
($"public override {(genericResult ? "TResult?" : "void")} Accept{genericArgs}(CSharpSyntaxVisitor{genericArgs} visitor){(genericResult ? " where TResult : default" : "")} => visitor.Visit{StripPost(node.Name, "Syntax")}(this);");
1163
WriteLine
("public partial class CSharpSyntaxVisitor" + genericArgs);
1173
WriteLine
($"public virtual {(genericResult ? "TResult?" : "void")} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => this.DefaultVisit(node);");
1185
WriteLine
(")");
1202
WriteLine
(")");
1208
WriteLine
(");");
1209
WriteLine
("var annotations = GetAnnotations();");
1210
WriteLine
("return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode;");
1215
WriteLine
("return this;");
1241
WriteLine
(");");
1255
WriteLine
(");");
1344
WriteLine
($"internal override {baseType.Name} Add{field.Name}Core(params {baseArgType}[] items) => Add{field.Name}(items);");
1350
WriteLine
($"public{(isNew ? " new " : " ")}{node.Name} Add{field.Name}(params {argType}[] items) => With{StripPost(field.Name, "Opt")}(this.{field.Name}.AddRange(items));");
1363
WriteLine
($"internal override {baseType.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(items);");
1378
WriteLine
($"var {varName} = this.{field.Name} ?? SyntaxFactory.{factoryName}();");
1379
WriteLine
($"return With{StripPost(field.Name, "Opt")}({varName}.With{StripPost(referencedNodeField.Name, "Opt")}({varName}.{referencedNodeField.Name}.AddRange(items)));");
1384
WriteLine
($" => With{StripPost(field.Name, "Opt")}(this.{field.Name}.With{StripPost(referencedNodeField.Name, "Opt")}(this.{field.Name}.{referencedNodeField.Name}.AddRange(items)));");
1393
WriteLine
("public partial class CSharpSyntaxRewriter : CSharpSyntaxVisitor<SyntaxNode?>");
1403
WriteLine
($"public override SyntaxNode? Visit{StripPost(node.Name, "Syntax")}({node.Name} node)");
1407
WriteLine
(" => node;");
1429
WriteLine
(");");
1439
WriteLine
("public static partial class SyntaxFactory");
1533
WriteLine
(")");
1539
WriteLine
("switch (kind)");
1544
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
1546
WriteLine
("default: throw new ArgumentException(nameof(kind));");
1568
WriteLine
($"if ({pname}.Kind() != SyntaxKind.{kinds[0].Name}) throw new ArgumentException(nameof({pname}));");
1572
WriteLine
($"switch ({pname}.Kind())");
1576
WriteLine
($"case SyntaxKind.{kind.Name}:{(kind == kinds.Last() ? " break;" : "")}");
1578
WriteLine
($"default: throw new ArgumentException(nameof({pname}));");
1585
WriteLine
($"if ({CamelCase(field.Name)} == null) throw new ArgumentNullException(nameof({CamelCase(field.Name)}));");
1618
WriteLine
(").CreateRed();");
1674
WriteLine
($"private static SyntaxKind Get{StripPost(nd.Name, "Syntax")}{StripPost(field.Name, "Opt")}Kind(SyntaxKind kind)");
1676
WriteLine
("=> kind switch");
1683
WriteLine
($"SyntaxKind.{nKind.Name} => SyntaxKind.{pKind.Name},");
1686
WriteLine
("_ => throw new ArgumentOutOfRangeException(),");
1721
WriteLine
(")");
1730
WriteLine
(");");
1828
WriteLine
(")");
1857
WriteLine
(");");
1907
WriteLine
($"/// {line.TrimStart()}");
1925
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);");