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:
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)
|
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()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue