📄 csharpoutputvisitor.cs
字号:
case ClassType.Struct:
outputFormatter.BeginBrace(this.prettyPrintOptions.StructBraceStyle);
break;
default:
outputFormatter.BeginBrace(this.prettyPrintOptions.ClassBraceStyle);
break;
}
TypeDeclaration oldType = currentType;
currentType = typeDeclaration;
if (typeDeclaration.Type == ClassType.Enum) {
OutputEnumMembers(typeDeclaration, data);
} else {
nodeTracker.TrackedVisitChildren(typeDeclaration, data);
}
currentType = oldType;
outputFormatter.EndBrace();
return null;
}
public object VisitTemplateDefinition(TemplateDefinition templateDefinition, object data)
{
if (templateDefinition.Bases.Count == 0)
return null;
outputFormatter.Space();
outputFormatter.PrintText("where");
outputFormatter.Space();
outputFormatter.PrintIdentifier(templateDefinition.Name);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Colon);
outputFormatter.Space();
for (int i = 0; i < templateDefinition.Bases.Count; ++i) {
nodeTracker.TrackedVisit(templateDefinition.Bases[i], data);
if (i + 1 < templateDefinition.Bases.Count) {
PrintFormattedComma();
}
}
return null;
}
public object VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, object data)
{
VisitAttributes(delegateDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(delegateDeclaration.Modifier);
outputFormatter.PrintToken(Tokens.Delegate);
outputFormatter.Space();
nodeTracker.TrackedVisit(delegateDeclaration.ReturnType, data);
outputFormatter.Space();
outputFormatter.PrintIdentifier(delegateDeclaration.Name);
PrintTemplates(delegateDeclaration.Templates);
if (prettyPrintOptions.BeforeDelegateDeclarationParentheses) {
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.OpenParenthesis);
AppendCommaSeparatedList(delegateDeclaration.Parameters);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
foreach (TemplateDefinition templateDefinition in delegateDeclaration.Templates) {
nodeTracker.TrackedVisit(templateDefinition, data);
}
outputFormatter.PrintToken(Tokens.Semicolon);
outputFormatter.NewLine();
return null;
}
public object VisitOptionDeclaration(OptionDeclaration optionDeclaration, object data)
{
NotSupported(optionDeclaration);
return null;
}
#endregion
#region Type level
public object VisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data)
{
if (!fieldDeclaration.TypeReference.IsNull) {
VisitAttributes(fieldDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(fieldDeclaration.Modifier);
nodeTracker.TrackedVisit(fieldDeclaration.TypeReference, data);
outputFormatter.Space();
AppendCommaSeparatedList(fieldDeclaration.Fields);
outputFormatter.PrintToken(Tokens.Semicolon);
outputFormatter.NewLine();
} else {
for (int i = 0; i < fieldDeclaration.Fields.Count; i++) {
VisitAttributes(fieldDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(fieldDeclaration.Modifier);
nodeTracker.TrackedVisit(fieldDeclaration.GetTypeForField(i), data);
outputFormatter.Space();
nodeTracker.TrackedVisit(fieldDeclaration.Fields[i], data);
outputFormatter.PrintToken(Tokens.Semicolon);
outputFormatter.NewLine();
}
}
return null;
}
public object VisitVariableDeclaration(VariableDeclaration variableDeclaration, object data)
{
outputFormatter.PrintIdentifier(variableDeclaration.Name);
if (!variableDeclaration.FixedArrayInitialization.IsNull) {
outputFormatter.PrintToken(Tokens.OpenSquareBracket);
nodeTracker.TrackedVisit(variableDeclaration.FixedArrayInitialization, data);
outputFormatter.PrintToken(Tokens.CloseSquareBracket);
}
if (!variableDeclaration.Initializer.IsNull) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Assign);
outputFormatter.Space();
nodeTracker.TrackedVisit(variableDeclaration.Initializer, data);
}
return null;
}
public object VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration, object data)
{
VisitAttributes(propertyDeclaration.Attributes, data);
outputFormatter.Indent();
propertyDeclaration.Modifier &= ~Modifiers.ReadOnly;
OutputModifier(propertyDeclaration.Modifier);
nodeTracker.TrackedVisit(propertyDeclaration.TypeReference, data);
outputFormatter.Space();
if (propertyDeclaration.InterfaceImplementations.Count > 0) {
nodeTracker.TrackedVisit(propertyDeclaration.InterfaceImplementations[0].InterfaceType, data);
outputFormatter.PrintToken(Tokens.Dot);
}
outputFormatter.PrintIdentifier(propertyDeclaration.Name);
outputFormatter.BeginBrace(this.prettyPrintOptions.PropertyBraceStyle);
nodeTracker.TrackedVisit(propertyDeclaration.GetRegion, data);
nodeTracker.TrackedVisit(propertyDeclaration.SetRegion, data);
outputFormatter.EndBrace();
return null;
}
public object VisitPropertyGetRegion(PropertyGetRegion propertyGetRegion, object data)
{
this.VisitAttributes(propertyGetRegion.Attributes, data);
outputFormatter.Indent();
OutputModifier(propertyGetRegion.Modifier);
outputFormatter.PrintText("get");
OutputBlockAllowInline(propertyGetRegion.Block, prettyPrintOptions.PropertyGetBraceStyle);
return null;
}
public object VisitPropertySetRegion(PropertySetRegion propertySetRegion, object data)
{
this.VisitAttributes(propertySetRegion.Attributes, data);
outputFormatter.Indent();
OutputModifier(propertySetRegion.Modifier);
outputFormatter.PrintText("set");
OutputBlockAllowInline(propertySetRegion.Block, prettyPrintOptions.PropertySetBraceStyle);
return null;
}
public object VisitEventDeclaration(EventDeclaration eventDeclaration, object data)
{
VisitAttributes(eventDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(eventDeclaration.Modifier);
outputFormatter.PrintToken(Tokens.Event);
outputFormatter.Space();
nodeTracker.TrackedVisit(eventDeclaration.TypeReference, data);
outputFormatter.Space();
if (eventDeclaration.InterfaceImplementations.Count > 0) {
nodeTracker.TrackedVisit(eventDeclaration.InterfaceImplementations[0].InterfaceType, data);
outputFormatter.PrintToken(Tokens.Dot);
}
outputFormatter.PrintIdentifier(eventDeclaration.Name);
if (!eventDeclaration.Initializer.IsNull) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Assign);
outputFormatter.Space();
nodeTracker.TrackedVisit(eventDeclaration.Initializer, data);
}
if (eventDeclaration.AddRegion.IsNull && eventDeclaration.RemoveRegion.IsNull) {
outputFormatter.PrintToken(Tokens.Semicolon);
outputFormatter.NewLine();
} else {
outputFormatter.BeginBrace(this.prettyPrintOptions.PropertyBraceStyle);
nodeTracker.TrackedVisit(eventDeclaration.AddRegion, data);
nodeTracker.TrackedVisit(eventDeclaration.RemoveRegion, data);
outputFormatter.EndBrace();
}
return null;
}
public object VisitEventAddRegion(EventAddRegion eventAddRegion, object data)
{
VisitAttributes(eventAddRegion.Attributes, data);
outputFormatter.Indent();
outputFormatter.PrintText("add");
OutputBlockAllowInline(eventAddRegion.Block, prettyPrintOptions.EventAddBraceStyle);
return null;
}
public object VisitEventRemoveRegion(EventRemoveRegion eventRemoveRegion, object data)
{
VisitAttributes(eventRemoveRegion.Attributes, data);
outputFormatter.Indent();
outputFormatter.PrintText("remove");
OutputBlockAllowInline(eventRemoveRegion.Block, prettyPrintOptions.EventRemoveBraceStyle);
return null;
}
public object VisitEventRaiseRegion(EventRaiseRegion eventRaiseRegion, object data)
{
// VB.NET only
NotSupported(eventRaiseRegion);
return null;
}
public object VisitParameterDeclarationExpression(ParameterDeclarationExpression parameterDeclarationExpression, object data)
{
VisitAttributes(parameterDeclarationExpression.Attributes, data);
OutputModifier(parameterDeclarationExpression.ParamModifier, parameterDeclarationExpression);
nodeTracker.TrackedVisit(parameterDeclarationExpression.TypeReference, data);
outputFormatter.Space();
outputFormatter.PrintIdentifier(parameterDeclarationExpression.ParameterName);
return null;
}
public object VisitMethodDeclaration(MethodDeclaration methodDeclaration, object data)
{
VisitAttributes(methodDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(methodDeclaration.Modifier);
nodeTracker.TrackedVisit(methodDeclaration.TypeReference, data);
outputFormatter.Space();
if (methodDeclaration.InterfaceImplementations.Count > 0) {
nodeTracker.TrackedVisit(methodDeclaration.InterfaceImplementations[0].InterfaceType, data);
outputFormatter.PrintToken(Tokens.Dot);
}
outputFormatter.PrintIdentifier(methodDeclaration.Name);
PrintMethodDeclaration(methodDeclaration);
return null;
}
void PrintMethodDeclaration(MethodDeclaration methodDeclaration)
{
PrintTemplates(methodDeclaration.Templates);
if (prettyPrintOptions.BeforeMethodDeclarationParentheses) {
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.OpenParenthesis);
AppendCommaSeparatedList(methodDeclaration.Parameters);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
foreach (TemplateDefinition templateDefinition in methodDeclaration.Templates) {
nodeTracker.TrackedVisit(templateDefinition, null);
}
OutputBlock(methodDeclaration.Body, this.prettyPrintOptions.MethodBraceStyle);
}
public object VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, object data)
{
VisitAttributes(operatorDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(operatorDeclaration.Modifier);
if (operatorDeclaration.IsConversionOperator) {
if (operatorDeclaration.ConversionType == ConversionType.Implicit) {
outputFormatter.PrintToken(Tokens.Implicit);
} else {
outputFormatter.PrintToken(Tokens.Explicit);
}
} else {
nodeTracker.TrackedVisit(operatorDeclaration.TypeReference, data);
}
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Operator);
outputFormatter.Space();
if (operatorDeclaration.IsConversionOperator) {
nodeTracker.TrackedVisit(operatorDeclaration.TypeReference, data);
} else {
switch (operatorDeclaration.OverloadableOperator) {
case OverloadableOperatorType.Add:
outputFormatter.PrintToken(Tokens.Plus);
break;
case OverloadableOperatorType.BitNot:
outputFormatter.PrintToken(Tokens.BitwiseComplement);
break;
case OverloadableOperatorType.BitwiseAnd:
outputFormatter.PrintToken(Tokens.BitwiseAnd);
break;
case OverloadableOperatorType.BitwiseOr:
outputFormatter.PrintToken(Tokens.BitwiseOr);
break;
case OverloadableOperatorType.Concat:
outputFormatter.PrintToken(Tokens.Plus);
break;
case OverloadableOperatorType.Decrement:
outputFormatter.PrintToken(Tokens.Decrement);
break;
case OverloadableOperatorType.Divide:
case OverloadableOperatorType.DivideInteger:
outputFormatter.PrintToken(Tokens.Div);
break;
case OverloadableOperatorType.Equality:
outputFormatter.PrintToken(Tokens.Equal);
break;
case OverloadableOperatorType.ExclusiveOr:
outputFormatter.PrintToken(Tokens.Xor);
break;
case OverloadableOperatorType.GreaterThan:
outputFormatter.PrintToken(Tokens.GreaterThan);
break;
case OverloadableOperatorType.GreaterThanOrEqual:
outputFormatter.PrintToken(Tokens.GreaterEqual);
break;
case OverloadableOperatorType.Increment:
outputFormatter.PrintToken(Tokens.Increment);
break;
case OverloadableOperatorType.InEquality:
outputFormatter.PrintToken(Tokens.NotEqual);
break;
case OverloadableOperatorType.IsTrue:
outputFormatter.PrintToken(Tokens.True);
break;
case OverloadableOperatorType.IsFalse:
outputFormatter.PrintToken(Tokens.False);
break;
case OverloadableOperatorType.LessThan:
outputFormatter.PrintToken(Tokens.LessThan);
break;
case OverloadableOperatorType.LessThanOrEqual:
outputFormatter.PrintToken(Tokens.LessEqual);
break;
case OverloadableOperatorType.Like:
outputFormatter.PrintText("Like");
break;
case OverloadableOperatorType.Modulus:
outputFormatter.PrintToken(Tokens.Mod);
break;
case OverloadableOperatorType.Multiply:
outputFormatter.PrintToken(Tokens.Times);
break;
case OverloadableOperatorType.Not:
outputFormatter.PrintToken(Tokens.Not);
break;
case OverloadableOperatorType.Power:
outputFormatter.PrintText("Power");
break;
case OverloadableOperatorType.ShiftLeft:
outputFormatter.PrintToken(Tokens.ShiftLeft);
break;
case OverloadableOperatorType.ShiftRight:
outputFormatter.PrintToken(Tokens.GreaterThan);
outputFormatter.PrintToken(Tokens.GreaterThan);
break;
case OverloadableOperatorType.Subtract:
outputFormatter.PrintToken(Tokens.Minus);
break;
default:
Error(operatorDeclaration, operatorDeclaration.OverloadableOperator.ToString() + " is not supported as overloadable operator");
break;
}
}
PrintMethodDeclaration(operatorDeclaration);
return null;
}
public object VisitInterfaceImplementation(InterfaceImplementation interfaceImplementation, object data)
{
throw new InvalidOperationException();
}
public object VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, object data)
{
VisitAttributes(constructorDeclaration.Attributes, data);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -