소스 검색

Added named parameters to autocomplete

Brian Fiete 3 년 전
부모
커밋
a587e6249e
2개의 변경된 파일31개의 추가작업 그리고 4개의 파일을 삭제
  1. 12 1
      IDE/src/ui/SourceEditWidgetContent.bf
  2. 19 3
      IDEHelper/Compiler/BfCompiler.cpp

+ 12 - 1
IDE/src/ui/SourceEditWidgetContent.bf

@@ -3833,6 +3833,17 @@ namespace IDE.ui
 
             bool isEndingChar = (keyChar >= (char8)32) && !keyChar.IsLetterOrDigit && (keyChar != '_') && (keyChar != '~') && (keyChar != '=') && (keyChar != '!') && (keyChar != ':');
 
+			if ((mAutoComplete != null) && (mAutoComplete.mAutoCompleteListWidget != null) && (!mAutoComplete.mAutoCompleteListWidget.mEntryList.IsEmpty))
+			{
+				var entry = mAutoComplete.mAutoCompleteListWidget.mEntryList[mAutoComplete.mAutoCompleteListWidget.mSelectIdx];
+				char8 endC = entry.mEntryDisplay[entry.mEntryDisplay.Length - 1];
+				if ((endC == ':') &&
+					(keyChar == endC))
+				{
+					isEndingChar = true;
+				}
+			}
+
 			if (gApp.mSettings.mEditorSettings.mAutoCompleteRequireTab)
 			{
 				doAutocomplete = isCompletionChar;
@@ -3954,7 +3965,7 @@ namespace IDE.ui
                     else
                         mAutoComplete.CloseListWindow();
 
-                    if ((keyChar == '\t') || (keyChar == '\r')) // Let other chars besides explicit-insert chrars pass through       
+                    if ((keyChar == '\t') || (keyChar == '\r') || (keyChar == ':')) // Let other chars besides explicit-insert chrars pass through       
                     {                        
                         allowChar = false;
                     }

+ 19 - 3
IDEHelper/Compiler/BfCompiler.cpp

@@ -8172,9 +8172,25 @@ void BfCompiler::GenerateAutocompleteInfo()
 		{
 			if (methodMatchInfo->mInstanceList.size() > 0)
 			{
+				if (autoComplete->mIdentifierUsed != NULL)
+				{
+					String filter;
+					if (autoComplete->mIdentifierUsed != NULL)
+						autoComplete->mIdentifierUsed->ToString(filter);
+
+					auto& bestInstance = methodMatchInfo->mInstanceList[methodMatchInfo->mBestIdx];
+					auto bestMethodDef = bestInstance.mMethodDef;
+					for (int paramIdx = 0; paramIdx < bestMethodDef->mParams.mSize; paramIdx++)
+					{
+						if ((paramIdx == 0) && (bestMethodDef->mMethodType == BfMethodType_Extension))
+							continue;
+						autoComplete->AddEntry(AutoCompleteEntry("param", bestMethodDef->mParams[paramIdx]->mName + ":"), filter);
+					}
+				}
+
 				String invokeInfoText;
 				invokeInfoText += StrFormat("%d", methodMatchInfo->mBestIdx);
-				for (int srcPosIdx = 0; srcPosIdx < (int) methodMatchInfo->mSrcPositions.size(); srcPosIdx++)
+				for (int srcPosIdx = 0; srcPosIdx < (int)methodMatchInfo->mSrcPositions.size(); srcPosIdx++)
 					invokeInfoText += StrFormat(" %d", methodMatchInfo->mSrcPositions[srcPosIdx]);
 				autoCompleteResultString += "invokeInfo\t";
 				autoCompleteResultString += invokeInfoText;
@@ -9063,7 +9079,7 @@ String BfCompiler::GetTypeDefMatches(const StringImpl& searchStr, bool includeLo
 			{
 				if (BfNodeIsA<BfPropertyDeclaration>(fieldDef->mFieldDeclaration))
 					continue;
-				
+
 				matchHelper.ClearResults();
 
 				bool hasMatch = false;
@@ -9254,7 +9270,7 @@ String BfCompiler::GetTypeDefMatches(const StringImpl& searchStr, bool includeLo
 			result += "c";
 		else
 			result += "v";
-		
+
 		if (includeLocation)
 		{
 			result += typeName + "\t";