diff --git a/IDEHelper/Compiler/BfAutoComplete.cpp b/IDEHelper/Compiler/BfAutoComplete.cpp index 7bb73a4c..ce647aea 100644 --- a/IDEHelper/Compiler/BfAutoComplete.cpp +++ b/IDEHelper/Compiler/BfAutoComplete.cpp @@ -3671,6 +3671,7 @@ void BfAutoComplete::FixitAddNamespace(BfAstNode* refNode, const StringImpl& nam auto parserData = refNode->GetParserData(); BfUsingFinder usingFinder; + usingFinder.mFromIdx = refNode->mSrcStart; usingFinder.VisitMembers(refNode->GetSourceData()->mRootNode); AddEntry(AutoCompleteEntry("fixit", StrFormat("using %s;\t.using|%s|%d||using %s;", namespaceStr.c_str(), parserData->mFileName.c_str(), usingFinder.mLastIdx, namespaceStr.c_str()).c_str())); diff --git a/IDEHelper/Compiler/BfFixits.h b/IDEHelper/Compiler/BfFixits.h index 3f33fa51..cbd47d8d 100644 --- a/IDEHelper/Compiler/BfFixits.h +++ b/IDEHelper/Compiler/BfFixits.h @@ -55,17 +55,34 @@ public: class BfUsingFinder : public BfFixitFinder { public: + int mFromIdx; int mLastIdx; public: BfUsingFinder() { mLastIdx = 0; + mFromIdx = -1; } + virtual void Visit(BfUsingDirective* usingDirective) override { mLastIdx = FindLineStartAfter(usingDirective->GetSourceData(), usingDirective->GetSrcEnd()); } + + virtual void Visit(BfNamespaceDeclaration* namespaceDecl) override + { + if (mFromIdx != -1) + { + if ((mFromIdx < namespaceDecl->mSrcStart) || (mFromIdx >= namespaceDecl->mSrcEnd)) + { + // Not inside + return; + } + } + + BfFixitFinder::Visit(namespaceDecl); + } }; NS_BF_END \ No newline at end of file diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 6c21ca16..3f9e4d2b 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -9931,6 +9931,7 @@ void BfModule::CheckTypeRefFixit(BfAstNode* typeRef, const char* appendName) int insertLoc = 0; BfUsingFinder usingFinder; + usingFinder.mFromIdx = typeRef->mSrcStart; usingFinder.VisitMembers(typeRef->GetSourceData()->mRootNode); for (auto& namespaceStr : fixitNamespaces)