Преглед на файлове

Fixed fixit location for usings when file has scoped usings

Brian Fiete преди 3 години
родител
ревизия
1cb91c304b
променени са 3 файла, в които са добавени 19 реда и са изтрити 0 реда
  1. 1 0
      IDEHelper/Compiler/BfAutoComplete.cpp
  2. 17 0
      IDEHelper/Compiler/BfFixits.h
  3. 1 0
      IDEHelper/Compiler/BfModuleTypeUtils.cpp

+ 1 - 0
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()));

+ 17 - 0
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

+ 1 - 0
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)