📄 csharpoutputvisitor.cs
字号:
outputFormatter.Indent();
OutputModifier(constructorDeclaration.Modifier);
if (currentType != null) {
outputFormatter.PrintIdentifier(currentType.Name);
} else {
outputFormatter.PrintIdentifier(constructorDeclaration.Name);
}
if (prettyPrintOptions.BeforeConstructorDeclarationParentheses) {
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.OpenParenthesis);
AppendCommaSeparatedList(constructorDeclaration.Parameters);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
nodeTracker.TrackedVisit(constructorDeclaration.ConstructorInitializer, data);
OutputBlock(constructorDeclaration.Body, this.prettyPrintOptions.ConstructorBraceStyle);
return null;
}
public object VisitConstructorInitializer(ConstructorInitializer constructorInitializer, object data)
{
if (constructorInitializer.IsNull) {
return null;
}
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Colon);
outputFormatter.Space();
if (constructorInitializer.ConstructorInitializerType == ConstructorInitializerType.Base) {
outputFormatter.PrintToken(Tokens.Base);
} else {
outputFormatter.PrintToken(Tokens.This);
}
outputFormatter.PrintToken(Tokens.OpenParenthesis);
AppendCommaSeparatedList(constructorInitializer.Arguments);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
return null;
}
public object VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration, object data)
{
VisitAttributes(indexerDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(indexerDeclaration.Modifier);
nodeTracker.TrackedVisit(indexerDeclaration.TypeReference, data);
outputFormatter.Space();
if (indexerDeclaration.InterfaceImplementations.Count > 0) {
nodeTracker.TrackedVisit(indexerDeclaration.InterfaceImplementations[0].InterfaceType, data);
outputFormatter.PrintToken(Tokens.Dot);
}
outputFormatter.PrintToken(Tokens.This);
outputFormatter.PrintToken(Tokens.OpenSquareBracket);
if (this.prettyPrintOptions.SpacesWithinBrackets) {
outputFormatter.Space();
}
AppendCommaSeparatedList(indexerDeclaration.Parameters);
if (this.prettyPrintOptions.SpacesWithinBrackets) {
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.CloseSquareBracket);
outputFormatter.NewLine();
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.OpenCurlyBrace);
outputFormatter.NewLine();
++outputFormatter.IndentationLevel;
nodeTracker.TrackedVisit(indexerDeclaration.GetRegion, data);
nodeTracker.TrackedVisit(indexerDeclaration.SetRegion, data);
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.CloseCurlyBrace);
outputFormatter.NewLine();
return null;
}
public object VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, object data)
{
VisitAttributes(destructorDeclaration.Attributes, data);
outputFormatter.Indent();
OutputModifier(destructorDeclaration.Modifier);
outputFormatter.PrintToken(Tokens.BitwiseComplement);
if (currentType != null)
outputFormatter.PrintIdentifier(currentType.Name);
else
outputFormatter.PrintIdentifier(destructorDeclaration.Name);
if (prettyPrintOptions.BeforeConstructorDeclarationParentheses) {
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.OpenParenthesis);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
OutputBlock(destructorDeclaration.Body, this.prettyPrintOptions.DestructorBraceStyle);
return null;
}
public object VisitDeclareDeclaration(DeclareDeclaration declareDeclaration, object data)
{
NotSupported(declareDeclaration);
return null;
}
#endregion
#region Statements
void OutputBlock(BlockStatement blockStatement, BraceStyle braceStyle)
{
nodeTracker.BeginNode(blockStatement);
if (blockStatement.IsNull) {
outputFormatter.PrintToken(Tokens.Semicolon);
outputFormatter.NewLine();
} else {
outputFormatter.BeginBrace(braceStyle);
foreach (Statement stmt in blockStatement.Children) {
outputFormatter.Indent();
if (stmt is BlockStatement) {
nodeTracker.TrackedVisit(stmt, BraceStyle.EndOfLine);
} else {
nodeTracker.TrackedVisit(stmt, null);
}
if (!outputFormatter.LastCharacterIsNewLine)
outputFormatter.NewLine();
}
outputFormatter.EndBrace();
}
nodeTracker.EndNode(blockStatement);
}
void OutputBlockAllowInline(BlockStatement blockStatement, BraceStyle braceStyle)
{
OutputBlockAllowInline(blockStatement, braceStyle, true);
}
void OutputBlockAllowInline(BlockStatement blockStatement, BraceStyle braceStyle, bool useNewLine)
{
if (!blockStatement.IsNull
&& (
blockStatement.Children.Count == 0
|| blockStatement.Children.Count == 1
&& (blockStatement.Children[0] is ExpressionStatement
|| blockStatement.Children[0] is ReturnStatement
)))
{
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.OpenCurlyBrace);
outputFormatter.Space();
if (blockStatement.Children.Count != 0) {
bool doIndent = outputFormatter.DoIndent;
bool doNewLine = outputFormatter.DoNewLine;
outputFormatter.DoIndent = false;
outputFormatter.DoNewLine = false;
nodeTracker.TrackedVisit(blockStatement.Children[0], null);
outputFormatter.DoIndent = doIndent;
outputFormatter.DoNewLine = doNewLine;
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.CloseCurlyBrace);
if (useNewLine) {
outputFormatter.NewLine();
}
} else {
OutputBlock(blockStatement, braceStyle);
}
}
public object VisitBlockStatement(BlockStatement blockStatement, object data)
{
if (outputFormatter.TextLength == 0) {
// we are outputting only a code block:
// do not output braces, just the block's contents
foreach (Statement stmt in blockStatement.Children) {
outputFormatter.Indent();
nodeTracker.TrackedVisit(stmt, null);
if (!outputFormatter.LastCharacterIsNewLine)
outputFormatter.NewLine();
}
return null;
}
if (data is BraceStyle)
OutputBlock(blockStatement, (BraceStyle)data);
else
OutputBlock(blockStatement, BraceStyle.NextLine);
return null;
}
public object VisitAddHandlerStatement(AddHandlerStatement addHandlerStatement, object data)
{
nodeTracker.TrackedVisit(addHandlerStatement.EventExpression, data);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.PlusAssign);
outputFormatter.Space();
nodeTracker.TrackedVisit(addHandlerStatement.HandlerExpression, data);
outputFormatter.PrintToken(Tokens.Semicolon);
return null;
}
public object VisitRemoveHandlerStatement(RemoveHandlerStatement removeHandlerStatement, object data)
{
nodeTracker.TrackedVisit(removeHandlerStatement.EventExpression, data);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.MinusAssign);
outputFormatter.Space();
nodeTracker.TrackedVisit(removeHandlerStatement.HandlerExpression, data);
outputFormatter.PrintToken(Tokens.Semicolon);
return null;
}
public object VisitRaiseEventStatement(RaiseEventStatement raiseEventStatement, object data)
{
outputFormatter.PrintToken(Tokens.If);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.OpenParenthesis);
outputFormatter.PrintIdentifier(raiseEventStatement.EventName);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.NotEqual);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Null);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
outputFormatter.BeginBrace(BraceStyle.EndOfLine);
outputFormatter.Indent();
outputFormatter.PrintIdentifier(raiseEventStatement.EventName);
outputFormatter.PrintToken(Tokens.OpenParenthesis);
this.AppendCommaSeparatedList(raiseEventStatement.Arguments);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
outputFormatter.PrintToken(Tokens.Semicolon);
outputFormatter.NewLine();
outputFormatter.EndBrace();
return null;
}
public object VisitEraseStatement(EraseStatement eraseStatement, object data)
{
for (int i = 0; i < eraseStatement.Expressions.Count; i++) {
if (i > 0) {
outputFormatter.NewLine();
outputFormatter.Indent();
}
nodeTracker.TrackedVisit(eraseStatement.Expressions[i], data);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Assign);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Null);
outputFormatter.PrintToken(Tokens.Semicolon);
}
return null;
}
public object VisitErrorStatement(ErrorStatement errorStatement, object data)
{
NotSupported(errorStatement);
return null;
}
public object VisitOnErrorStatement(OnErrorStatement onErrorStatement, object data)
{
NotSupported(onErrorStatement);
return null;
}
public object VisitReDimStatement(ReDimStatement reDimStatement, object data)
{
NotSupported(reDimStatement);
return null;
}
public object VisitExpressionStatement(ExpressionStatement expressionStatement, object data)
{
nodeTracker.TrackedVisit(expressionStatement.Expression, data);
outputFormatter.PrintToken(Tokens.Semicolon);
return null;
}
public object VisitLocalVariableDeclaration(LocalVariableDeclaration localVariableDeclaration, object data)
{
for (int i = 0; i < localVariableDeclaration.Variables.Count; ++i) {
VariableDeclaration v = (VariableDeclaration)localVariableDeclaration.Variables[i];
if (i > 0) {
outputFormatter.NewLine();
outputFormatter.Indent();
}
OutputModifier(localVariableDeclaration.Modifier);
nodeTracker.TrackedVisit(localVariableDeclaration.GetTypeForVariable(i) ?? new TypeReference("object"), data);
outputFormatter.Space();
nodeTracker.TrackedVisit(v, data);
outputFormatter.PrintToken(Tokens.Semicolon);
}
return null;
}
public object VisitEmptyStatement(EmptyStatement emptyStatement, object data)
{
outputFormatter.PrintToken(Tokens.Semicolon);
return null;
}
public object VisitYieldStatement(YieldStatement yieldStatement, object data)
{
Debug.Assert(yieldStatement != null);
Debug.Assert(yieldStatement.Statement != null);
outputFormatter.PrintText("yield");
outputFormatter.Space();
nodeTracker.TrackedVisit(yieldStatement.Statement, data);
return null;
}
public object VisitReturnStatement(ReturnStatement returnStatement, object data)
{
outputFormatter.PrintToken(Tokens.Return);
if (!returnStatement.Expression.IsNull) {
outputFormatter.Space();
nodeTracker.TrackedVisit(returnStatement.Expression, data);
}
outputFormatter.PrintToken(Tokens.Semicolon);
return null;
}
public object VisitIfElseStatement(IfElseStatement ifElseStatement, object data)
{
outputFormatter.PrintToken(Tokens.If);
if (this.prettyPrintOptions.IfParentheses) {
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.OpenParenthesis);
nodeTracker.TrackedVisit(ifElseStatement.Condition, data);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
PrintIfSection(ifElseStatement.TrueStatement);
foreach (ElseIfSection elseIfSection in ifElseStatement.ElseIfSections) {
nodeTracker.TrackedVisit(elseIfSection, data);
}
if (ifElseStatement.HasElseStatements) {
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.Else);
PrintIfSection(ifElseStatement.FalseStatement);
}
return null;
}
void PrintIfSection(List<Statement> statements)
{
if (statements.Count != 1 || !(statements[0] is BlockStatement)) {
outputFormatter.Space();
}
if (statements.Count != 1) {
outputFormatter.PrintToken(Tokens.OpenCurlyBrace);
}
foreach (Statement stmt in statements) {
nodeTracker.TrackedVisit(stmt, null);
}
if (statements.Count != 1) {
outputFormatter.PrintToken(Tokens.CloseCurlyBrace);
}
if (statements.Count != 1 || !(statements[0] is BlockStatement)) {
outputFormatter.Space();
}
}
public object VisitElseIfSection(ElseIfSection elseIfSection, object data)
{
outputFormatter.PrintToken(Tokens.Else);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.If);
if (prettyPrintOptions.IfParentheses) {
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.OpenParenthesis);
nodeTracker.TrackedVisit(elseIfSection.Condition, data);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
WriteEmbeddedStatement(elseIfSection.EmbeddedStatement);
return null;
}
public object VisitForStatement(ForStatement forStatement, object data)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -