mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-15 23:04:09 +02:00
Added fixit for global namespace lookup
This commit is contained in:
parent
6412a27f97
commit
5d4d21cce1
3 changed files with 33 additions and 5 deletions
|
@ -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)
|
||||
{
|
||||
if (nextDotToken == NULL)
|
||||
|
@ -3001,9 +3011,6 @@ void BfAutoComplete::FixitCheckNamespace(BfTypeDef* activeTypeDef, BfTypeReferen
|
|||
}
|
||||
else
|
||||
{
|
||||
BfUsingFinder usingFinder;
|
||||
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()));
|
||||
FixitAddNamespace(typeRef, namespaceString);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -254,6 +254,7 @@ public:
|
|||
void FixitAddMember(BfTypeInstance* typeInst, BfType* fieldType, const StringImpl& fieldName, bool isStatic, BfTypeInstance* referencedFrom);
|
||||
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 FixitAddNamespace(BfAstNode* refNode, const StringImpl& namespacStr);
|
||||
void FixitCheckNamespace(BfTypeDef* activeTypeDef, BfTypeReference* typeRef, BfTokenNode* nextDotToken);
|
||||
};
|
||||
|
||||
|
|
|
@ -3189,6 +3189,26 @@ void BfExprEvaluator::Visit(BfIdentifierNode* identifierNode)
|
|||
autoComplete->FixitAddMember(mModule->mCurTypeInstance, fieldType, identifierNode->ToString(), true, mModule->mCurTypeInstance);
|
||||
if (!mModule->mCurMethodInstance->mMethodDef->mIsStatic)
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue