未验证 提交 8e4c0992 编写于 作者: S Sam Harwell 提交者: GitHub

Merge pull request #43998 from sharwell/cleaner-codegen

Cleaner generated code
......@@ -2,7 +2,7 @@
"isRoot": true,
"tools": {
"dotnet-format": {
"version": "3.3.111304",
"version": "4.0.130203",
"commands": [
"dotnet-format"
]
......
......@@ -31,7 +31,7 @@
<MicrosoftCodeAnalysisNetAnalyzersVersion>3.3.0-beta1.20305.4</MicrosoftCodeAnalysisNetAnalyzersVersion>
<CodeStyleLayerCodeAnalysisVersion>3.6.0-2.final</CodeStyleLayerCodeAnalysisVersion>
<MicrosoftCodeAnalysisTestingVersion>1.0.1-beta1.20210.2</MicrosoftCodeAnalysisTestingVersion>
<CodeStyleAnalyzerVersion>3.7.0-1.20210.7</CodeStyleAnalyzerVersion>
<CodeStyleAnalyzerVersion>3.7.0-3.20271.4</CodeStyleAnalyzerVersion>
<VisualStudioEditorPackagesVersion>16.4.248</VisualStudioEditorPackagesVersion>
<ILToolsPackageVersion>5.0.0-alpha1.19409.1</ILToolsPackageVersion>
<MicrosoftVisualStudioLanguageServerProtocolPackagesVersion>16.7.29</MicrosoftVisualStudioLanguageServerProtocolPackagesVersion>
......
......@@ -45,6 +45,7 @@ try {
# Verify the state of our generated syntax files
Write-Host "Checking generated compiler files"
Exec-Block { & (Join-Path $PSScriptRoot "generate-compiler-code.ps1") -test -configuration:$configuration }
Exec-Console dotnet "format . --include-generated --include src/Compilers/CSharp/Portable/Generated/ src/Compilers/VisualBasic/Portable/Generated/ src/ExpressionEvaluator/VisualBasic/Source/ResultProvider/Generated/ --check -f"
Write-Host ""
# Verify the state of creating run settings for OptProf
......
......@@ -10,8 +10,8 @@
namespace Microsoft.CodeAnalysis.CSharp
{
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System.Diagnostics.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
public partial class CSharpSyntaxVisitor<TResult>
{
......@@ -3885,11 +3885,11 @@ public static BlockSyntax Block(SyntaxList<AttributeListSyntax> attributeLists,
public static BlockSyntax Block(SyntaxList<AttributeListSyntax> attributeLists, SyntaxList<StatementSyntax> statements)
=> SyntaxFactory.Block(attributeLists, SyntaxFactory.Token(SyntaxKind.OpenBraceToken), statements, SyntaxFactory.Token(SyntaxKind.CloseBraceToken));
#pragma warning disable RS0027
#pragma warning disable RS0027
/// <summary>Creates a new BlockSyntax instance.</summary>
public static BlockSyntax Block(SyntaxList<StatementSyntax> statements = default)
=> SyntaxFactory.Block(default, SyntaxFactory.Token(SyntaxKind.OpenBraceToken), statements, SyntaxFactory.Token(SyntaxKind.CloseBraceToken));
#pragma warning restore RS0027
#pragma warning restore RS0027
/// <summary>Creates a new LocalFunctionStatementSyntax instance.</summary>
public static LocalFunctionStatementSyntax LocalFunctionStatement(SyntaxList<AttributeListSyntax> attributeLists, SyntaxTokenList modifiers, TypeSyntax returnType, SyntaxToken identifier, TypeParameterListSyntax? typeParameterList, ParameterListSyntax parameterList, SyntaxList<TypeParameterConstraintClauseSyntax> constraintClauses, BlockSyntax? body, ArrowExpressionClauseSyntax? expressionBody, SyntaxToken semicolonToken)
......@@ -4092,11 +4092,11 @@ public static GotoStatementSyntax GotoStatement(SyntaxKind kind, SyntaxList<Attr
public static GotoStatementSyntax GotoStatement(SyntaxKind kind, SyntaxList<AttributeListSyntax> attributeLists, SyntaxToken caseOrDefaultKeyword, ExpressionSyntax? expression)
=> SyntaxFactory.GotoStatement(kind, attributeLists, SyntaxFactory.Token(SyntaxKind.GotoKeyword), caseOrDefaultKeyword, expression, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
#pragma warning disable RS0027
#pragma warning disable RS0027
/// <summary>Creates a new GotoStatementSyntax instance.</summary>
public static GotoStatementSyntax GotoStatement(SyntaxKind kind, ExpressionSyntax? expression = default)
=> SyntaxFactory.GotoStatement(kind, default, SyntaxFactory.Token(SyntaxKind.GotoKeyword), default, expression, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
#pragma warning restore RS0027
#pragma warning restore RS0027
/// <summary>Creates a new BreakStatementSyntax instance.</summary>
public static BreakStatementSyntax BreakStatement(SyntaxList<AttributeListSyntax> attributeLists, SyntaxToken breakKeyword, SyntaxToken semicolonToken)
......@@ -4142,11 +4142,11 @@ public static ReturnStatementSyntax ReturnStatement(SyntaxList<AttributeListSynt
public static ReturnStatementSyntax ReturnStatement(SyntaxList<AttributeListSyntax> attributeLists, ExpressionSyntax? expression)
=> SyntaxFactory.ReturnStatement(attributeLists, SyntaxFactory.Token(SyntaxKind.ReturnKeyword), expression, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
#pragma warning disable RS0027
#pragma warning disable RS0027
/// <summary>Creates a new ReturnStatementSyntax instance.</summary>
public static ReturnStatementSyntax ReturnStatement(ExpressionSyntax? expression = default)
=> SyntaxFactory.ReturnStatement(default, SyntaxFactory.Token(SyntaxKind.ReturnKeyword), expression, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
#pragma warning restore RS0027
#pragma warning restore RS0027
/// <summary>Creates a new ThrowStatementSyntax instance.</summary>
public static ThrowStatementSyntax ThrowStatement(SyntaxList<AttributeListSyntax> attributeLists, SyntaxToken throwKeyword, ExpressionSyntax? expression, SyntaxToken semicolonToken)
......@@ -4160,11 +4160,11 @@ public static ThrowStatementSyntax ThrowStatement(SyntaxList<AttributeListSyntax
public static ThrowStatementSyntax ThrowStatement(SyntaxList<AttributeListSyntax> attributeLists, ExpressionSyntax? expression)
=> SyntaxFactory.ThrowStatement(attributeLists, SyntaxFactory.Token(SyntaxKind.ThrowKeyword), expression, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
#pragma warning disable RS0027
#pragma warning disable RS0027
/// <summary>Creates a new ThrowStatementSyntax instance.</summary>
public static ThrowStatementSyntax ThrowStatement(ExpressionSyntax? expression = default)
=> SyntaxFactory.ThrowStatement(default, SyntaxFactory.Token(SyntaxKind.ThrowKeyword), expression, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
#pragma warning restore RS0027
#pragma warning restore RS0027
/// <summary>Creates a new YieldStatementSyntax instance.</summary>
public static YieldStatementSyntax YieldStatement(SyntaxKind kind, SyntaxList<AttributeListSyntax> attributeLists, SyntaxToken yieldKeyword, SyntaxToken returnOrBreakKeyword, ExpressionSyntax? expression, SyntaxToken semicolonToken)
......@@ -4190,11 +4190,11 @@ public static YieldStatementSyntax YieldStatement(SyntaxKind kind, SyntaxList<At
public static YieldStatementSyntax YieldStatement(SyntaxKind kind, SyntaxList<AttributeListSyntax> attributeLists, ExpressionSyntax? expression)
=> SyntaxFactory.YieldStatement(kind, attributeLists, SyntaxFactory.Token(SyntaxKind.YieldKeyword), SyntaxFactory.Token(GetYieldStatementReturnOrBreakKeywordKind(kind)), expression, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
#pragma warning disable RS0027
#pragma warning disable RS0027
/// <summary>Creates a new YieldStatementSyntax instance.</summary>
public static YieldStatementSyntax YieldStatement(SyntaxKind kind, ExpressionSyntax? expression = default)
=> SyntaxFactory.YieldStatement(kind, default, SyntaxFactory.Token(SyntaxKind.YieldKeyword), SyntaxFactory.Token(GetYieldStatementReturnOrBreakKeywordKind(kind)), expression, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
#pragma warning restore RS0027
#pragma warning restore RS0027
private static SyntaxKind GetYieldStatementReturnOrBreakKeywordKind(SyntaxKind kind)
=> kind switch
......@@ -4389,11 +4389,11 @@ public static CheckedStatementSyntax CheckedStatement(SyntaxKind kind, SyntaxLis
public static CheckedStatementSyntax CheckedStatement(SyntaxKind kind, SyntaxList<AttributeListSyntax> attributeLists, BlockSyntax block)
=> SyntaxFactory.CheckedStatement(kind, attributeLists, SyntaxFactory.Token(GetCheckedStatementKeywordKind(kind)), block);
#pragma warning disable RS0027
#pragma warning disable RS0027
/// <summary>Creates a new CheckedStatementSyntax instance.</summary>
public static CheckedStatementSyntax CheckedStatement(SyntaxKind kind, BlockSyntax? block = default)
=> SyntaxFactory.CheckedStatement(kind, default, SyntaxFactory.Token(GetCheckedStatementKeywordKind(kind)), block ?? SyntaxFactory.Block());
#pragma warning restore RS0027
#pragma warning restore RS0027
private static SyntaxKind GetCheckedStatementKeywordKind(SyntaxKind kind)
=> kind switch
......@@ -4415,11 +4415,11 @@ public static UnsafeStatementSyntax UnsafeStatement(SyntaxList<AttributeListSynt
public static UnsafeStatementSyntax UnsafeStatement(SyntaxList<AttributeListSyntax> attributeLists, BlockSyntax block)
=> SyntaxFactory.UnsafeStatement(attributeLists, SyntaxFactory.Token(SyntaxKind.UnsafeKeyword), block);
#pragma warning disable RS0027
#pragma warning disable RS0027
/// <summary>Creates a new UnsafeStatementSyntax instance.</summary>
public static UnsafeStatementSyntax UnsafeStatement(BlockSyntax? block = default)
=> SyntaxFactory.UnsafeStatement(default, SyntaxFactory.Token(SyntaxKind.UnsafeKeyword), block ?? SyntaxFactory.Block());
#pragma warning restore RS0027
#pragma warning restore RS0027
/// <summary>Creates a new LockStatementSyntax instance.</summary>
public static LockStatementSyntax LockStatement(SyntaxList<AttributeListSyntax> attributeLists, SyntaxToken lockKeyword, SyntaxToken openParenToken, ExpressionSyntax expression, SyntaxToken closeParenToken, StatementSyntax statement)
......@@ -4589,11 +4589,11 @@ public static TryStatementSyntax TryStatement(SyntaxList<AttributeListSyntax> at
public static TryStatementSyntax TryStatement(SyntaxList<AttributeListSyntax> attributeLists, BlockSyntax block, SyntaxList<CatchClauseSyntax> catches, FinallyClauseSyntax? @finally)
=> SyntaxFactory.TryStatement(attributeLists, SyntaxFactory.Token(SyntaxKind.TryKeyword), block, catches, @finally);
#pragma warning disable RS0027
#pragma warning disable RS0027
/// <summary>Creates a new TryStatementSyntax instance.</summary>
public static TryStatementSyntax TryStatement(SyntaxList<CatchClauseSyntax> catches = default)
=> SyntaxFactory.TryStatement(default, SyntaxFactory.Token(SyntaxKind.TryKeyword), SyntaxFactory.Block(), catches, default);
#pragma warning restore RS0027
#pragma warning restore RS0027
/// <summary>Creates a new CatchClauseSyntax instance.</summary>
public static CatchClauseSyntax CatchClause(SyntaxToken catchKeyword, CatchDeclarationSyntax? declaration, CatchFilterClauseSyntax? filter, BlockSyntax block)
......@@ -5565,11 +5565,11 @@ public static IncompleteMemberSyntax IncompleteMember(SyntaxList<AttributeListSy
return (IncompleteMemberSyntax)Syntax.InternalSyntax.SyntaxFactory.IncompleteMember(attributeLists.Node.ToGreenList<Syntax.InternalSyntax.AttributeListSyntax>(), modifiers.Node.ToGreenList<Syntax.InternalSyntax.SyntaxToken>(), type == null ? null : (Syntax.InternalSyntax.TypeSyntax)type.Green).CreateRed();
}
#pragma warning disable RS0027
#pragma warning disable RS0027
/// <summary>Creates a new IncompleteMemberSyntax instance.</summary>
public static IncompleteMemberSyntax IncompleteMember(TypeSyntax? type = default)
=> SyntaxFactory.IncompleteMember(default, default(SyntaxTokenList), type);
#pragma warning restore RS0027
#pragma warning restore RS0027
/// <summary>Creates a new SkippedTokensTriviaSyntax instance.</summary>
public static SkippedTokensTriviaSyntax SkippedTokensTrivia(SyntaxTokenList tokens)
......
......@@ -643,7 +643,9 @@ protected override async Task<GeneratedCode> CreateGeneratedCodeAsync(OperationS
var root = newDocument.Root;
var methodDefinition = root.GetAnnotatedNodes<SyntaxNode>(MethodDefinitionAnnotation).First();
#pragma warning disable IDE0007 // Use implicit type (False positive: https://github.com/dotnet/roslyn/issues/44507)
SyntaxNode newMethodDefinition = methodDefinition switch
#pragma warning restore IDE0007 // Use implicit type
{
MethodDeclarationSyntax method => TweakNewLinesInMethod(method),
LocalFunctionStatementSyntax localFunction => TweakNewLinesInMethod(localFunction),
......
......@@ -166,9 +166,24 @@ private void WriteFile()
WriteUsing("System.Diagnostics");
WriteUsing("System.Linq");
WriteUsing("System.Runtime.CompilerServices");
WriteUsing("System.Threading");
WriteUsing("System.Text");
WriteUsing("System.Threading");
WriteUsing("Microsoft.CodeAnalysis.Collections");
if (_targetLang == TargetLanguage.CSharp)
{
WriteUsing("Microsoft.CodeAnalysis.CSharp.Symbols");
WriteUsing("Microsoft.CodeAnalysis.CSharp.Syntax");
}
WriteUsing("Microsoft.CodeAnalysis.Text");
if (_targetLang == TargetLanguage.VB)
{
WriteUsing("Microsoft.CodeAnalysis.VisualBasic.Symbols");
WriteUsing("Microsoft.CodeAnalysis.VisualBasic.Syntax");
}
WriteUsing("Roslyn.Utilities");
Blank();
......@@ -201,18 +216,10 @@ private void WriteStartNamespace()
switch (_targetLang)
{
case TargetLanguage.CSharp:
WriteLine("using Microsoft.CodeAnalysis.Text;");
WriteLine("using Microsoft.CodeAnalysis.CSharp.Symbols;");
WriteLine("using Microsoft.CodeAnalysis.CSharp.Syntax;");
Blank();
WriteLine("namespace Microsoft.CodeAnalysis.CSharp");
Brace();
break;
case TargetLanguage.VB:
WriteLine("Imports Microsoft.CodeAnalysis.Text");
WriteLine("Imports Microsoft.CodeAnalysis.VisualBasic.Symbols");
WriteLine("Imports Microsoft.CodeAnalysis.VisualBasic.Syntax");
Blank();
WriteLine("Namespace Microsoft.CodeAnalysis.VisualBasic");
Indent();
break;
......@@ -242,7 +249,7 @@ private void WriteKinds()
switch (_targetLang)
{
case TargetLanguage.CSharp:
WriteLine("internal enum BoundKind: byte");
WriteLine("internal enum BoundKind : byte");
Brace();
foreach (var node in _tree.Types.OfType<Node>())
WriteLine("{0},", FixKeyword(StripBound(node.Name)));
......@@ -815,7 +822,7 @@ private void WriteField(Field field)
if (IsPropertyOverrides(field))
{
WriteLine("private readonly {0} _{1};", field.Type, field.Name);
WriteLine("public override {0}{1} {2} {{ get {{ return _{2};}} }}", (IsNew(field) ? "new " : ""), field.Type, field.Name);
WriteLine("public override {0}{1} {2} {{ get {{ return _{2}; }} }}", (IsNew(field) ? "new " : ""), field.Type, field.Name);
}
else if (field.Override)
{
......@@ -1023,7 +1030,7 @@ private void WriteVisitor()
case TargetLanguage.CSharp:
Blank();
WriteLine("internal abstract partial class BoundTreeVisitor<A,R>");
WriteLine("internal abstract partial class BoundTreeVisitor<A, R>");
Brace();
Blank();
......@@ -1034,7 +1041,7 @@ private void WriteVisitor()
Brace();
foreach (var node in _tree.Types.OfType<Node>())
{
WriteLine("case BoundKind.{0}: ", FixKeyword(StripBound(node.Name)));
WriteLine("case BoundKind.{0}:", FixKeyword(StripBound(node.Name)));
Indent();
WriteLine("return Visit{0}(({1})node, arg);", StripBound(node.Name), node.Name);
Outdent();
......@@ -1046,7 +1053,7 @@ private void WriteVisitor()
Unbrace(); // end class
Blank();
WriteLine("internal abstract partial class BoundTreeVisitor<A,R>");
WriteLine("internal abstract partial class BoundTreeVisitor<A, R>");
Brace();
foreach (var node in _tree.Types.OfType<Node>())
{
......@@ -1066,7 +1073,7 @@ private void WriteVisitor()
case TargetLanguage.VB:
Blank();
WriteLine("Friend MustInherit Partial Class BoundTreeVisitor(Of A,R)");
WriteLine("Friend MustInherit Partial Class BoundTreeVisitor(Of A, R)");
Indent();
Blank();
......@@ -1077,7 +1084,7 @@ private void WriteVisitor()
Indent();
foreach (var node in _tree.Types.OfType<Node>())
{
WriteLine("Case BoundKind.{0}: ", FixKeyword(StripBound(node.Name)));
WriteLine("Case BoundKind.{0} :", FixKeyword(StripBound(node.Name)));
Indent();
WriteLine("Return Visit{0}(CType(node, {1}), arg)", StripBound(node.Name), node.Name);
Outdent();
......@@ -1093,7 +1100,7 @@ private void WriteVisitor()
WriteLine("End Class");
Blank();
WriteLine("Friend MustInherit Partial Class BoundTreeVisitor(Of A,R)");
WriteLine("Friend MustInherit Partial Class BoundTreeVisitor(Of A, R)");
Indent();
foreach (var node in _tree.Types.OfType<Node>())
{
......@@ -1134,7 +1141,7 @@ private void WriteWalker()
{
case TargetLanguage.CSharp:
Blank();
WriteLine("internal abstract partial class BoundTreeWalker: BoundTreeVisitor");
WriteLine("internal abstract partial class BoundTreeWalker : BoundTreeVisitor");
Brace();
foreach (var node in _tree.Types.OfType<Node>())
{
......@@ -1283,7 +1290,7 @@ private void WriteTreeDumperNodeProducer()
{
Field field = allFields[i];
if (IsDerivedType("BoundNode", field.Type))
Write("New TreeDumperNode(\"{0}\", Nothing, new TreeDumperNode() {{ Visit(node.{1}, Nothing) }})", ToCamelCase(field.Name), field.Name);
Write("New TreeDumperNode(\"{0}\", Nothing, new TreeDumperNode() {{Visit(node.{1}, Nothing)}})", ToCamelCase(field.Name), field.Name);
else if (IsListOfDerived("BoundNode", field.Type))
Write("New TreeDumperNode(\"{0}\", Nothing, From x In node.{1} Select Visit(x, Nothing))", ToCamelCase(field.Name), field.Name);
else
......
......@@ -75,6 +75,12 @@ protected void WriteLine(string msg)
_needIndent = true; //need an indent after each line break
}
protected void WriteLineWithoutIndent(string msg)
{
_writer.WriteLine(msg);
_needIndent = true; //need an indent after each line break
}
private void WriteIndentIfNeeded()
{
if (_needIndent)
......
......@@ -67,8 +67,8 @@ private void WriteMain()
WriteFileHeader();
WriteLine("namespace Microsoft.CodeAnalysis.CSharp");
OpenBlock();
WriteLine("using Microsoft.CodeAnalysis.CSharp.Syntax;");
WriteLine("using System.Diagnostics.CodeAnalysis;");
WriteLine("using Microsoft.CodeAnalysis.CSharp.Syntax;");
this.WriteRedVisitors();
this.WriteRedRewriter();
this.WriteRedFactories();
......@@ -639,7 +639,7 @@ private void WriteGreenFactory(Node nd, bool withSyntaxFactoryContext = false)
}
// validate parameters
WriteLine("#if DEBUG");
WriteLineWithoutIndent("#if DEBUG");
foreach (var field in nodeFields)
{
var pname = CamelCase(field.Name);
......@@ -687,7 +687,7 @@ private void WriteGreenFactory(Node nd, bool withSyntaxFactoryContext = false)
}
}
WriteLine("#endif");
WriteLineWithoutIndent("#endif");
if (nd.Name != "SkippedTokensTriviaSyntax" &&
nd.Name != "DocumentationCommentTriviaSyntax" &&
......@@ -1787,7 +1787,7 @@ private void WriteRedMinimalFactory(Node nd, bool withStringNames = false)
if (hasOptional && hasAttributeOrModifiersList)
{
WriteLine("#pragma warning disable RS0027");
WriteLineWithoutIndent("#pragma warning disable RS0027");
}
WriteComment($"<summary>Creates a new {nd.Name} instance.</summary>");
......@@ -1846,7 +1846,7 @@ private void WriteRedMinimalFactory(Node nd, bool withStringNames = false)
if (hasOptional && hasAttributeOrModifiersList)
{
WriteLine("#pragma warning restore RS0027");
WriteLineWithoutIndent("#pragma warning restore RS0027");
}
}
......
......@@ -319,8 +319,8 @@ Friend Class GreenNodeWriter
_writer.WriteLine(" Return Me.{0}", ChildVarName(children(i)))
Next
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Debug.Assert(false, ""child index out of range"")")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine(" Debug.Assert(false, ""child index out of range"")")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine(" End Select")
Else
_writer.WriteLine(" If i = 0 Then")
......@@ -376,7 +376,7 @@ Friend Class GreenNodeWriter
End If
_writer.WriteLine(" Friend Sub New(reader as ObjectReader)")
_writer.WriteLine(" MyBase.New(reader)")
_writer.WriteLine(" MyBase.New(reader)")
If Not nodeStructure.Abstract Then
Dim allChildren = GetAllChildrenOfStructure(nodeStructure)
......@@ -387,20 +387,20 @@ Friend Class GreenNodeWriter
End If
For Each child In nodeStructure.Children
_writer.WriteLine(" Dim {0} = DirectCast(reader.ReadValue(), {1})", ChildVarName(child), ChildFieldTypeRef(child, isGreen:=True))
_writer.WriteLine(" If {0} isnot Nothing ", ChildVarName(child))
_writer.WriteLine(" AdjustFlagsAndWidth({0})", ChildVarName(child))
_writer.WriteLine(" Me.{0} = {0}", ChildVarName(child))
_writer.WriteLine(" End If")
_writer.WriteLine(" Dim {0} = DirectCast(reader.ReadValue(), {1})", ChildVarName(child), ChildFieldTypeRef(child, isGreen:=True))
_writer.WriteLine(" If {0} isnot Nothing", ChildVarName(child))
_writer.WriteLine(" AdjustFlagsAndWidth({0})", ChildVarName(child))
_writer.WriteLine(" Me.{0} = {0}", ChildVarName(child))
_writer.WriteLine(" End If")
Next
For Each field In nodeStructure.Fields
_writer.WriteLine(" Me.{0} = CType(reader.{1}(), {2})", FieldVarName(field), ReaderMethod(FieldTypeRef(field)), FieldTypeRef(field))
_writer.WriteLine(" Me.{0} = CType(reader.{1}(), {2})", FieldVarName(field), ReaderMethod(FieldTypeRef(field)), FieldTypeRef(field))
Next
'TODO: BLUE
If StructureTypeName(nodeStructure) = "DirectiveTriviaSyntax" Then
_writer.WriteLine(" SetFlags(NodeFlags.ContainsDirectives)")
_writer.WriteLine(" SetFlags(NodeFlags.ContainsDirectives)")
End If
_writer.WriteLine(" End Sub")
......@@ -415,14 +415,14 @@ Friend Class GreenNodeWriter
If nodeStructure.Children.Count > 0 OrElse nodeStructure.Fields.Count > 0 Then
_writer.WriteLine()
_writer.WriteLine(" Friend Overrides Sub WriteTo(writer as ObjectWriter)")
_writer.WriteLine(" MyBase.WriteTo(writer)")
_writer.WriteLine(" MyBase.WriteTo(writer)")
For Each child In nodeStructure.Children
_writer.WriteLine(" writer.WriteValue(Me.{0})", ChildVarName(child))
_writer.WriteLine(" writer.WriteValue(Me.{0})", ChildVarName(child))
Next
For Each field In nodeStructure.Fields
_writer.WriteLine(" writer.{0}(Me.{1})", WriterMethod(FieldTypeRef(field)), FieldVarName(field))
_writer.WriteLine(" writer.{0}(Me.{1})", WriterMethod(FieldTypeRef(field)), FieldVarName(field))
Next
_writer.WriteLine(" End Sub")
......@@ -431,7 +431,7 @@ Friend Class GreenNodeWriter
If Not _parseTree.IsAbstract(nodeStructure) Then
_writer.WriteLine()
_writer.WriteLine(" Shared Sub New()")
_writer.WriteLine(" ObjectBinder.RegisterTypeReader(GetType({0}), Function(r) New {0}(r))", StructureTypeName(nodeStructure))
_writer.WriteLine(" ObjectBinder.RegisterTypeReader(GetType({0}), Function(r) New {0}(r))", StructureTypeName(nodeStructure))
_writer.WriteLine(" End Sub")
End If
......@@ -586,7 +586,7 @@ Friend Class GreenNodeWriter
'TODO: BLUE
If StructureTypeName(nodeStructure) = "DirectiveTriviaSyntax" Then
_writer.WriteLine(" SetFlags(NodeFlags.ContainsDirectives)")
_writer.WriteLine(" SetFlags(NodeFlags.ContainsDirectives)")
End If
' Generate End Sub
......@@ -645,9 +645,9 @@ Friend Class GreenNodeWriter
' Is this overridable or an override?
Dim modifiers = ""
'If isOverride Then
' modifiers = "Overrides"
' modifiers = "Overrides "
'ElseIf containingStructure.HasDerivedStructure Then
' modifiers = "Overridable"
' modifiers = "Overridable "
'End If
' Put Shadows modifier on if useful.
......@@ -664,7 +664,7 @@ Friend Class GreenNodeWriter
' XML comment
GenerateXmlComment(_writer, field, 8)
_writer.WriteLine(" Friend {2} ReadOnly Property {0} As {1}", FieldPropertyName(field), FieldTypeRef(field), GetModifiers(field.ContainingStructure, isOverride, field.Name))
_writer.WriteLine(" Friend {2}ReadOnly Property {0} As {1}", FieldPropertyName(field), FieldTypeRef(field), GetModifiers(field.ContainingStructure, isOverride, field.Name))
_writer.WriteLine(" Get")
_writer.WriteLine(" Return Me.{0}", FieldVarName(field))
_writer.WriteLine(" End Get")
......@@ -679,7 +679,7 @@ Friend Class GreenNodeWriter
Dim isToken = KindTypeStructure(child.ChildKind).IsToken
_writer.WriteLine(" Friend {2} ReadOnly Property {0} As {1}", ChildPropertyName(child), ChildPropertyTypeRef(node, child, True), GetModifiers(child.ContainingStructure, False, child.Name))
_writer.WriteLine(" Friend {2}ReadOnly Property {0} As {1}", ChildPropertyName(child), ChildPropertyTypeRef(node, child, True), GetModifiers(child.ContainingStructure, False, child.Name))
_writer.WriteLine(" Get")
If Not child.IsList Then
_writer.WriteLine(" Return Me.{0}", ChildVarName(child))
......@@ -709,7 +709,7 @@ Friend Class GreenNodeWriter
If Not isAbstract Then
' XML comment
GenerateWithXmlComment(_writer, withChild, 8)
_writer.WriteLine(" Friend {2} Function {0}({3} as {4}) As {1}", ChildWithFunctionName(withChild), StructureTypeName(withChild.ContainingStructure), GetModifiers(withChild.ContainingStructure, isOverride, withChild.Name), Ident(UpperFirstCharacter(withChild.Name)), ChildConstructorTypeRef(withChild))
_writer.WriteLine(" Friend {2}Function {0}({3} as {4}) As {1}", ChildWithFunctionName(withChild), StructureTypeName(withChild.ContainingStructure), GetModifiers(withChild.ContainingStructure, isOverride, withChild.Name), Ident(UpperFirstCharacter(withChild.Name)), ChildConstructorTypeRef(withChild))
_writer.WriteLine(" Ensures(Result(Of {0}) IsNot Nothing)", StructureTypeName(withChild.ContainingStructure))
_writer.Write(" return New {0}(", StructureTypeName(nodeStructure))
......
......@@ -463,7 +463,7 @@ Friend Class RedNodeFactoryWriter
_writer.WriteLine()
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Throw new ArgumentException(""{0}"")", paramName)
_writer.WriteLine(" End Select")
_writer.WriteLine(" End Select")
ElseIf childNodeKinds IsNot Nothing Then
If nodeKind Is Nothing AndAlso child.KindForNodeKind IsNot Nothing AndAlso child.KindForNodeKind.Count > 1 Then
......@@ -501,7 +501,7 @@ Friend Class RedNodeFactoryWriter
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Throw new ArgumentException(""{0}"")", paramName)
_writer.WriteLine(" End Select")
_writer.WriteLine(" End Select")
End If
End If
......@@ -521,14 +521,14 @@ Friend Class RedNodeFactoryWriter
_writer.Write(" Case SyntaxKind.{0}", childNodeKind.Name)
If child.IsOptional Then
_writer.WriteLine(":")
_writer.WriteLine(" :")
_writer.Write(" Case SyntaxKind.None")
End If
_writer.WriteLine()
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Throw new ArgumentException(""{0}"")", paramName)
_writer.WriteLine(" End Select")
_writer.WriteLine(" End Select")
ElseIf childNodeKinds IsNot Nothing Then
......@@ -554,14 +554,14 @@ Friend Class RedNodeFactoryWriter
For Each childNodeKind In childNodeKinds
If needsComma Then
_writer.WriteLine(":")
_writer.WriteLine(" :")
End If
_writer.Write(" Case SyntaxKind.{0}", childNodeKind.Name)
needsComma = True
Next
If child.IsOptional Then
_writer.WriteLine(":")
_writer.WriteLine(" :")
_writer.WriteLine(" Case SyntaxKind.None")
End If
......@@ -569,7 +569,7 @@ Friend Class RedNodeFactoryWriter
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Throw new ArgumentException(""{0}"")", paramName)
_writer.WriteLine(" End Select")
_writer.WriteLine(" End Select")
End If
End If
......
......@@ -391,7 +391,7 @@ Friend Class RedNodeWriter
Else
_writer.WriteLine(" Public Shadows Function Add{0}{1}(ParamArray items As {2}()) As {3}", child.Name, nestedList.Name, itemType, nodeStructure.Name)
_writer.WriteLine(" Dim _child = If (Me.{0} IsNot Nothing, Me.{0}, SyntaxFactory.{1}())", child.Name, FactoryName(childStructure))
_writer.WriteLine(" Dim _child = If(Me.{0} IsNot Nothing, Me.{0}, SyntaxFactory.{1}())", child.Name, FactoryName(childStructure))
_writer.WriteLine(" Return Me.With{0}(_child.Add{1}(items))", child.Name, nestedList.Name)
_writer.WriteLine(" End Function")
_writer.WriteLine()
......@@ -504,7 +504,7 @@ Friend Class RedNodeWriter
Else
If child.IsOptional Then
' optional normal child.
_writer.Write(", if({0} IsNot Nothing ", ChildParamName(child))
_writer.Write(", if({0} IsNot Nothing", ChildParamName(child))
End If
' non-optional normal child.
......@@ -512,7 +512,7 @@ Friend Class RedNodeWriter
If child.IsOptional Then
' optional normal child.
_writer.Write(", Nothing) ")
_writer.Write(", Nothing)")
End If
End If
Next
......@@ -553,9 +553,9 @@ Friend Class RedNodeWriter
Dim modifiers = ""
If isOverride Then
modifiers = "Overrides"
modifiers = "Overrides "
ElseIf containingStructure.HasDerivedStructure Then
modifiers = "Overridable"
modifiers = "Overridable "
End If
' Put Shadows modifier on if useful.
......@@ -564,6 +564,7 @@ Friend Class RedNodeWriter
If (name = "Equals" OrElse name = "GetType") Then ' OrElse _parseTree.NodeKinds.ContainsKey(name) OrElse _parseTree.NodeStructures.ContainsKey(name)) Then
modifiers = "Shadows " + modifiers
End If
Return modifiers
End Function
......@@ -572,7 +573,7 @@ Friend Class RedNodeWriter
' XML comment
GenerateXmlComment(_writer, field, 8)
_writer.WriteLine(" Public {2} ReadOnly Property {0} As {1}", FieldPropertyName(field), FieldTypeRef(field), GetModifiers(field.ContainingStructure, False, field.Name))
_writer.WriteLine(" Public {2}ReadOnly Property {0} As {1}", FieldPropertyName(field), FieldTypeRef(field), GetModifiers(field.ContainingStructure, False, field.Name))
_writer.WriteLine(" Get")
_writer.WriteLine(" Return DirectCast(Green, Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.{0}).{1}", TypeName, FieldPropertyName(field))
_writer.WriteLine(" End Get")
......@@ -596,30 +597,30 @@ Friend Class RedNodeWriter
_writer.WriteLine(" End Property")
_writer.WriteLine("")
_writer.WriteLine(" Friend {0} Function Get{1}Core() As {2}", GetModifiers(child.ContainingStructure, isOverride, child.Name), child.Name, ChildPropertyTypeRef(nodeStructure, child, denyOverride:=True))
Me.GenerateNodeChildPropertyRedAccessLogic(nodeStructure, child, childIndex, isOverride)
_writer.WriteLine(" Friend {0}Function Get{1}Core() As {2}", GetModifiers(child.ContainingStructure, isOverride, child.Name), child.Name, ChildPropertyTypeRef(nodeStructure, child, denyOverride:=True))
Me.GenerateNodeChildPropertyRedAccessLogic(nodeStructure, child, childIndex, isOverride, extraIndent:="")
_writer.WriteLine(" End Function")
_writer.WriteLine()
ElseIf isOverride Then
_writer.WriteLine(" Public {0} ReadOnly Property {1} As {2}", If(isOverride, "Shadows", ""), ChildPropertyName(child), ChildPropertyTypeRef(nodeStructure, child))
_writer.WriteLine(" Public {0}ReadOnly Property {1} As {2}", If(isOverride, "Shadows ", ""), ChildPropertyName(child), ChildPropertyTypeRef(nodeStructure, child))
_writer.WriteLine(" Get")
Me.GenerateNodeChildPropertyRedAccessLogic(nodeStructure, child, childIndex, isOverride)
Me.GenerateNodeChildPropertyRedAccessLogic(nodeStructure, child, childIndex, isOverride, extraIndent:=" ")
_writer.WriteLine(" End Get")
_writer.WriteLine(" End Property")
_writer.WriteLine("")
_writer.WriteLine(" Friend {0} Function Get{1}Core() As {2}", GetModifiers(child.ContainingStructure, isOverride, child.Name), child.Name, ChildPropertyTypeRef(nodeStructure, child, denyOverride:=True))
_writer.WriteLine(" Friend {0}Function Get{1}Core() As {2}", GetModifiers(child.ContainingStructure, isOverride, child.Name), child.Name, ChildPropertyTypeRef(nodeStructure, child, denyOverride:=True))
_writer.WriteLine(" Return Me.{0}", ChildPropertyName(child), ChildPropertyTypeRef(nodeStructure, child))
_writer.WriteLine(" End Function")
_writer.WriteLine()
Else
_writer.WriteLine(" Public {0} ReadOnly Property {1} As {2}", GetModifiers(child.ContainingStructure, isOverride, child.Name), ChildPropertyName(child), ChildPropertyTypeRef(nodeStructure, child))
_writer.WriteLine(" Public {0}ReadOnly Property {1} As {2}", GetModifiers(child.ContainingStructure, isOverride, child.Name), ChildPropertyName(child), ChildPropertyTypeRef(nodeStructure, child))
_writer.WriteLine(" Get")
Me.GenerateNodeChildPropertyRedAccessLogic(nodeStructure, child, childIndex, isOverride)
Me.GenerateNodeChildPropertyRedAccessLogic(nodeStructure, child, childIndex, isOverride, extraIndent:=" ")
_writer.WriteLine(" End Get")
_writer.WriteLine(" End Property")
_writer.WriteLine("")
......@@ -627,47 +628,47 @@ Friend Class RedNodeWriter
End If
End Sub
Private Sub GenerateNodeChildPropertyRedAccessLogic(nodeStructure As ParseNodeStructure, child As ParseNodeChild, childIndex As Integer, isOverride As Boolean)
Private Sub GenerateNodeChildPropertyRedAccessLogic(nodeStructure As ParseNodeStructure, child As ParseNodeChild, childIndex As Integer, isOverride As Boolean, extraIndent As String)
If KindTypeStructure(child.ChildKind).IsToken Then
If child.IsList Then
_writer.WriteLine(" Dim slot = DirectCast(Me.Green, Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.{0}).{1}", StructureTypeName(nodeStructure), ChildVarName(child))
_writer.WriteLine(" If slot IsNot Nothing")
_writer.WriteLine(" return new SyntaxTokenList(Me, slot, {0}, {1})", Me.GetChildPosition(childIndex), Me.GetChildIndex(childIndex))
_writer.WriteLine(" End If")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine($" {extraIndent}Dim slot = DirectCast(Me.Green, Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.{{0}}).{{1}}", StructureTypeName(nodeStructure), ChildVarName(child))
_writer.WriteLine($" {extraIndent}If slot IsNot Nothing")
_writer.WriteLine($" {extraIndent} return new SyntaxTokenList(Me, slot, {{0}}, {{1}})", Me.GetChildPosition(childIndex), Me.GetChildIndex(childIndex))
_writer.WriteLine($" {extraIndent}End If")
_writer.WriteLine($" {extraIndent}Return Nothing")
Else
If child.IsOptional Then
_writer.WriteLine(" Dim slot = DirectCast(Me.Green, Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.{0}).{1}", StructureTypeName(nodeStructure), ChildVarName(child))
_writer.WriteLine(" If slot IsNot Nothing")
_writer.WriteLine(" return new SyntaxToken(Me, slot, {0}, {1})", Me.GetChildPosition(childIndex), Me.GetChildIndex(childIndex))
_writer.WriteLine(" End If")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine($" {extraIndent}Dim slot = DirectCast(Me.Green, Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.{{0}}).{{1}}", StructureTypeName(nodeStructure), ChildVarName(child))
_writer.WriteLine($" {extraIndent}If slot IsNot Nothing")
_writer.WriteLine($" {extraIndent} return new SyntaxToken(Me, slot, {{0}}, {{1}})", Me.GetChildPosition(childIndex), Me.GetChildIndex(childIndex))
_writer.WriteLine($" {extraIndent}End If")
_writer.WriteLine($" {extraIndent}Return Nothing")
Else
_writer.WriteLine(" return new SyntaxToken(Me, DirectCast(Me.Green, Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.{0}).{1}, {2}, {3})", StructureTypeName(nodeStructure), ChildVarName(child), Me.GetChildPosition(childIndex), Me.GetChildIndex(childIndex))
_writer.WriteLine($" {extraIndent}return new SyntaxToken(Me, DirectCast(Me.Green, Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.{{0}}).{{1}}, {{2}}, {{3}})", StructureTypeName(nodeStructure), ChildVarName(child), Me.GetChildPosition(childIndex), Me.GetChildIndex(childIndex))
End If
End If
ElseIf IsListStructureType(child) Then
If childIndex = 0 Then
_writer.WriteLine(" Dim listNode = GetRedAtZero({0})", ChildVarName(child))
_writer.WriteLine($" {extraIndent}Dim listNode = GetRedAtZero({{0}})", ChildVarName(child))
Else
_writer.WriteLine(" Dim listNode = GetRed({0}, {1})", ChildVarName(child), childIndex)
_writer.WriteLine($" {extraIndent}Dim listNode = GetRed({{0}}, {{1}})", ChildVarName(child), childIndex)
End If
_writer.WriteLine(" Return new {0}(listNode)", ChildPropertyTypeRef(nodeStructure, child, False))
_writer.WriteLine($" {extraIndent}Return new {{0}}(listNode)", ChildPropertyTypeRef(nodeStructure, child, False))
Else
Dim type = ChildPropertyTypeRef(nodeStructure, child)
Dim baseType = ChildPropertyTypeRef(nodeStructure, child, denyOverride:=True)
If childIndex = 0 Then
If type = baseType Then
_writer.WriteLine(" Return GetRedAtZero({0})", ChildVarName(child))
_writer.WriteLine($" {extraIndent}Return GetRedAtZero({{0}})", ChildVarName(child))
Else
_writer.WriteLine(" Return DirectCast(GetRedAtZero({0}), {1})", ChildVarName(child), type)
_writer.WriteLine($" {extraIndent}Return DirectCast(GetRedAtZero({{0}}), {{1}})", ChildVarName(child), type)
End If
Else
If type = baseType Then
_writer.WriteLine(" Return GetRed({0}, {1})", ChildVarName(child), childIndex)
_writer.WriteLine($" {extraIndent}Return GetRed({{0}}, {{1}})", ChildVarName(child), childIndex)
Else
_writer.WriteLine(" Return DirectCast(GetRed({0}, {1}), {2})", ChildVarName(child), childIndex, type)
_writer.WriteLine($" {extraIndent}Return DirectCast(GetRed({{0}}, {{1}}), {{2}})", ChildVarName(child), childIndex, type)
End If
End If
......@@ -767,7 +768,7 @@ Friend Class RedNodeWriter
' XML comment
GenerateXmlComment(_writer, child, 8)
_writer.WriteLine(" Public {2} ReadOnly Property {0} As {1}", ChildPropertyName(child), ChildPropertyTypeRef(node, child), GetModifiers(child.ContainingStructure, isOverride, child.Name))
_writer.WriteLine(" Public {2}ReadOnly Property {0} As {1}", ChildPropertyName(child), ChildPropertyTypeRef(node, child), GetModifiers(child.ContainingStructure, isOverride, child.Name))
_writer.WriteLine(" Get")
If childIndex = 0 Then
_writer.WriteLine(" Dim listNode = GetRedAtZero({0})", ChildVarName(child), childIndex)
......@@ -935,8 +936,8 @@ Friend Class RedNodeWriter
End If
Next
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Debug.Assert(false, ""child index out of range"")")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine(" Debug.Assert(false, ""child index out of range"")")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine(" End Select")
Else
_writer.WriteLine(" If i = 0 Then")
......@@ -997,14 +998,14 @@ Friend Class RedNodeWriter
Next
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine(" End Select")
ElseIf Not KindTypeStructure(children(0).ChildKind).IsToken Then
_writer.WriteLine(" If i = 0 Then")
Dim child = children(0)
If child.IsList Then
_writer.WriteLine(" Return GetRedAtZero({0})", ChildVarName(child))
_writer.WriteLine(" Return GetRedAtZero({0})", ChildVarName(child))
Else
_writer.WriteLine(" Return Me.{0}", ChildPropertyName(child))
End If
......@@ -1014,7 +1015,7 @@ Friend Class RedNodeWriter
_writer.WriteLine(" End If")
Else
_writer.WriteLine(" Return Nothing")
_writer.WriteLine(" Return Nothing")
End If
_writer.WriteLine(" End Function")
......@@ -1048,7 +1049,7 @@ Friend Class RedNodeWriter
End If
Next
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine(" Return Nothing")
_writer.WriteLine(" End Select")
Else
_writer.WriteLine(" If i = 0 Then")
......@@ -1113,7 +1114,7 @@ Friend Class RedNodeWriter
If(withResult, "Function", "Sub"),
If(withResult, " As TResult", ""))
_writer.WriteLine(" {0}Me.DefaultVisit(node){1}", If(withResult, "Return ", ""), If(withResult, "", ": Return"))
_writer.WriteLine(" {0}Me.DefaultVisit(node){1}", If(withResult, "Return ", ""), If(withResult, "", " : Return"))
_writer.WriteLine(" End {0}", If(withResult, "Function", "Sub"))
End Sub
......
......@@ -87,19 +87,19 @@ Public Class SyntaxFactsWriter
End If
If tokenText <> Nothing Then
_writer.WriteLine(" Case SyntaxKind.{0}", kind.Name)
_writer.WriteLine(" Case SyntaxKind.{0}", kind.Name)
If tokenText.Contains("vbCrLf") Then
_writer.WriteLine(" Return {0}", tokenText)
_writer.WriteLine(" Return {0}", tokenText)
Else
_writer.WriteLine(" Return ""{0}""", tokenText)
_writer.WriteLine(" Return ""{0}""", tokenText)
End If
End If
Next
Next
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Return String.Empty")
_writer.WriteLine(" Case Else")
_writer.WriteLine(" Return String.Empty")
_writer.WriteLine(" End Select")
_writer.WriteLine(" End Function")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册