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

Added fixit for global namespace lookup

This commit is contained in:
Brian Fiete 2020-03-21 13:09:42 -07:00
parent 6412a27f97
commit 5d4d21cce1
3 changed files with 33 additions and 5 deletions

View file

@ -2979,6 +2979,16 @@ void BfAutoComplete::FixitAddMethod(BfTypeInstance* typeInst, const StringImpl&
} }
} }
void BfAutoComplete::FixitAddNamespace(BfAstNode* refNode, const StringImpl& namespaceStr)
{
auto parserData = refNode->GetParserData();
BfUsingFinder usingFinder;
usingFinder.VisitMembers(refNode->GetSourceData()->mRootNode);
AddEntry(AutoCompleteEntry("fixit", StrFormat("using %s;\tusing|%s|%d||using %s;", namespaceStr.c_str(), parserData->mFileName.c_str(),
usingFinder.mLastIdx, namespaceStr.c_str()).c_str()));
}
void BfAutoComplete::FixitCheckNamespace(BfTypeDef* activeTypeDef, BfTypeReference* typeRef, BfTokenNode* nextDotToken) void BfAutoComplete::FixitCheckNamespace(BfTypeDef* activeTypeDef, BfTypeReference* typeRef, BfTokenNode* nextDotToken)
{ {
if (nextDotToken == NULL) if (nextDotToken == NULL)
@ -3001,9 +3011,6 @@ void BfAutoComplete::FixitCheckNamespace(BfTypeDef* activeTypeDef, BfTypeReferen
} }
else else
{ {
BfUsingFinder usingFinder; FixitAddNamespace(typeRef, namespaceString);
usingFinder.VisitMembers(typeRef->GetSourceData()->mRootNode);
mCompiler->mResolvePassData->mAutoComplete->AddEntry(AutoCompleteEntry("fixit", StrFormat("using %s;\tusing|%s|%d||using %s;", namespaceString.c_str(), parserData->mFileName.c_str(),
usingFinder.mLastIdx, namespaceString.c_str()).c_str()));
} }
} }

View file

@ -250,10 +250,11 @@ public:
void CheckEmptyStart(BfAstNode* prevNode, BfType* type); void CheckEmptyStart(BfAstNode* prevNode, BfType* type);
bool CheckFixit(BfAstNode* node); bool CheckFixit(BfAstNode* node);
void CheckInterfaceFixit(BfTypeInstance* typeInstance, BfAstNode* node); void CheckInterfaceFixit(BfTypeInstance* typeInstance, BfAstNode* node);
void FixitAddMember(BfTypeInstance* typeInst, BfType* fieldType, const StringImpl& fieldName, bool isStatic, BfTypeInstance* referencedFrom); void FixitAddMember(BfTypeInstance* typeInst, BfType* fieldType, const StringImpl& fieldName, bool isStatic, BfTypeInstance* referencedFrom);
void FixitAddCase(BfTypeInstance * typeInst, const StringImpl & caseName, const BfTypeVector & fieldTypes); void FixitAddCase(BfTypeInstance * typeInst, const StringImpl & caseName, const BfTypeVector & fieldTypes);
void FixitAddMethod(BfTypeInstance* typeInst, const StringImpl& methodName, BfType* returnType, const BfTypeVector& paramTypes, bool wantStatic); void FixitAddMethod(BfTypeInstance* typeInst, const StringImpl& methodName, BfType* returnType, const BfTypeVector& paramTypes, bool wantStatic);
void FixitAddNamespace(BfAstNode* refNode, const StringImpl& namespacStr);
void FixitCheckNamespace(BfTypeDef* activeTypeDef, BfTypeReference* typeRef, BfTokenNode* nextDotToken); void FixitCheckNamespace(BfTypeDef* activeTypeDef, BfTypeReference* typeRef, BfTokenNode* nextDotToken);
}; };

View file

@ -3189,6 +3189,26 @@ void BfExprEvaluator::Visit(BfIdentifierNode* identifierNode)
autoComplete->FixitAddMember(mModule->mCurTypeInstance, fieldType, identifierNode->ToString(), true, mModule->mCurTypeInstance); autoComplete->FixitAddMember(mModule->mCurTypeInstance, fieldType, identifierNode->ToString(), true, mModule->mCurTypeInstance);
if (!mModule->mCurMethodInstance->mMethodDef->mIsStatic) if (!mModule->mCurMethodInstance->mMethodDef->mIsStatic)
autoComplete->FixitAddMember(mModule->mCurTypeInstance, fieldType, identifierNode->ToString(), false, mModule->mCurTypeInstance); autoComplete->FixitAddMember(mModule->mCurTypeInstance, fieldType, identifierNode->ToString(), false, mModule->mCurTypeInstance);
for (auto typeDef : mModule->mSystem->mTypeDefs)
{
if (!typeDef->mIsCombinedPartial)
continue;
if (!typeDef->IsGlobalsContainer())
continue;
typeDef->PopulateMemberSets();
String findName = identifierNode->ToString();
BfMemberSetEntry* memberSetEntry;
if ((typeDef->mMethodSet.TryGetWith(findName, &memberSetEntry)) ||
(typeDef->mFieldSet.TryGetWith(findName, &memberSetEntry)) ||
(typeDef->mPropertySet.TryGetWith(findName, &memberSetEntry)))
{
if (mModule->GetActiveTypeDef()->mProject->ContainsReference(typeDef->mProject))
autoComplete->FixitAddNamespace(identifierNode, typeDef->mNamespace.ToString());
}
}
} }
} }