@@ -234,60 +234,58 @@ void CodeCompletionResultBuilder::setAssociatedDecl(const Decl *D) {
234234void CodeCompletionResultBuilder::addCallArgument (
235235 Identifier Name, Identifier LocalName, Type Ty, Type ContextTy,
236236 bool IsVarArg, bool IsInOut, bool IsIUO, bool IsAutoClosure,
237- bool UseUnderscoreLabel , bool IsLabeledTrailingClosure , bool HasDefault) {
237+ bool IsLabeledTrailingClosure , bool IsForOperator , bool HasDefault) {
238238 ++CurrentNestingLevel;
239239 using ChunkKind = CodeCompletionString::Chunk::ChunkKind;
240240
241241 addSimpleChunk (ChunkKind::CallArgumentBegin);
242242
243243 if (shouldAnnotateResults ()) {
244- if (!Name.empty () || !LocalName.empty ()) {
245- llvm::SmallString<16 > EscapedKeyword;
246-
247- if (!Name.empty ()) {
248- addChunkWithText (
249- CodeCompletionString::Chunk::ChunkKind::CallArgumentName,
250- escapeKeyword (Name.str (), false , EscapedKeyword));
251-
252- if (!LocalName.empty () && Name != LocalName) {
253- addChunkWithTextNoCopy (ChunkKind::Text, " " );
254- getLastChunk ().setIsAnnotation ();
255- addChunkWithText (
256- ChunkKind::CallArgumentInternalName,
257- escapeKeyword (LocalName.str (), false , EscapedKeyword));
258- getLastChunk ().setIsAnnotation ();
259- }
260- } else {
261- assert (!LocalName.empty ());
262- addChunkWithTextNoCopy (ChunkKind::CallArgumentName, " _" );
263- getLastChunk ().setIsAnnotation ();
244+ llvm::SmallString<16 > EscapedKeyword;
245+ if (!Name.empty ()) {
246+ addChunkWithText (ChunkKind::CallArgumentName,
247+ escapeKeyword (Name.str (), false , EscapedKeyword));
248+ if (!LocalName.empty () && Name != LocalName) {
264249 addChunkWithTextNoCopy (ChunkKind::Text, " " );
265250 getLastChunk ().setIsAnnotation ();
266251 addChunkWithText (ChunkKind::CallArgumentInternalName,
267252 escapeKeyword (LocalName.str (), false , EscapedKeyword));
253+ getLastChunk ().setIsAnnotation ();
268254 }
269255 addChunkWithTextNoCopy (ChunkKind::CallArgumentColon, " : " );
256+ } else if (!LocalName.empty ()) {
257+ addChunkWithTextNoCopy (ChunkKind::CallArgumentName, " _" );
258+ getLastChunk ().setIsAnnotation ();
259+ addChunkWithTextNoCopy (ChunkKind::Text, " " );
260+ getLastChunk ().setIsAnnotation ();
261+ addChunkWithText (ChunkKind::CallArgumentInternalName,
262+ escapeKeyword (LocalName.str (), false , EscapedKeyword));
263+ addChunkWithTextNoCopy (ChunkKind::CallArgumentColon, " : " );
264+ } else if (!IsForOperator) {
265+ addChunkWithTextNoCopy (ChunkKind::CallArgumentName, " _" );
266+ if (!IsLabeledTrailingClosure)
267+ getLastChunk ().setIsAnnotation ();
268+ addChunkWithTextNoCopy (ChunkKind::CallArgumentColon, " : " );
269+ if (!IsLabeledTrailingClosure)
270+ getLastChunk ().setIsAnnotation ();
270271 }
271272 } else {
273+ llvm::SmallString<16 > stash;
274+ ChunkKind nameKind;
275+ StringRef nameStr;
272276 if (!Name.empty ()) {
273- llvm::SmallString<16 > EscapedKeyword;
274- addChunkWithText (CodeCompletionString::Chunk::ChunkKind::CallArgumentName,
275- escapeKeyword (Name.str (), false , EscapedKeyword));
276- addChunkWithTextNoCopy (
277- CodeCompletionString::Chunk::ChunkKind::CallArgumentColon, " : " );
278- } else if (UseUnderscoreLabel) {
279- addChunkWithTextNoCopy (
280- CodeCompletionString::Chunk::ChunkKind::CallArgumentName, " _" );
281- addChunkWithTextNoCopy (
282- CodeCompletionString::Chunk::ChunkKind::CallArgumentColon, " : " );
277+ nameKind = ChunkKind::CallArgumentName;
278+ nameStr = escapeKeyword (Name.str (), false , stash);
279+ } else if (IsLabeledTrailingClosure) {
280+ nameKind = ChunkKind::CallArgumentName;
281+ nameStr = " _" ;
283282 } else if (!LocalName.empty ()) {
284- // Use local (non-API) parameter name if we have nothing else.
285- llvm::SmallString<16 > EscapedKeyword;
286- addChunkWithText (
287- CodeCompletionString::Chunk::ChunkKind::CallArgumentInternalName,
288- escapeKeyword (LocalName.str (), false , EscapedKeyword));
289- addChunkWithTextNoCopy (
290- CodeCompletionString::Chunk::ChunkKind::CallArgumentColon, " : " );
283+ nameKind = ChunkKind::CallArgumentInternalName;
284+ nameStr = escapeKeyword (LocalName.str (), false , stash);
285+ }
286+ if (!nameStr.empty ()) {
287+ addChunkWithText (nameKind, nameStr);
288+ addChunkWithTextNoCopy (ChunkKind::CallArgumentColon, " : " );
291289 }
292290 }
293291
0 commit comments