1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00

Formatting fixes for initializer expressions

This commit is contained in:
Brian Fiete 2020-09-30 07:39:39 -07:00
parent 5746214198
commit c58e30e005
3 changed files with 112 additions and 37 deletions

View file

@ -758,10 +758,13 @@ void BfPrinter::Visit(BfAstNode* bfAstNode)
if (!isspace((uint8)c))
{
Write("\n");
mQueuedSpaceCount = mCurIndentLevel * 4;
int origLineSpacing = CalcOrigLineSpacing(bfAstNode, NULL);
if (origLineSpacing != -1)
mLastSpaceOffset = mQueuedSpaceCount - origLineSpacing;
mQueuedSpaceCount = mCurIndentLevel * 4;
if (!mNextStateModify.mDoingBlockClose)
{
int origLineSpacing = CalcOrigLineSpacing(bfAstNode, NULL);
if (origLineSpacing != -1)
mLastSpaceOffset = mQueuedSpaceCount - origLineSpacing;
}
break;
}
idx--;
@ -1211,18 +1214,40 @@ void BfPrinter::Visit(BfInitializerExpression* initExpr)
Visit(initExpr->ToBase());
VisitChild(initExpr->mTarget);
ExpectSpace();
VisitChild(initExpr->mOpenBrace);
BlockState blockState;
DoBlockOpen(initExpr->mTarget, initExpr->mOpenBrace, initExpr->mCloseBrace, false, blockState);
for (int i = 0; i < (int)initExpr->mValues.size(); i++)
{
if (i > 0)
{
{
VisitChildNoRef(initExpr->mCommas.GetSafe(i - 1));
ExpectSpace();
if (blockState.mDoInlineBlock)
ExpectSpace();
else
ExpectNewLine();
}
VisitChild(initExpr->mValues[i]);
}
VisitChild(initExpr->mCloseBrace);
DoBlockClose(initExpr->mTarget, initExpr->mOpenBrace, initExpr->mCloseBrace, false, blockState);
// Visit(initExpr->ToBase());
//
// VisitChild(initExpr->mTarget);
// ExpectSpace();
// VisitChild(initExpr->mOpenBrace);
// ExpectIndent();
// for (int i = 0; i < (int)initExpr->mValues.size(); i++)
// {
// if (i > 0)
// {
// VisitChildNoRef(initExpr->mCommas.GetSafe(i - 1));
// ExpectSpace();
// }
// VisitChild(initExpr->mValues[i]);
// }
// ExpectUnindent();
// VisitChild(initExpr->mCloseBrace);
}
void BfPrinter::Visit(BfCollectionInitializerExpression* initExpr)
@ -1230,7 +1255,7 @@ void BfPrinter::Visit(BfCollectionInitializerExpression* initExpr)
Visit(initExpr->ToBase());
VisitChild(initExpr->mOpenBrace);
for (int i = 0; i < (int) initExpr->mValues.size(); i++)
for (int i = 0; i < (int)initExpr->mValues.size(); i++)
{
if (i > 0)
{
@ -2435,15 +2460,14 @@ void BfPrinter::Visit(BfPropertyDeclaration* propertyDeclaration)
if (auto block = BfNodeDynCast<BfBlock>(propertyDeclaration->mDefinitionBlock))
{
bool doInlineBlock = false;
int indentStart = 0;
DoBlockOpen(block, true, &doInlineBlock, &indentStart);
BlockState blockState;
DoBlockOpen(NULL, block->mOpenBrace, block->mCloseBrace, true, blockState);
for (auto method : propertyDeclaration->mMethods)
{
Visit(method);
}
FlushVisitChild();
DoBlockClose(block, true, doInlineBlock, indentStart);
DoBlockClose(NULL, block->mOpenBrace, block->mCloseBrace, true, blockState);
}
else
{
@ -2755,16 +2779,22 @@ void BfPrinter::Visit(BfNamespaceDeclaration* namespaceDeclaration)
VisitChild(namespaceDeclaration->mBlock);
}
void BfPrinter::DoBlockOpen(BfBlock* block, bool queue, bool* outDoInlineBlock, int* outIdentStart)
{
*outIdentStart = mNextStateModify.mWantVirtualIndent;
void BfPrinter::DoBlockOpen(BfAstNode* prevNode, BfTokenNode* blockOpen, BfTokenNode* blockClose, bool queue, BlockState& blockState)
{
blockState.mLastSpaceOffset = mLastSpaceOffset;
blockState.mIndentStart = mNextStateModify.mWantVirtualIndent;
bool doInlineBlock = true;
if (block->mCloseBrace != NULL)
if (blockClose != NULL)
{
auto blockSrc = block->GetSourceData();
int srcEnd = block->mCloseBrace->GetSrcEnd();
for (int i = block->mOpenBrace->GetSrcStart(); i < srcEnd; i++)
auto blockSrc = blockOpen->GetSourceData();
int srcEnd = blockClose->GetSrcEnd();
int srcStart = blockOpen->GetSrcStart();
if (prevNode != NULL)
srcStart = prevNode->GetSrcEnd();
for (int i = srcStart; i < srcEnd; i++)
{
if (blockSrc->mSrc[i] == '\n')
doInlineBlock = false;
@ -2775,41 +2805,47 @@ void BfPrinter::DoBlockOpen(BfBlock* block, bool queue, bool* outDoInlineBlock,
{
ExpectNewLine();
mNextStateModify.mDoingBlockOpen = true;
if (prevNode != NULL)
ExpectIndent();
}
else
ExpectSpace();
if (queue)
QueueVisitChild(block->mOpenBrace);
QueueVisitChild(blockOpen);
else
VisitChild(block->mOpenBrace);
VisitChild(blockOpen);
if (!doInlineBlock)
ExpectIndent();
else
ExpectSpace();
*outDoInlineBlock = doInlineBlock;
blockState.mDoInlineBlock = doInlineBlock;
}
void BfPrinter::DoBlockClose(BfBlock* block, bool queue, bool doInlineBlock, int indentStart)
void BfPrinter::DoBlockClose(BfAstNode* prevNode, BfTokenNode* blockOpen, BfTokenNode* blockClose, bool queue, BlockState& blockState)
{
if (!doInlineBlock)
if (!blockState.mDoInlineBlock)
{
ExpectUnindent();
mNextStateModify.mWantVirtualIndent = indentStart;
ExpectUnindent();
mNextStateModify.mDoingBlockClose = true;
}
else
ExpectSpace();
if (queue)
QueueVisitChild(block->mCloseBrace);
QueueVisitChild(blockClose);
else
VisitChild(block->mCloseBrace);
VisitChild(blockClose);
if (!blockState.mDoInlineBlock)
{
mNextStateModify.mWantVirtualIndent = blockState.mIndentStart;
mLastSpaceOffset = blockState.mLastSpaceOffset;
}
}
void BfPrinter::Visit(BfBlock* block)
{
bool doInlineBlock;
int indentStart = 0;
DoBlockOpen(block, false, &doInlineBlock, &indentStart);
BlockState blockState;
DoBlockOpen(NULL, block->mOpenBrace, block->mCloseBrace, false, blockState);
for (auto& childNodeRef : *block)
{
BfAstNode* child = childNodeRef;
@ -2821,7 +2857,7 @@ void BfPrinter::Visit(BfBlock* block)
SetAndRestoreValue<BfAstNode*> prevBlockMember(mCurBlockMember, child);
child->Accept(this);
}
DoBlockClose(block, false, doInlineBlock, indentStart);
DoBlockClose(NULL, block->mOpenBrace, block->mCloseBrace, false, blockState);
ExpectNewLine();
}