1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 12:32:20 +02:00

Fixit for brace-to-paren for object initializers

This commit is contained in:
Brian Fiete 2020-08-29 11:29:13 -07:00
parent 535045c48a
commit 10421d99ca
4 changed files with 38 additions and 7 deletions

View file

@ -18,6 +18,7 @@
#include "BfUtil.h"
#include "BfDeferEvalChecker.h"
#include "BfVarDeclChecker.h"
#include "BfFixits.h"
#pragma warning(pop)
@ -7420,7 +7421,7 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
paramTypes.Add(resolvedArg.mTypedValue.mType);
}
autoComplete->FixitAddMethod(typeInst, methodName, mExpectingType, paramTypes, wantStatic);
autoComplete->FixitAddMethod(typeInst, methodName, mExpectingType, paramTypes, wantStatic);
}
}
@ -11683,8 +11684,20 @@ void BfExprEvaluator::Visit(BfObjectCreateExpression* objCreateExpr)
autoComplete->CheckTypeRef(objCreateExpr->mTypeRef, false, true);
}
//if (objCreateExpr->mArraySizeSpecifier == NULL)
CheckObjectCreateTypeRef(mExpectingType, objCreateExpr->mNewNode);
if ((autoComplete != NULL) && (objCreateExpr->mOpenToken != NULL) && (objCreateExpr->mCloseToken != NULL) &&
(objCreateExpr->mOpenToken->mToken == BfToken_LBrace) && (autoComplete->CheckFixit(objCreateExpr->mOpenToken)))
{
auto refNode = objCreateExpr->mOpenToken;
BfParserData* parser = refNode->GetSourceData()->ToParserData();
if (parser != NULL)
{
autoComplete->AddEntry(AutoCompleteEntry("fixit", StrFormat("Change initializer braces to parentheses\treformat|%s|%d-1|(\x01|%s|%d-1|)",
parser->mFileName.c_str(), refNode->mSrcStart,
parser->mFileName.c_str(), objCreateExpr->mCloseToken->mSrcStart).c_str()));
}
}
CheckObjectCreateTypeRef(mExpectingType, objCreateExpr->mNewNode);
BfAttributeState attributeState;
attributeState.mTarget = BfAttributeTargets_Alloc;

View file

@ -1613,7 +1613,15 @@ void BfPrinter::Visit(BfObjectCreateExpression* newExpr)
ExpectSpace();
}
VisitChild(newExpr->mOpenToken);
auto _WriteToken = [&](BfAstNode* node, BfToken token)
{
if (node == NULL)
return;
Visit(node);
Write(BfTokenToString(token));
};
_WriteToken(newExpr->mOpenToken, BfToken_LParen);
for (int i = 0; i < (int)newExpr->mArguments.size(); i++)
{
if (i > 0)
@ -1623,7 +1631,7 @@ void BfPrinter::Visit(BfObjectCreateExpression* newExpr)
}
VisitChild(newExpr->mArguments[i]);
}
VisitChild(newExpr->mCloseToken);
_WriteToken(newExpr->mCloseToken, BfToken_RParen);
}
void BfPrinter::Visit(BfBoxExpression* boxExpr)