diff --git a/include/swift/IDE/CodeCompletion.h b/include/swift/IDE/CodeCompletion.h index 89a1ea7572416..4324cc9e920b8 100644 --- a/include/swift/IDE/CodeCompletion.h +++ b/include/swift/IDE/CodeCompletion.h @@ -182,6 +182,10 @@ class CodeCompletionStringChunk { /// This chunk should not be inserted into the editor buffer. TypeAnnotation, + /// Structured group version of 'TypeAnnotation'. + /// This grouped chunks should not be inserted into the editor buffer. + TypeAnnotationBegin, + /// A brace statement -- left brace and right brace. The preferred /// position to put the cursor after the completion result is inserted /// into the editor buffer is between the braces. @@ -195,7 +199,8 @@ class CodeCompletionStringChunk { return Kind == ChunkKind::CallParameterBegin || Kind == ChunkKind::GenericParameterBegin || Kind == ChunkKind::OptionalBegin || - Kind == ChunkKind::CallParameterTypeBegin; + Kind == ChunkKind::CallParameterTypeBegin || + Kind == ChunkKind::TypeAnnotationBegin; } static bool chunkHasText(ChunkKind Kind) { @@ -594,6 +599,7 @@ class CodeCompletionResult { unsigned SemanticContext : 3; unsigned NotRecommended : 1; unsigned NotRecReason : 3; + unsigned IsSystem : 1; /// The number of bytes to the left of the code completion point that /// should be erased first if this completion string is inserted in the @@ -634,6 +640,7 @@ class CodeCompletionResult { assert(!isOperator() || getOperatorKind() != CodeCompletionOperatorKind::None); AssociatedKind = 0; + IsSystem = 0; } /// Constructs a \c Keyword result. @@ -651,6 +658,7 @@ class CodeCompletionResult { TypeDistance(TypeDistance) { assert(CompletionString); AssociatedKind = static_cast(Kind); + IsSystem = 0; } /// Constructs a \c Literal result. @@ -667,6 +675,7 @@ class CodeCompletionResult { NumBytesToErase(NumBytesToErase), CompletionString(CompletionString), TypeDistance(TypeDistance) { AssociatedKind = static_cast(LiteralKind); + IsSystem = 0; assert(CompletionString); } @@ -694,6 +703,7 @@ class CodeCompletionResult { TypeDistance(TypeDistance) { assert(AssociatedDecl && "should have a decl"); AssociatedKind = unsigned(getCodeCompletionDeclKind(AssociatedDecl)); + IsSystem = getDeclIsSystem(AssociatedDecl); assert(CompletionString); if (isOperator()) KnownOperatorKind = @@ -706,8 +716,8 @@ class CodeCompletionResult { CodeCompletionResult(SemanticContextKind SemanticContext, unsigned NumBytesToErase, CodeCompletionString *CompletionString, - CodeCompletionDeclKind DeclKind, StringRef ModuleName, - bool NotRecommended, + CodeCompletionDeclKind DeclKind, bool IsSystem, + StringRef ModuleName, bool NotRecommended, CodeCompletionResult::NotRecommendedReason NotRecReason, StringRef BriefDocComment, ArrayRef AssociatedUSRs, @@ -718,10 +728,10 @@ class CodeCompletionResult { KnownOperatorKind(unsigned(KnownOperatorKind)), SemanticContext(unsigned(SemanticContext)), NotRecommended(NotRecommended), NotRecReason(NotRecReason), - NumBytesToErase(NumBytesToErase), CompletionString(CompletionString), - ModuleName(ModuleName), BriefDocComment(BriefDocComment), - AssociatedUSRs(AssociatedUSRs), DocWords(DocWords), - TypeDistance(TypeDistance) { + IsSystem(IsSystem), NumBytesToErase(NumBytesToErase), + CompletionString(CompletionString), ModuleName(ModuleName), + BriefDocComment(BriefDocComment), AssociatedUSRs(AssociatedUSRs), + DocWords(DocWords), TypeDistance(TypeDistance) { AssociatedKind = static_cast(DeclKind); assert(CompletionString); assert(!isOperator() || @@ -763,6 +773,10 @@ class CodeCompletionResult { return static_cast(KnownOperatorKind); } + bool isSystem() const { + return static_cast(IsSystem); + } + ExpectedTypeRelation getExpectedTypeRelation() const { return static_cast(TypeDistance); } @@ -810,6 +824,7 @@ class CodeCompletionResult { getCodeCompletionOperatorKind(StringRef name); static CodeCompletionOperatorKind getCodeCompletionOperatorKind(CodeCompletionString *str); + static bool getDeclIsSystem(const Decl *D); }; struct CodeCompletionResultSink { @@ -874,7 +889,7 @@ class CodeCompletionContext { : Cache(Cache) {} void setAnnotateResult(bool flag) { CurrentResults.annotateResult = flag; } - bool getAnnnoateResult() { return CurrentResults.annotateResult; } + bool getAnnotateResult() { return CurrentResults.annotateResult; } /// Allocate a string owned by the code completion context. StringRef copyString(StringRef Str); diff --git a/include/swift/IDE/CodeCompletionResultPrinter.h b/include/swift/IDE/CodeCompletionResultPrinter.h index 5d936503effde..717d6282a4309 100644 --- a/include/swift/IDE/CodeCompletionResultPrinter.h +++ b/include/swift/IDE/CodeCompletionResultPrinter.h @@ -27,6 +27,13 @@ void printCodeCompletionResultDescription(const CodeCompletionResult &Result, void printCodeCompletionResultDescriptionAnnotated( const CodeCompletionResult &Result, llvm::raw_ostream &OS, bool leadingPunctuation); + +void printCodeCompletionResultTypeName( + const CodeCompletionResult &Result, llvm::raw_ostream &OS); + +void printCodeCompletionResultTypeNameAnnotated( + const CodeCompletionResult &Result, llvm::raw_ostream &OS); + } // namespace ide } // namespace swift diff --git a/lib/IDE/CodeCompletion.cpp b/lib/IDE/CodeCompletion.cpp index c7d93817be0a9..9d11e4d92e2a2 100644 --- a/lib/IDE/CodeCompletion.cpp +++ b/lib/IDE/CodeCompletion.cpp @@ -356,12 +356,14 @@ CodeCompletionString *CodeCompletionString::create(llvm::BumpPtrAllocator &Alloc void CodeCompletionString::print(raw_ostream &OS) const { unsigned PrevNestingLevel = 0; - for (auto C : getChunks()) { + auto chunks = getChunks(); + for (auto I = chunks.begin(), E = chunks.end(); I != E; ++I) { bool AnnotatedTextChunk = false; - if (C.getNestingLevel() < PrevNestingLevel) { + + if (I->getNestingLevel() < PrevNestingLevel) { OS << "#}"; } - switch (C.getKind()) { + switch (I->getKind()) { using ChunkKind = Chunk::ChunkKind; case ChunkKind::AccessControlKeyword: case ChunkKind::DeclAttrKeyword: @@ -390,7 +392,7 @@ void CodeCompletionString::print(raw_ostream &OS) const { case ChunkKind::BaseName: case ChunkKind::TypeIdSystem: case ChunkKind::TypeIdUser: - AnnotatedTextChunk = C.isAnnotation(); + AnnotatedTextChunk = I->isAnnotation(); LLVM_FALLTHROUGH; case ChunkKind::CallParameterName: case ChunkKind::CallParameterInternalName: @@ -401,11 +403,11 @@ void CodeCompletionString::print(raw_ostream &OS) const { case ChunkKind::GenericParameterName: if (AnnotatedTextChunk) OS << "['"; - else if (C.getKind() == ChunkKind::CallParameterInternalName) + else if (I->getKind() == ChunkKind::CallParameterInternalName) OS << "("; - else if (C.getKind() == ChunkKind::CallParameterClosureType) + else if (I->getKind() == ChunkKind::CallParameterClosureType) OS << "##"; - for (char Ch : C.getText()) { + for (char Ch : I->getText()) { if (Ch == '\n') OS << "\\n"; else @@ -413,7 +415,7 @@ void CodeCompletionString::print(raw_ostream &OS) const { } if (AnnotatedTextChunk) OS << "']"; - else if (C.getKind() == ChunkKind::CallParameterInternalName) + else if (I->getKind() == ChunkKind::CallParameterInternalName) OS << ")"; break; case ChunkKind::OptionalBegin: @@ -424,21 +426,32 @@ void CodeCompletionString::print(raw_ostream &OS) const { break; case ChunkKind::DynamicLookupMethodCallTail: case ChunkKind::OptionalMethodCallTail: - OS << C.getText(); + OS << I->getText(); break; + case ChunkKind::TypeAnnotationBegin: { + OS << "[#"; + ++I; + auto level = I->getNestingLevel(); + for (; I != E && !I->endsPreviousNestedGroup(level); ++I) + if (I->hasText()) + OS << I->getText(); + --I; + OS << "#]"; + continue; + } case ChunkKind::TypeAnnotation: OS << "[#"; - OS << C.getText(); + OS << I->getText(); OS << "#]"; break; case ChunkKind::CallParameterClosureExpr: - OS << " {" << C.getText() << "|}"; + OS << " {" << I->getText() << "|}"; break; case ChunkKind::BraceStmtWithCursor: OS << " {|}"; break; } - PrevNestingLevel = C.getNestingLevel(); + PrevNestingLevel = I->getNestingLevel(); } while (PrevNestingLevel > 0) { OS << "#}"; @@ -539,6 +552,10 @@ CodeCompletionResult::getCodeCompletionDeclKind(const Decl *D) { llvm_unreachable("invalid DeclKind"); } +bool CodeCompletionResult::getDeclIsSystem(const Decl *D) { + return D->getModuleContext()->isSystemModule(); +} + void CodeCompletionResult::printPrefix(raw_ostream &OS) const { llvm::SmallString<64> Prefix; switch (getKind()) { @@ -700,6 +717,8 @@ void CodeCompletionResult::printPrefix(raw_ostream &OS) const { } if (NotRecommended) Prefix.append("/NotRecommended"); + if (IsSystem) + Prefix.append("/IsSystem"); if (NumBytesToErase != 0) { Prefix.append("/Erase["); Prefix.append(Twine(NumBytesToErase).str()); @@ -773,6 +792,15 @@ static ArrayRef> copyStringPairArray( return llvm::makeArrayRef(Buff, Arr.size()); } +void CodeCompletionResultBuilder::withNestedGroup( + CodeCompletionString::Chunk::ChunkKind Kind, + llvm::function_ref body) { + CurrentNestingLevel++; + addSimpleChunk(Kind); + body(); + CurrentNestingLevel--; +} + void CodeCompletionResultBuilder::addChunkWithText( CodeCompletionString::Chunk::ChunkKind Kind, StringRef Text) { addChunkWithTextNoCopy(Kind, copyString(*Sink.Allocator, Text)); @@ -820,22 +848,26 @@ class AnnotatedTypePrinter : public ASTPrinter { } } + void flush() { + if (Buffer.empty()) + return; + Builder.addChunkWithText(CurrChunkKind, Buffer); + Buffer.clear(); + } + public: AnnotatedTypePrinter(CodeCompletionResultBuilder &Builder) : Builder(Builder) {} ~AnnotatedTypePrinter() { - // Add remaining buffer. - Builder.addChunkWithText(CurrChunkKind, Buffer); + // Flush the remainings. + flush(); } void printText(StringRef Text) override { if (CurrChunkKind != NextChunkKind) { - // If the next desired kind is different from the current buffer, flush the - // current buffer. - if (!Buffer.empty()) { - Builder.addChunkWithText(CurrChunkKind, Buffer); - Buffer.clear(); - } + // If the next desired kind is different from the current buffer, flush + // the current buffer. + flush(); CurrChunkKind = NextChunkKind; } Buffer.append(Text); @@ -955,13 +987,10 @@ void CodeCompletionResultBuilder::addCallParameter(Identifier Name, if (ContextTy) PO.setBaseType(ContextTy); if (shouldAnnotateResults()) { - CurrentNestingLevel++; - addSimpleChunk(ChunkKind::CallParameterTypeBegin); - { + withNestedGroup(ChunkKind::CallParameterTypeBegin, [&]() { AnnotatedTypePrinter printer(*this); Ty->print(printer, PO); - } - CurrentNestingLevel--; + }); } else { std::string TypeName = Ty->getString(PO); addChunkWithText(ChunkKind::CallParameterType, TypeName); @@ -1033,6 +1062,30 @@ void CodeCompletionResultBuilder::addCallParameter(Identifier Name, CurrentNestingLevel--; } +void CodeCompletionResultBuilder::addTypeAnnotation(Type T, PrintOptions PO, + StringRef suffix) { + T = T->getReferenceStorageReferent(); + + // Replace '()' with 'Void'. + if (T->isVoid()) + T = T->getASTContext().getVoidDecl()->getDeclaredInterfaceType(); + + if (shouldAnnotateResults()) { + withNestedGroup(CodeCompletionString::Chunk::ChunkKind::TypeAnnotationBegin, + [&]() { + AnnotatedTypePrinter printer(*this); + T->print(printer, PO); + if (!suffix.empty()) + printer.printText(suffix); + }); + } else { + auto str = T.getString(PO); + if (!suffix.empty()) + str += suffix.str(); + addTypeAnnotation(str); + } +} + StringRef CodeCompletionContext::copyString(StringRef Str) { return ::copyString(*CurrentResults.Allocator, Str); } @@ -1390,6 +1443,7 @@ Optional CodeCompletionString::getFirstTextChunkIndex( case ChunkKind::DynamicLookupMethodCallTail: case ChunkKind::OptionalMethodCallTail: case ChunkKind::TypeAnnotation: + case ChunkKind::TypeAnnotationBegin: continue; case ChunkKind::BraceStmtWithCursor: @@ -1411,17 +1465,25 @@ void CodeCompletionString::getName(raw_ostream &OS) const { auto FirstTextChunk = getFirstTextChunkIndex(); int TextSize = 0; if (FirstTextChunk.hasValue()) { - for (auto C : getChunks().slice(*FirstTextChunk)) { + auto chunks = getChunks().slice(*FirstTextChunk); + + for (auto i = chunks.begin(), e = chunks.end(); i != e; ++i) { using ChunkKind = Chunk::ChunkKind; - bool shouldPrint = !C.isAnnotation(); - switch (C.getKind()) { + bool shouldPrint = !i->isAnnotation(); + switch (i->getKind()) { case ChunkKind::TypeAnnotation: case ChunkKind::CallParameterClosureType: case ChunkKind::CallParameterClosureExpr: case ChunkKind::DeclAttrParamColon: case ChunkKind::OptionalMethodCallTail: continue; + case ChunkKind::TypeAnnotationBegin: { + auto level = i->getNestingLevel(); + do { ++i; } while (i != e && !i->endsPreviousNestedGroup(level)); + --i; + continue; + } case ChunkKind::ThrowsKeyword: case ChunkKind::RethrowsKeyword: shouldPrint = true; // Even when they're annotations. @@ -1430,9 +1492,9 @@ void CodeCompletionString::getName(raw_ostream &OS) const { break; } - if (C.hasText() && shouldPrint) { - TextSize += C.getText().size(); - OS << C.getText(); + if (i->hasText() && shouldPrint) { + TextSize += i->getText().size(); + OS << i->getText(); } } } @@ -1520,8 +1582,8 @@ class CodeCompletionCallbacksImpl : public CodeCompletionCallbacks { SemanticContextKind::CurrentNominal, {}); Builder.setKeywordKind(CodeCompletionKeywordKind::kw_super); - Builder.addTextChunk("super"); - Builder.addTypeAnnotation(ST.getString()); + Builder.addKeyword("super"); + Builder.addTypeAnnotation(ST, PrintOptions()); } Optional> typeCheckParsedExpr() { @@ -1687,6 +1749,29 @@ protocolForLiteralKind(CodeCompletionLiteralKind kind) { llvm_unreachable("Unhandled CodeCompletionLiteralKind in switch."); } +static Type +defaultTypeLiteralKind(CodeCompletionLiteralKind kind, ASTContext &Ctx) { + switch (kind) { + case CodeCompletionLiteralKind::BooleanLiteral: + return Ctx.getBoolDecl()->getDeclaredType(); + case CodeCompletionLiteralKind::IntegerLiteral: + return Ctx.getIntDecl()->getDeclaredType(); + case CodeCompletionLiteralKind::StringLiteral: + return Ctx.getStringDecl()->getDeclaredType(); + case CodeCompletionLiteralKind::ArrayLiteral: + return Ctx.getArrayDecl()->getDeclaredType(); + case CodeCompletionLiteralKind::DictionaryLiteral: + return Ctx.getDictionaryDecl()->getDeclaredType(); + case CodeCompletionLiteralKind::NilLiteral: + case CodeCompletionLiteralKind::ColorLiteral: + case CodeCompletionLiteralKind::ImageLiteral: + case CodeCompletionLiteralKind::Tuple: + return Type(); + } + + llvm_unreachable("Unhandled CodeCompletionLiteralKind in switch."); +} + /// Whether funcType has a single argument (not including defaulted arguments) /// that is of type () -> (). static bool hasTrivialTrailingClosure(const FuncDecl *FD, @@ -2187,17 +2272,12 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { } void addTypeAnnotation(CodeCompletionResultBuilder &Builder, Type T) { - T = T->getReferenceStorageReferent(); - if (T->isVoid()) { - Builder.addTypeAnnotation("Void"); - } else { - PrintOptions PO; - PO.OpaqueReturnTypePrinting = - PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword; - if (auto typeContext = CurrDeclContext->getInnermostTypeContext()) - PO.setBaseType(typeContext->getDeclaredTypeInContext()); - Builder.addTypeAnnotation(T.getString(PO)); - } + PrintOptions PO; + PO.OpaqueReturnTypePrinting = + PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword; + if (auto typeContext = CurrDeclContext->getInnermostTypeContext()) + PO.setBaseType(typeContext->getDeclaredTypeInContext()); + Builder.addTypeAnnotation(T, PO); } void addTypeAnnotationForImplicitlyUnwrappedOptional( @@ -2212,14 +2292,13 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { suffix = "?"; } - T = T->getReferenceStorageReferent(); PrintOptions PO; PO.PrintOptionalAsImplicitlyUnwrapped = true; PO.OpaqueReturnTypePrinting = PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword; if (auto typeContext = CurrDeclContext->getInnermostTypeContext()) PO.setBaseType(typeContext->getDeclaredTypeInContext()); - Builder.addTypeAnnotation(T.getString(PO) + suffix); + Builder.addTypeAnnotation(T, PO, suffix); } /// For printing in code completion results, replace archetypes with @@ -2877,12 +2956,8 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { else if (FD->getAttrs().hasAttribute()) Builder.addOptionalMethodCallTail(); - llvm::SmallString<32> TypeStr; - if (!AFT) { - llvm::raw_svector_ostream OS(TypeStr); - FunctionType.print(OS); - Builder.addTypeAnnotation(OS.str()); + Builder.addTypeAnnotation(FunctionType, PrintOptions()); return; } @@ -2903,10 +2978,41 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { addThrows(Builder, AFT, FD); } + // Build type annotation. Type ResultType = AFT->getResult(); + // As we did with parameters in addParamPatternFromFunction, + // for regular methods we'll print '!' after implicitly + // unwrapped optional results. + bool IsIUO = + !IsImplicitlyCurriedInstanceMethod && + FD->isImplicitlyUnwrappedOptional(); - // Build type annotation. - { + PrintOptions PO; + PO.OpaqueReturnTypePrinting = + PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword; + PO.PrintOptionalAsImplicitlyUnwrapped = IsIUO; + if (auto typeContext = CurrDeclContext->getInnermostTypeContext()) + PO.setBaseType(typeContext->getDeclaredTypeInContext()); + + if (Builder.shouldAnnotateResults()) { + Builder.withNestedGroup( + CodeCompletionString::Chunk::ChunkKind::TypeAnnotationBegin, [&] { + AnnotatedTypePrinter printer(Builder); + if (IsImplicitlyCurriedInstanceMethod) { + auto *FnType = ResultType->castTo(); + AnyFunctionType::printParams(FnType->getParams(), printer, + PrintOptions()); + ResultType = FnType->getResult(); + printer.printText(" -> "); + } + + // What's left is the result type. + if (ResultType->isVoid()) + ResultType = Ctx.getVoidDecl()->getDeclaredInterfaceType(); + ResultType.print(printer, PO); + }); + } else { + llvm::SmallString<32> TypeStr; llvm::raw_svector_ostream OS(TypeStr); if (IsImplicitlyCurriedInstanceMethod) { auto *FnType = ResultType->castTo(); @@ -2916,26 +3022,11 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { } // What's left is the result type. - if (ResultType->isVoid()) { - OS << "Void"; - } else { - // As we did with parameters in addParamPatternFromFunction, - // for regular methods we'll print '!' after implicitly - // unwrapped optional results. - bool IsIUO = - !IsImplicitlyCurriedInstanceMethod && - FD->isImplicitlyUnwrappedOptional(); - - PrintOptions PO; - PO.OpaqueReturnTypePrinting = - PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword; - PO.PrintOptionalAsImplicitlyUnwrapped = IsIUO; - if (auto typeContext = CurrDeclContext->getInnermostTypeContext()) - PO.setBaseType(typeContext->getDeclaredTypeInContext()); - ResultType.print(OS, PO); - } + if (ResultType->isVoid()) + ResultType = Ctx.getVoidDecl()->getDeclaredInterfaceType(); + ResultType.print(OS, PO); + Builder.addTypeAnnotation(TypeStr); } - Builder.addTypeAnnotation(TypeStr); if (isUnresolvedMemberIdealType(ResultType)) Builder.setSemanticContext(SemanticContextKind::ExpressionSpecific); @@ -3898,8 +3989,7 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { } void addTypeRelationFromProtocol(CodeCompletionResultBuilder &builder, - CodeCompletionLiteralKind kind, - StringRef defaultTypeName) { + CodeCompletionLiteralKind kind) { // Check for matching ExpectedTypes. auto *P = Ctx.getProtocol(protocolForLiteralKind(kind)); for (auto T : expectedTypeContext.possibleTypes) { @@ -3928,8 +4018,8 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { } // Fallback to showing the default type. - if (!defaultTypeName.empty()) { - builder.addTypeAnnotation(defaultTypeName); + if (auto defaultTy = defaultTypeLiteralKind(kind, Ctx)) { + builder.addTypeAnnotation(defaultTy, PrintOptions()); builder.setExpectedTypeRelation( expectedTypeContext.possibleTypes.empty() ? CodeCompletionResult::ExpectedTypeRelation::Unknown @@ -3940,8 +4030,7 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { /// Add '#file', '#line', et at. void addPoundLiteralCompletions(bool needPound) { auto addFromProto = [&](StringRef name, CodeCompletionKeywordKind kwKind, - CodeCompletionLiteralKind literalKind, - StringRef defaultTypeName) { + CodeCompletionLiteralKind literalKind) { if (!needPound) name = name.substr(1); @@ -3951,21 +4040,21 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { builder.setLiteralKind(literalKind); builder.setKeywordKind(kwKind); builder.addBaseName(name); - addTypeRelationFromProtocol(builder, literalKind, defaultTypeName); + addTypeRelationFromProtocol(builder, literalKind); }; addFromProto("#function", CodeCompletionKeywordKind::pound_function, - CodeCompletionLiteralKind::StringLiteral, "String"); + CodeCompletionLiteralKind::StringLiteral); addFromProto("#file", CodeCompletionKeywordKind::pound_file, - CodeCompletionLiteralKind::StringLiteral, "String"); + CodeCompletionLiteralKind::StringLiteral); if (Ctx.LangOpts.EnableConcisePoundFile) { addFromProto("#filePath", CodeCompletionKeywordKind::pound_file, - CodeCompletionLiteralKind::StringLiteral, "String"); + CodeCompletionLiteralKind::StringLiteral); } addFromProto("#line", CodeCompletionKeywordKind::pound_line, - CodeCompletionLiteralKind::IntegerLiteral, "Int"); + CodeCompletionLiteralKind::IntegerLiteral); addFromProto("#column", CodeCompletionKeywordKind::pound_column, - CodeCompletionLiteralKind::IntegerLiteral, "Int"); + CodeCompletionLiteralKind::IntegerLiteral); addKeyword(needPound ? "#dsohandle" : "dsohandle", "UnsafeRawPointer", CodeCompletionKeywordKind::pound_dsohandle); @@ -3975,7 +4064,7 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { auto &context = CurrDeclContext->getASTContext(); auto addFromProto = [&]( - CodeCompletionLiteralKind kind, StringRef defaultTypeName, + CodeCompletionLiteralKind kind, llvm::function_ref consumer, bool isKeyword = false) { @@ -3984,7 +4073,7 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { builder.setLiteralKind(kind); consumer(builder); - addTypeRelationFromProtocol(builder, kind, defaultTypeName); + addTypeRelationFromProtocol(builder, kind); }; // FIXME: the pedantically correct way is to resolve Swift.*LiteralType. @@ -3993,29 +4082,29 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { using Builder = CodeCompletionResultBuilder; // Add literal completions that conform to specific protocols. - addFromProto(LK::IntegerLiteral, "Int", [](Builder &builder) { + addFromProto(LK::IntegerLiteral, [](Builder &builder) { builder.addTextChunk("0"); }); - addFromProto(LK::BooleanLiteral, "Bool", [](Builder &builder) { + addFromProto(LK::BooleanLiteral, [](Builder &builder) { builder.addBaseName("true"); }, /*isKeyword=*/true); - addFromProto(LK::BooleanLiteral, "Bool", [](Builder &builder) { + addFromProto(LK::BooleanLiteral, [](Builder &builder) { builder.addBaseName("false"); }, /*isKeyword=*/true); - addFromProto(LK::NilLiteral, "", [](Builder &builder) { + addFromProto(LK::NilLiteral, [](Builder &builder) { builder.addBaseName("nil"); }, /*isKeyword=*/true); - addFromProto(LK::StringLiteral, "String", [&](Builder &builder) { + addFromProto(LK::StringLiteral, [&](Builder &builder) { builder.addTextChunk("\""); builder.addSimpleNamedParameter("abc"); builder.addTextChunk("\""); }); - addFromProto(LK::ArrayLiteral, "Array", [&](Builder &builder) { + addFromProto(LK::ArrayLiteral, [&](Builder &builder) { builder.addLeftBracket(); builder.addSimpleNamedParameter("values"); builder.addRightBracket(); }); - addFromProto(LK::DictionaryLiteral, "Dictionary", [&](Builder &builder) { + addFromProto(LK::DictionaryLiteral, [&](Builder &builder) { builder.addLeftBracket(); builder.addSimpleNamedParameter("key"); builder.addTextChunk(": "); @@ -4024,7 +4113,7 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { }); auto floatType = context.getFloatDecl()->getDeclaredType(); - addFromProto(LK::ColorLiteral, "", [&](Builder &builder) { + addFromProto(LK::ColorLiteral, [&](Builder &builder) { builder.addBaseName("#colorLiteral"); builder.addLeftParen(); builder.addCallParameter(context.getIdentifier("red"), floatType); @@ -4038,7 +4127,7 @@ class CompletionLookup final : public swift::VisibleDeclConsumer { }); auto stringType = context.getStringDecl()->getDeclaredType(); - addFromProto(LK::ImageLiteral, "", [&](Builder &builder) { + addFromProto(LK::ImageLiteral, [&](Builder &builder) { builder.addBaseName("#imageLiteral"); builder.addLeftParen(); builder.addCallParameter(context.getIdentifier("resourceName"), @@ -4714,9 +4803,11 @@ class CompletionOverrideLookup : public swift::VisibleDeclConsumer { else { auto dist = Ctx.SourceMgr.getByteDistance( introducerLoc, Ctx.SourceMgr.getCodeCompletionLoc()); - Builder.setNumBytesToErase(dist); - Builder.addOverrideKeyword(); - Builder.addDeclIntroducer(DeclStr.str().substr(0, NameOffset)); + if (dist <= CodeCompletionResult::MaxNumBytesToErase) { + Builder.setNumBytesToErase(dist); + Builder.addOverrideKeyword(); + Builder.addDeclIntroducer(DeclStr.str().substr(0, NameOffset)); + } } } @@ -5384,8 +5475,13 @@ static void addOpaqueTypeKeyword(CodeCompletionResultSink &Sink) { addKeyword(Sink, "some", CodeCompletionKeywordKind::None, "some"); } -static void addAnyTypeKeyword(CodeCompletionResultSink &Sink) { - addKeyword(Sink, "Any", CodeCompletionKeywordKind::None, "Any"); +static void addAnyTypeKeyword(CodeCompletionResultSink &Sink, Type T) { + CodeCompletionResultBuilder Builder(Sink, + CodeCompletionResult::ResultKind::Keyword, + SemanticContextKind::None, {}); + Builder.setKeywordKind(CodeCompletionKeywordKind::None); + Builder.addKeyword("Any"); + Builder.addTypeAnnotation(T, PrintOptions()); } void CodeCompletionCallbacksImpl::addKeywords(CodeCompletionResultSink &Sink, @@ -5440,7 +5536,7 @@ void CodeCompletionCallbacksImpl::addKeywords(CodeCompletionResultSink &Sink, addSuperKeyword(Sink); addLetVarKeywords(Sink); addExprKeywords(Sink); - addAnyTypeKeyword(Sink); + addAnyTypeKeyword(Sink, CurDeclContext->getASTContext().TheAnyType); break; case CompletionKind::CaseStmtKeyword: @@ -5465,7 +5561,7 @@ void CodeCompletionCallbacksImpl::addKeywords(CodeCompletionResultSink &Sink, LLVM_FALLTHROUGH; } case CompletionKind::TypeSimpleBeginning: - addAnyTypeKeyword(Sink); + addAnyTypeKeyword(Sink, CurDeclContext->getASTContext().TheAnyType); break; case CompletionKind::NominalMemberBeginning: { @@ -5997,7 +6093,7 @@ void CodeCompletionCallbacksImpl::doneParsing() { addSuperKeyword(Sink); addLetVarKeywords(Sink); addExprKeywords(Sink); - addAnyTypeKeyword(Sink); + addAnyTypeKeyword(Sink, CurDeclContext->getASTContext().TheAnyType); DoPostfixExprBeginning(); } else { // foo() {} @@ -6142,7 +6238,7 @@ void CodeCompletionCallbacksImpl::doneParsing() { AccessLevel::Internal, TheModule, SourceFile::ImportQueryKind::PrivateOnly), Ctx.LangOpts.CodeCompleteInitsInPostfixExpr, - CompletionContext.getAnnnoateResult(), + CompletionContext.getAnnotateResult(), }; using PairType = llvm::DenseSetgetKind() == CodeCompletionResult::Keyword) continue; Result->printPrefix(OS); - if (PrintAnnotatedDescription) + if (PrintAnnotatedDescription) { printCodeCompletionResultDescriptionAnnotated(*Result, OS, /*leadingPunctuation=*/false); - else + OS << "; typename="; + printCodeCompletionResultTypeNameAnnotated(*Result, OS); + } else { Result->getCompletionString()->print(OS); + } llvm::SmallString<64> Name; llvm::raw_svector_ostream NameOs(Name); @@ -6343,7 +6442,7 @@ void SimpleCachingCodeCompletionConsumer::handleResultsAndModules( if (!V.hasValue()) { // No cached results found. Fill the cache. V = context.Cache.createValue(); - (*V)->Sink.annotateResult = context.getAnnnoateResult(); + (*V)->Sink.annotateResult = context.getAnnotateResult(); lookupCodeCompletionResultsFromModule( (*V)->Sink, R.TheModule, R.Key.AccessPath, R.Key.ResultsHaveLeadingDot, DCForModules); diff --git a/lib/IDE/CodeCompletionCache.cpp b/lib/IDE/CodeCompletionCache.cpp index 0e8f9e51edf95..21a3d7aa6700d 100644 --- a/lib/IDE/CodeCompletionCache.cpp +++ b/lib/IDE/CodeCompletionCache.cpp @@ -215,6 +215,7 @@ static bool readCachedModule(llvm::MemoryBuffer *in, auto opKind = static_cast(*cursor++); auto context = static_cast(*cursor++); auto notRecommended = static_cast(*cursor++); + auto isSystem = static_cast(*cursor++); auto numBytesToErase = static_cast(*cursor++); auto oldCursor = cursor; auto chunkIndex = read32le(cursor); @@ -248,7 +249,7 @@ static bool readCachedModule(llvm::MemoryBuffer *in, CodeCompletionResult *result = nullptr; if (kind == CodeCompletionResult::Declaration) { result = new (*V.Sink.Allocator) CodeCompletionResult( - context, numBytesToErase, string, declKind, moduleName, + context, numBytesToErase, string, declKind, isSystem, moduleName, notRecommended, CodeCompletionResult::NotRecommendedReason::NoReason, briefDocComment, copyStringArray(*V.Sink.Allocator, assocUSRs), copyStringPairArray(*V.Sink.Allocator, declKeywords), @@ -371,6 +372,7 @@ static void writeCachedModule(llvm::raw_ostream &out, LE.write(static_cast(CodeCompletionOperatorKind::None)); LE.write(static_cast(R->getSemanticContext())); LE.write(static_cast(R->isNotRecommended())); + LE.write(static_cast(R->isSystem())); LE.write(static_cast(R->getNumBytesToErase())); LE.write( static_cast(addCompletionString(R->getCompletionString()))); diff --git a/lib/IDE/CodeCompletionResultBuilder.h b/lib/IDE/CodeCompletionResultBuilder.h index bbf6955b11692..bb286e2273c34 100644 --- a/lib/IDE/CodeCompletionResultBuilder.h +++ b/lib/IDE/CodeCompletionResultBuilder.h @@ -81,13 +81,6 @@ class CodeCompletionResultBuilder { CodeCompletionResult::NotRecommendedReason NotRecReason = CodeCompletionResult::NotRecommendedReason::NoReason; - /// Annotated results are requested by the client. - /// - /// This affects the structure of the CodeCompletionString. - bool shouldAnnotateResults() { - return Sink.annotateResult; - } - void addChunkWithText(CodeCompletionString::Chunk::ChunkKind Kind, StringRef Text); @@ -126,6 +119,13 @@ class CodeCompletionResultBuilder { Cancelled = true; } + /// Annotated results are requested by the client. + /// + /// This affects the structure of the CodeCompletionString. + bool shouldAnnotateResults() { + return Sink.annotateResult; + } + void setNumBytesToErase(unsigned N) { NumBytesToErase = N; } @@ -148,6 +148,9 @@ class CodeCompletionResultBuilder { ExpectedTypeRelation = relation; } + void withNestedGroup(CodeCompletionString::Chunk::ChunkKind Kind, + llvm::function_ref body); + void addAccessControlKeyword(AccessLevel Access) { switch (Access) { case AccessLevel::Private: @@ -357,23 +360,23 @@ class CodeCompletionResultBuilder { } void addSimpleNamedParameter(StringRef name) { - CurrentNestingLevel++; - addSimpleChunk(CodeCompletionString::Chunk::ChunkKind::CallParameterBegin); - // Use internal, since we don't want the name to be outside the placeholder. - addChunkWithText( - CodeCompletionString::Chunk::ChunkKind::CallParameterInternalName, - name); - CurrentNestingLevel--; + withNestedGroup(CodeCompletionString::Chunk::ChunkKind::CallParameterBegin, [&] { + // Use internal, since we don't want the name to be outside the + // placeholder. + addChunkWithText( + CodeCompletionString::Chunk::ChunkKind::CallParameterInternalName, + name); + }); } void addSimpleTypedParameter(StringRef Annotation, bool IsVarArg = false) { - CurrentNestingLevel++; - addSimpleChunk(CodeCompletionString::Chunk::ChunkKind::CallParameterBegin); - addChunkWithText(CodeCompletionString::Chunk::ChunkKind::CallParameterType, - Annotation); - if (IsVarArg) - addEllipsis(); - CurrentNestingLevel--; + withNestedGroup(CodeCompletionString::Chunk::ChunkKind::CallParameterBegin, [&] { + addChunkWithText( + CodeCompletionString::Chunk::ChunkKind::CallParameterType, + Annotation); + if (IsVarArg) + addEllipsis(); + }); } void addCallParameter(Identifier Name, Identifier LocalName, Type Ty, @@ -389,12 +392,11 @@ class CodeCompletionResultBuilder { } void addGenericParameter(StringRef Name) { - CurrentNestingLevel++; - addSimpleChunk( - CodeCompletionString::Chunk::ChunkKind::GenericParameterBegin); - addChunkWithText( - CodeCompletionString::Chunk::ChunkKind::GenericParameterName, Name); - CurrentNestingLevel--; + withNestedGroup(CodeCompletionString::Chunk::ChunkKind::GenericParameterBegin, + [&] { + addChunkWithText( + CodeCompletionString::Chunk::ChunkKind::GenericParameterName, Name); + }); } void addDynamicLookupMethodCallTail() { @@ -415,6 +417,8 @@ class CodeCompletionResultBuilder { getLastChunk().setIsAnnotation(); } + void addTypeAnnotation(Type T, PrintOptions PO, StringRef suffix = ""); + void addBraceStmtWithCursor(StringRef Description = "") { addChunkWithText( CodeCompletionString::Chunk::ChunkKind::BraceStmtWithCursor, diff --git a/lib/IDE/CodeCompletionResultPrinter.cpp b/lib/IDE/CodeCompletionResultPrinter.cpp index 9d3a5e76ee340..e74ab3a3d6e91 100644 --- a/lib/IDE/CodeCompletionResultPrinter.cpp +++ b/lib/IDE/CodeCompletionResultPrinter.cpp @@ -43,16 +43,23 @@ void swift::ide::printCodeCompletionResultDescription( C.is(ChunkKind::Whitespace)) continue; + // Skip TypeAnnotation group. + if (C.is(ChunkKind::TypeAnnotationBegin)) { + auto level = I->getNestingLevel(); + do { ++I; } while (I != E && !I->endsPreviousNestedGroup(level)); + --I; + continue; + } + if (isOperator && C.is(ChunkKind::CallParameterType)) continue; if (isOperator && C.is(ChunkKind::CallParameterTypeBegin)) { - auto nestingLevel = C.getNestingLevel(); - ++I; - while (I != E && I->endsPreviousNestedGroup(nestingLevel)) - ++I; + auto level = I->getNestingLevel(); + do { ++I; } while (I != E && !I->endsPreviousNestedGroup(level)); --I; continue; } + if (C.hasText()) { TextSize += C.getText().size(); OS << C.getText(); @@ -64,7 +71,7 @@ void swift::ide::printCodeCompletionResultDescription( } namespace { -class AnnotatingDescriptionPrinter { +class AnnotatingResultPrinter { raw_ostream &OS; /// Print \p content enclosing with \p tag. @@ -154,9 +161,9 @@ class AnnotatingDescriptionPrinter { } public: - AnnotatingDescriptionPrinter(raw_ostream &OS) : OS(OS) {} + AnnotatingResultPrinter(raw_ostream &OS) : OS(OS) {} - void print(const CodeCompletionResult &result, bool leadingPunctuation) { + void printDescription(const CodeCompletionResult &result, bool leadingPunctuation) { auto str = result.getCompletionString(); bool isOperator = result.isOperator(); @@ -165,23 +172,52 @@ class AnnotatingDescriptionPrinter { auto chunks = str->getChunks().slice(*FirstTextChunk); for (auto i = chunks.begin(), e = chunks.end(); i != e; ++i) { using ChunkKind = CodeCompletionString::Chunk::ChunkKind; + + // Skip the type annotation. + if (i->is(ChunkKind::TypeAnnotationBegin)) { + auto level = i->getNestingLevel(); + do { ++i; } while (i != e && !i->endsPreviousNestedGroup(level)); + --i; + continue; + } + + // Print call argument group. if (i->is(ChunkKind::CallParameterBegin)) { - auto start = i++; - for (; i != e; ++i) { - if (i->endsPreviousNestedGroup(start->getNestingLevel())) - break; - } + auto start = i; + auto level = i->getNestingLevel(); + do { ++i; } while (i != e && !i->endsPreviousNestedGroup(level)); if (!isOperator) printCallArg({start, i}); - if (i == e) - break; + --i; + continue; } + if (isOperator && i->is(ChunkKind::CallParameterType)) continue; printTextChunk(*i); } } } + + void printTypeName(const CodeCompletionResult &result) { + auto Chunks = result.getCompletionString()->getChunks(); + + for (auto i = Chunks.begin(), e = Chunks.end(); i != e; ++i) { + + if (i->is(CodeCompletionString::Chunk::ChunkKind::TypeAnnotation)) + OS << i->getText(); + + if (i->is(CodeCompletionString::Chunk::ChunkKind::TypeAnnotationBegin)) { + auto nestingLevel = i->getNestingLevel(); + ++i; + for (; i != e && !i->endsPreviousNestedGroup(nestingLevel); ++i) { + if (i->hasText()) + printTextChunk(*i); + } + --i; + } + } + } }; } // namespace @@ -189,6 +225,33 @@ class AnnotatingDescriptionPrinter { void swift::ide::printCodeCompletionResultDescriptionAnnotated( const CodeCompletionResult &Result, raw_ostream &OS, bool leadingPunctuation) { - AnnotatingDescriptionPrinter printer(OS); - printer.print(Result, leadingPunctuation); + AnnotatingResultPrinter printer(OS); + printer.printDescription(Result, leadingPunctuation); +} + + +void swift::ide::printCodeCompletionResultTypeName(const CodeCompletionResult &Result, + llvm::raw_ostream &OS) { + auto Chunks = Result.getCompletionString()->getChunks(); + + for (auto i = Chunks.begin(), e = Chunks.end(); i != e; ++i) { + + if (i->is(CodeCompletionString::Chunk::ChunkKind::TypeAnnotation)) + OS << i->getText(); + + if (i->is(CodeCompletionString::Chunk::ChunkKind::TypeAnnotationBegin)) { + auto nestingLevel = i->getNestingLevel(); + i++; + for (; i != e && !i->endsPreviousNestedGroup(nestingLevel); ++i) { + if (i->hasText()) + OS << i->getText(); + } + --i; + } + } +} + +void swift::ide::printCodeCompletionResultTypeNameAnnotated(const CodeCompletionResult &Result, llvm::raw_ostream &OS) { + AnnotatingResultPrinter printer(OS); + printer.printTypeName(Result); } diff --git a/lib/IDE/REPLCodeCompletion.cpp b/lib/IDE/REPLCodeCompletion.cpp index 1cd0a26a910ab..45f95f8254cf9 100644 --- a/lib/IDE/REPLCodeCompletion.cpp +++ b/lib/IDE/REPLCodeCompletion.cpp @@ -81,6 +81,7 @@ static std::string toInsertableString(CodeCompletionResult *Result) { case CodeCompletionString::Chunk::ChunkKind::GenericParameterBegin: case CodeCompletionString::Chunk::ChunkKind::GenericParameterName: case CodeCompletionString::Chunk::ChunkKind::TypeAnnotation: + case CodeCompletionString::Chunk::ChunkKind::TypeAnnotationBegin: return Str; case CodeCompletionString::Chunk::ChunkKind::CallParameterClosureExpr: @@ -108,7 +109,8 @@ static void toDisplayString(CodeCompletionResult *Result, OS << C.getText(); continue; } - if (C.getKind() == CodeCompletionString::Chunk::ChunkKind::TypeAnnotation) { + if (C.is(CodeCompletionString::Chunk::ChunkKind::TypeAnnotation) || + C.is(CodeCompletionString::Chunk::ChunkKind::TypeAnnotationBegin)) { if (Result->getKind() == CodeCompletionResult::Declaration) { switch (Result->getAssociatedDeclKind()) { case CodeCompletionDeclKind::Module: @@ -150,7 +152,8 @@ static void toDisplayString(CodeCompletionResult *Result, } else { OS << ": "; } - OS << C.getText(); + if (C.hasText()) + OS << C.getText(); } } } diff --git a/test/IDE/complete_annotation.swift b/test/IDE/complete_annotation.swift index 0e6b7bdbc0d78..d9dde1ac6c8e5 100644 --- a/test/IDE/complete_annotation.swift +++ b/test/IDE/complete_annotation.swift @@ -28,38 +28,38 @@ func testGlobal() { #^GLOBAL_EXPR^# } // GLOBAL_EXPR: Begin completions -// GLOBAL_EXPR-DAG: Decl[Struct]/CurrModule: MyStruct; name=MyStruct -// GLOBAL_EXPR-DAG: Keyword[class]/None: class; name=class -// GLOBAL_EXPR-DAG: Keyword[enum]/None: enum; name=enum -// GLOBAL_EXPR-DAG: Keyword[if]/None: if; name=if -// GLOBAL_EXPR-DAG: Keyword[guard]/None: guard; name=guard -// GLOBAL_EXPR-DAG: Keyword[try]/None: try; name=try -// GLOBAL_EXPR-DAG: Keyword[try]/None: try!; name=try! -// GLOBAL_EXPR-DAG: Keyword/None: Any; name=Any -// GLOBAL_EXPR-DAG: Literal[Integer]/None: 0; name=0 -// GLOBAL_EXPR-DAG: Literal[Boolean]/None: true; name=true -// GLOBAL_EXPR-DAG: Literal[Boolean]/None: false; name=false -// GLOBAL_EXPR-DAG: Literal[Nil]/None: nil; name=nil -// GLOBAL_EXPR-DAG: Literal[String]/None: "abc"; name="abc" -// GLOBAL_EXPR-DAG: Literal[Array]/None: [values]; name=[values] -// GLOBAL_EXPR-DAG: Literal[Dictionary]/None: [key: value]; name=[key: value] -// GLOBAL_EXPR-DAG: Literal[_Color]/None: #colorLiteral(red: Float, green: Float, blue: Float, alpha: Float); name=#colorLiteral(red: Float, green: Float, blue: Float, alpha: Float) -// GLOBAL_EXPR-DAG: Literal[_Image]/None: #imageLiteral(resourceName: String); name=#imageLiteral(resourceName: String) -// GLOBAL_EXPR-DAG: Literal[Tuple]/None: (values); name=(values) -// GLOBAL_EXPR-DAG: Keyword[#function]/None: #function; name=#function -// GLOBAL_EXPR-DAG: Decl[Module]/None: Swift; name=Swift -// GLOBAL_EXPR-DAG: Decl[Struct]/OtherModule[Swift]: Int; name=Int -// GLOBAL_EXPR-DAG: Decl[FreeFunction]/OtherModule[Swift]: print(_ items: Any..., to output: &TextOutputStream); name=print(items: Any..., to: &TextOutputStream) +// GLOBAL_EXPR-DAG: Decl[Struct]/CurrModule: MyStruct; typename=MyStruct; +// GLOBAL_EXPR-DAG: Keyword[class]/None: class; typename=; +// GLOBAL_EXPR-DAG: Keyword[enum]/None: enum; typename=; +// GLOBAL_EXPR-DAG: Keyword[if]/None: if; typename=; +// GLOBAL_EXPR-DAG: Keyword[guard]/None: guard; typename=; +// GLOBAL_EXPR-DAG: Keyword[try]/None: try; typename=; +// GLOBAL_EXPR-DAG: Keyword[try]/None: try!; typename=; +// GLOBAL_EXPR-DAG: Keyword/None: Any; typename=Any; +// GLOBAL_EXPR-DAG: Literal[Integer]/None: 0; typename=Int; +// GLOBAL_EXPR-DAG: Literal[Boolean]/None: true; typename=Bool; +// GLOBAL_EXPR-DAG: Literal[Boolean]/None: false; typename=Bool; +// GLOBAL_EXPR-DAG: Literal[Nil]/None: nil; typename=; +// GLOBAL_EXPR-DAG: Literal[String]/None: "abc"; typename=String; +// GLOBAL_EXPR-DAG: Literal[Array]/None: [values]; typename=Array; +// GLOBAL_EXPR-DAG: Literal[Dictionary]/None: [key: value]; typename=Dictionary; +// GLOBAL_EXPR-DAG: Literal[_Color]/None: #colorLiteral(red: Float, green: Float, blue: Float, alpha: Float); typename=; +// GLOBAL_EXPR-DAG: Literal[_Image]/None: #imageLiteral(resourceName: String); typename=; +// GLOBAL_EXPR-DAG: Literal[Tuple]/None: (values); typename=; +// GLOBAL_EXPR-DAG: Keyword[#function]/None: #function; typename=String; +// GLOBAL_EXPR-DAG: Decl[Module]/None/IsSystem: Swift; typename=Module; +// GLOBAL_EXPR-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int; typename=Int; +// GLOBAL_EXPR-DAG: Decl[FreeFunction]/OtherModule[Swift]/IsSystem: print(_ items: Any..., to output: &TextOutputStream); typename=Void; // GLOBAL_EXPR: End completions func testType(value: #^GLOBAL_TYPE^#) {} // GLOBAL_TYPE: Begin completions -// GLOBAL_TYPE-DAG: Keyword/None: Any; name=Any -// GLOBAL_TYPE-DAG: Decl[Struct]/CurrModule: MyStruct; name=MyStruct -// GLOBAL_TYPE-DAG: Decl[Module]/None: swift_ide_test; name=swift_ide_test -// GLOBAL_TYPE-DAG: Decl[Module]/None: Swift; name=Swift -// GLOBAL_TYPE-DAG: Decl[Struct]/OtherModule[Swift]: Int; name=Int +// GLOBAL_TYPE-DAG: Keyword/None: Any; typename=Any; +// GLOBAL_TYPE-DAG: Decl[Struct]/CurrModule: MyStruct; typename=MyStruct; +// GLOBAL_TYPE-DAG: Decl[Module]/None: swift_ide_test; typename=Module; +// GLOBAL_TYPE-DAG: Decl[Module]/None/IsSystem: Swift; typename=Module; +// GLOBAL_TYPE-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int; typename=Int; // GLOBAL_TYPE: End completions @@ -67,38 +67,38 @@ func testMember(value: MyStruct) { value.#^EXPR_MEMBER^# } // EXPR_MEMBER: Begin completions, 7 items -// EXPR_MEMBER-DAG: Keyword[self]/CurrNominal: self; name=self -// EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: propNormal; name=propNormal -// EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: propFunction; name=propFunction -// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows; name=labelNameParamName(label: (inout Int) throws -> MyStruct) rethrows -// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: labelName(label: (@autoclosure () -> Int) -> Int); name=labelName(label: (@autoclosure () -> Int) -> Int) -// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: sameName(label: &Int); name=sameName(label: &Int) -// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: paramName(_ param: Int); name=paramName(param: Int) +// EXPR_MEMBER-DAG: Keyword[self]/CurrNominal: self; typename=MyStruct; +// EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: propNormal; typename=Int; +// EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: propFunction; typename=() -> MyStruct; +// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows; typename=Void; +// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: labelName(label: (@autoclosure () -> Int) -> Int); typename=Void; +// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: sameName(label: &Int); typename=Void; +// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: paramName(_ param: Int); typename=Void; // EXPR_MEMBER: End completions func testPostfix(value: MyStruct) { value #^EXPR_POSTFIX^# } // EXPR_POSTFIX: Begin completions, 10 items -// EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: propNormal; name=propNormal -// EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: propFunction; name=propFunction -// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows; name=labelNameParamName(label: (inout Int) throws -> MyStruct) rethrows -// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: labelName(label: (@autoclosure () -> Int) -> Int); name=labelName(label: (@autoclosure () -> Int) -> Int) -// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: sameName(label: &Int); name=sameName(label: &Int) -// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: paramName(_ param: Int); name=paramName(param: Int) -// EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [_ param: Int]; name=[param: Int] -// EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [label param: Int]; name=[label: Int] -// EXPR_POSTFIX-DAG: Keyword[self]/CurrNominal: self; name=self -// EXPR_POSTFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: +; name=+ MyStruct +// EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: propNormal; typename=Int; +// EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: propFunction; typename=() -> MyStruct; +// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows; typename=Void; +// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: labelName(label: (@autoclosure () -> Int) -> Int); typename=Void; +// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: sameName(label: &Int); typename=Void; +// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: paramName(_ param: Int); typename=Void; +// EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [_ param: Int]; typename=Int; +// EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [label param: Int]; typename=Int; +// EXPR_POSTFIX-DAG: Keyword[self]/CurrNominal: self; typename=MyStruct; +// EXPR_POSTFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: +; typename=MyStruct; // EXPR_POSTFIX: End completions func testImplicitMember() -> MyStruct { return .#^EXPR_IMPLICITMEMBER^# } // EXPR_IMPLICITMEMBER: Begin completions, 3 items -// EXPR_IMPLICITMEMBER-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init(x: Int); name=init(x: Int) -// EXPR_IMPLICITMEMBER-DAG: Decl[StaticVar]/ExprSpecific/TypeRelation[Identical]: instance; name=instance -// EXPR_IMPLICITMEMBER-DAG: Decl[StaticMethod]/ExprSpecific/TypeRelation[Identical]: create(x: Int); name=create(x: Int) +// EXPR_IMPLICITMEMBER-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init(x: Int); typename=MyStruct; +// EXPR_IMPLICITMEMBER-DAG: Decl[StaticVar]/ExprSpecific/TypeRelation[Identical]: instance; typename=MyStruct; +// EXPR_IMPLICITMEMBER-DAG: Decl[StaticMethod]/ExprSpecific/TypeRelation[Identical]: create(x: Int); typename=MyStruct; // EXPR_IMPLICITMEMBER: End completions func testArgument() -> MyStruct { @@ -106,6 +106,6 @@ func testArgument() -> MyStruct { foo(x: 1, #^CALLARG^# } // CALLARG: Begin completions, 1 items -// CALLARG-DAG: Pattern/ExprSpecific: y: Int; name=y: Int +// CALLARG-DAG: Pattern/ExprSpecific: y: Int; typename=Int // CALLARG: End completions diff --git a/test/IDE/complete_at_start_1.swift b/test/IDE/complete_at_start_1.swift index c5c410b195ac4..6d3fca0754038 100644 --- a/test/IDE/complete_at_start_1.swift +++ b/test/IDE/complete_at_start_1.swift @@ -8,11 +8,11 @@ // A-DAG: Literal[Boolean]/None: true[#Bool#]{{; name=.+$}} // A-DAG: Literal[Boolean]/None: false[#Bool#]{{; name=.+$}} // A-DAG: Literal[Nil]/None: nil{{; name=.+$}} -// A-DAG: Decl[Struct]/OtherModule[Swift]: Int8[#Int8#]{{; name=.+$}} -// A-DAG: Decl[Struct]/OtherModule[Swift]: Int16[#Int16#]{{; name=.+$}} -// A-DAG: Decl[Struct]/OtherModule[Swift]: Int32[#Int32#]{{; name=.+$}} -// A-DAG: Decl[Struct]/OtherModule[Swift]: Int64[#Int64#]{{; name=.+$}} -// A-DAG: Decl[Struct]/OtherModule[Swift]: Bool[#Bool#]{{; name=.+$}} +// A-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int8[#Int8#]{{; name=.+$}} +// A-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int16[#Int16#]{{; name=.+$}} +// A-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int32[#Int32#]{{; name=.+$}} +// A-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int64[#Int64#]{{; name=.+$}} +// A-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Bool[#Bool#]{{; name=.+$}} // A: End completions // This function just adds more non-comment tokens to ensure that the file is not empty. diff --git a/test/IDE/complete_at_top_level.swift b/test/IDE/complete_at_top_level.swift index 73154457906d0..681177f0d5372 100644 --- a/test/IDE/complete_at_top_level.swift +++ b/test/IDE/complete_at_top_level.swift @@ -435,8 +435,8 @@ func resyncParserB11() {} // rdar://21346928 func optStr() -> String? { return nil } let x = (optStr() ?? "autoclosure").#^TOP_LEVEL_AUTOCLOSURE_1^# -// AUTOCLOSURE_STRING: Decl[InstanceVar]/CurrNominal: unicodeScalars[#String.UnicodeScalarView#] -// AUTOCLOSURE_STRING: Decl[InstanceVar]/CurrNominal: utf16[#String.UTF16View#] +// AUTOCLOSURE_STRING: Decl[InstanceVar]/CurrNominal/IsSystem: unicodeScalars[#String.UnicodeScalarView#] +// AUTOCLOSURE_STRING: Decl[InstanceVar]/CurrNominal/IsSystem: utf16[#String.UTF16View#] func resyncParserB12() {} @@ -470,7 +470,7 @@ func resyncParserB14() {} var stringInterp = "\(#^STRING_INTERP_3^#)" _ = "" + "\(#^STRING_INTERP_4^#)" + "" // STRING_INTERP: Begin completions -// STRING_INTERP-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#(value): T#}[')'][#Void#]; +// STRING_INTERP-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: ['(']{#(value): T#}[')'][#Void#]; // STRING_INTERP-DAG: Decl[Struct]/CurrModule: FooStruct[#FooStruct#]; // STRING_INTERP-DAG: Decl[FreeFunction]/CurrModule/TypeRelation[Invalid]: fooFunc1()[#Void#]; // STRING_INTERP-DAG: Decl[FreeFunction]/CurrModule: optStr()[#String?#]; diff --git a/test/IDE/complete_cache.swift b/test/IDE/complete_cache.swift index 9370f41e99a6f..bea95625aad7e 100644 --- a/test/IDE/complete_cache.swift +++ b/test/IDE/complete_cache.swift @@ -57,21 +57,21 @@ import ctypes @_private(sourceFile: "AppKit.swift") import AppKit // CLANG_CTYPES: Begin completions -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/keyword[Foo1, Struct1]: FooStruct1[#FooStruct1#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/keyword[Foo2]: FooStruct2[#FooStruct2#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/recommended[Foo2, Foo1]: FooStruct3[#FooStruct3#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/recommendedover[Foo3, Foo2]: FooStruct4[#FooStruct4#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]: FooStruct5[#FooStruct5#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/recommendedover[ro1, ro2, ro3, ro4]/recommended[r1, r2, r3]/keyword[k1, k2, k3, k4]: FooStruct6[#FooStruct6#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[TypeAlias]/OtherModule[ctypes]/keyword[Foo2]: FooStructTypedef1[#FooStruct2#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/keyword[Foo1, Struct1]: FooStruct1[#FooStruct1#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/keyword[Foo2]: FooStruct2[#FooStruct2#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/recommended[Foo2, Foo1]: FooStruct3[#FooStruct3#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/recommendedover[Foo3, Foo2]: FooStruct4[#FooStruct4#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem: FooStruct5[#FooStruct5#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/recommendedover[ro1, ro2, ro3, ro4]/recommended[r1, r2, r3]/keyword[k1, k2, k3, k4]: FooStruct6[#FooStruct6#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[TypeAlias]/OtherModule[ctypes]/IsSystem/keyword[Foo2]: FooStructTypedef1[#FooStruct2#]{{; name=.+$}} // CLANG_CTYPES: End completions // CLANG_MACROS: Begin completions -// CLANG_MACROS-DAG: Decl[GlobalVar]/OtherModule[macros]: USES_MACRO_FROM_OTHER_MODULE_1[#Int32#]{{; name=.+$}} +// CLANG_MACROS-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: USES_MACRO_FROM_OTHER_MODULE_1[#Int32#]{{; name=.+$}} // CLANG_MACROS: End completions // CLANG_DARWIN: Begin completions -// CLANG_DARWIN-DAG: Decl[TypeAlias]/OtherModule[Darwin.MacTypes]: FourCharCode[#UInt32#]{{; name=.+$}} +// CLANG_DARWIN-DAG: Decl[TypeAlias]/OtherModule[Darwin.MacTypes]/IsSystem: FourCharCode[#UInt32#]{{; name=.+$}} // CLANG_DARWIN_NEG-NOT: FixedPtr // CLANG_DARWIN_NEG-NOT: UniCharCoun // CLANG_DARWIN: End completions @@ -83,36 +83,36 @@ func testClangModule() { func testCompleteModuleQualifiedMacros1() { macros.#^CLANG_QUAL_MACROS_1^# // CLANG_QUAL_MACROS_1: Begin completions -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: A_PI[#Double#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: CF_STRING[#String#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: EOF[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: GL_FALSE[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: GL_RGBA[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: GL_RGB[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: MINUS_THREE[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: M_PIf[#Float#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-objc-DAG: Decl[GlobalVar]/OtherModule[macros]: OBJC_STRING[#String#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: USES_MACRO_FROM_OTHER_MODULE_1[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: UTF8_STRING[#String#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: VERSION_STRING[#String#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: A_PI[#Double#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: CF_STRING[#String#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: EOF[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: GL_FALSE[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: GL_RGBA[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: GL_RGB[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: MINUS_THREE[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: M_PIf[#Float#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-objc-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: OBJC_STRING[#String#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: USES_MACRO_FROM_OTHER_MODULE_1[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: UTF8_STRING[#String#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: VERSION_STRING[#String#]{{; name=.+$}} // CLANG_QUAL_MACROS_1: End completions } func testCompleteModuleQualifiedMacros2() { macros#^CLANG_QUAL_MACROS_2^# // CLANG_QUAL_MACROS_2: Begin completions -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .A_PI[#Double#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .CF_STRING[#String#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .EOF[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .GL_FALSE[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .GL_RGBA[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .GL_RGB[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .MINUS_THREE[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .M_PIf[#Float#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-objc-DAG: Decl[GlobalVar]/OtherModule[macros]: .OBJC_STRING[#String#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .USES_MACRO_FROM_OTHER_MODULE_1[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .UTF8_STRING[#String#]{{; name=.+$}} -// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]: .VERSION_STRING[#String#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .A_PI[#Double#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .CF_STRING[#String#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .EOF[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .GL_FALSE[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .GL_RGBA[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .GL_RGB[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .MINUS_THREE[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .M_PIf[#Float#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-objc-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .OBJC_STRING[#String#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .USES_MACRO_FROM_OTHER_MODULE_1[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .UTF8_STRING[#String#]{{; name=.+$}} +// CLANG_QUAL_MACROS_2-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: .VERSION_STRING[#String#]{{; name=.+$}} // CLANG_QUAL_MACROS_2: End completions } diff --git a/test/IDE/complete_call_arg.swift b/test/IDE/complete_call_arg.swift index d545bffcf4782..ba59d28f333d1 100644 --- a/test/IDE/complete_call_arg.swift +++ b/test/IDE/complete_call_arg.swift @@ -210,7 +210,7 @@ class C1 { // EXPECT_INT-DAG: Decl[FreeFunction]/CurrModule/TypeRelation[Identical]: intGen()[#Int#]; name=intGen() // EXPECT_INT-DAG: Decl[GlobalVar]/CurrModule/TypeRelation[Identical]: i1[#Int#]; name=i1 // EXPECT_INT-DAG: Decl[GlobalVar]/CurrModule/TypeRelation[Identical]: i2[#Int#]; name=i2 -// EXPECT_INT-DAG: Decl[Struct]/OtherModule[Swift]/TypeRelation[Identical]: Int[#Int#] +// EXPECT_INT-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem/TypeRelation[Identical]: Int[#Int#] // EXPECT_INT-DAG: Decl[FreeFunction]/CurrModule: ointGen()[#Int?#]; name=ointGen() // EXPECT_INT-DAG: Decl[GlobalVar]/CurrModule: oi1[#Int?#]; name=oi1 // EXPECT_INT-DAG: Decl[GlobalVar]/CurrModule: os2[#String?#]; name=os2 @@ -249,7 +249,7 @@ class C2 { // EXPECT_STRING-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: f1()[#Void#]; name=f1() // EXPECT_STRING-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: f2()[#Void#]; name=f2() // EXPECT_STRING-DAG: Decl[FreeFunction]/CurrModule/TypeRelation[Identical]: stringGen()[#String#]; name=stringGen() -// EXPECT_STRING-DAG: Decl[Struct]/OtherModule[Swift]/TypeRelation[Identical]: String[#String#] +// EXPECT_STRING-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem/TypeRelation[Identical]: String[#String#] // EXPECT_STRING-DAG: Decl[GlobalVar]/CurrModule/TypeRelation[Identical]: s1[#String#]; name=s1 // EXPECT_STRING-DAG: Decl[GlobalVar]/CurrModule/TypeRelation[Identical]: s2[#String#]; name=s2 // EXPECT_STRING-DAG: Decl[GlobalVar]/CurrModule: os1[#String?#]; name=os1 @@ -447,10 +447,10 @@ class C4 { // MEMBER4-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: StringTaker({#(s1): String#}, {#s2: String#})[#Void#]; name=StringTaker(s1: String, s2: String) // MEMBER7: Begin completions -// MEMBER7-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: removeAll()[#Void#]; name=removeAll() -// MEMBER7-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: removeAll({#keepingCapacity: Bool#})[#Void#]; name=removeAll(keepingCapacity: Bool) -// MEMBER7-DAG: Decl[InstanceVar]/CurrNominal/TypeRelation[Convertible]: count[#Int#]; name=count -// MEMBER7-DAG: Decl[InstanceVar]/CurrNominal/TypeRelation[Convertible]: capacity[#Int#]; name=capacity +// MEMBER7-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem/TypeRelation[Invalid]: removeAll()[#Void#]; name=removeAll() +// MEMBER7-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem/TypeRelation[Invalid]: removeAll({#keepingCapacity: Bool#})[#Void#]; name=removeAll(keepingCapacity: Bool) +// MEMBER7-DAG: Decl[InstanceVar]/CurrNominal/IsSystem/TypeRelation[Convertible]: count[#Int#]; name=count +// MEMBER7-DAG: Decl[InstanceVar]/CurrNominal/IsSystem/TypeRelation[Convertible]: capacity[#Int#]; name=capacity // MEMBER8: Begin completions // MEMBER8-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Convertible]: InternalIntGen()[#Int#]; name=InternalIntGen() @@ -593,8 +593,8 @@ func testSubscript(obj: HasSubscript, intValue: Int, strValue: String) { // SUBSCRIPT_1_DOT: Begin completions // SUBSCRIPT_1_DOT-NOT: i1 // SUBSCRIPT_1_DOT-NOT: s1 -// SUBSCRIPT_1_DOT-DAG: Decl[StaticVar]/ExprSpecific: max[#Int#]; name=max -// SUBSCRIPT_1_DOT-DAG: Decl[StaticVar]/ExprSpecific: min[#Int#]; name=min +// SUBSCRIPT_1_DOT-DAG: Decl[StaticVar]/ExprSpecific/IsSystem: max[#Int#]; name=max +// SUBSCRIPT_1_DOT-DAG: Decl[StaticVar]/ExprSpecific/IsSystem: min[#Int#]; name=min let _ = obj[42, #^SUBSCRIPT_2^# // SUBSCRIPT_2: Begin completions, 1 items @@ -614,8 +614,8 @@ func testSubscript(obj: HasSubscript, intValue: Int, strValue: String) { // SUBSCRIPT_3_DOT: Begin completions // SUBSCRIPT_3_DOT-NOT: i1 // SUBSCRIPT_3_DOT-NOT: s1 -// SUBSCRIPT_3_DOT-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init()[#String#]; name=init() -// SUBSCRIPT_3_DOT-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init({#(c): Character#})[#String#]; name=init(c: Character) +// SUBSCRIPT_3_DOT-DAG: Decl[Constructor]/CurrNominal/IsSystem/TypeRelation[Identical]: init()[#String#]; name=init() +// SUBSCRIPT_3_DOT-DAG: Decl[Constructor]/CurrNominal/IsSystem/TypeRelation[Identical]: init({#(c): Character#})[#String#]; name=init(c: Character) } @@ -669,7 +669,7 @@ func testStaticMemberCall() { // STATIC_METHOD_AFTERPAREN_2: Begin completions // STATIC_METHOD_AFTERPAREN_2-DAG: Decl[StaticMethod]/CurrNominal/TypeRelation[Identical]: ['(']{#(arg1): Int#}[')'][#TestStaticMemberCall#]; // STATIC_METHOD_AFTERPAREN_2-DAG: Decl[StaticMethod]/CurrNominal/TypeRelation[Identical]: ['(']{#(arg1): Int#}, {#arg2: Int#}, {#arg3: Int#}, {#arg4: Int#}[')'][#TestStaticMemberCall#]; -// STATIC_METHOD_AFTERPAREN_2-DAG: Decl[Struct]/OtherModule[Swift]/TypeRelation[Identical]: Int[#Int#]; +// STATIC_METHOD_AFTERPAREN_2-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem/TypeRelation[Identical]: Int[#Int#]; // STATIC_METHOD_AFTERPAREN_2-DAG: Literal[Integer]/None/TypeRelation[Identical]: 0[#Int#]; // STATIC_METHOD_AFTERPAREN_2: End completions @@ -697,7 +697,7 @@ func testImplicitMember() { // IMPLICIT_MEMBER_AFTERPAREN_2: Begin completions // IMPLICIT_MEMBER_AFTERPAREN_2-DAG: Decl[StaticMethod]/CurrNominal: ['(']{#(arg1): Int#}[')'][#TestStaticMemberCall#]; // IMPLICIT_MEMBER_AFTERPAREN_2-DAG: Decl[StaticMethod]/CurrNominal: ['(']{#(arg1): Int#}, {#arg2: Int#}, {#arg3: Int#}, {#arg4: Int#}[')'][#TestStaticMemberCall#]; -// IMPLICIT_MEMBER_AFTERPAREN_2-DAG: Decl[Struct]/OtherModule[Swift]/TypeRelation[Identical]: Int[#Int#]; +// IMPLICIT_MEMBER_AFTERPAREN_2-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem/TypeRelation[Identical]: Int[#Int#]; // IMPLICIT_MEMBER_AFTERPAREN_2-DAG: Literal[Integer]/None/TypeRelation[Identical]: 0[#Int#]; // IMPLICIT_MEMBER_AFTERPAREN_2: End completions diff --git a/test/IDE/complete_crashes.swift b/test/IDE/complete_crashes.swift index 827ecdff41677..971b820219ae4 100644 --- a/test/IDE/complete_crashes.swift +++ b/test/IDE/complete_crashes.swift @@ -224,8 +224,8 @@ func foo_38149042(bar: Bar_38149042) { // RDAR_38149042: Begin completions // RDAR_38149042-DAG: Decl[InstanceVar]/CurrNominal: .x[#Int#]; name=x // RDAR_38149042-DAG: Keyword[self]/CurrNominal: .self[#Baz_38149042#]; name=self -// RDAR_38149042-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: [' ']=== {#AnyObject?#}[#Bool#]; name==== AnyObject? -// RDAR_38149042-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: [' ']!== {#AnyObject?#}[#Bool#]; name=!== AnyObject? +// RDAR_38149042-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: [' ']=== {#AnyObject?#}[#Bool#]; name==== AnyObject? +// RDAR_38149042-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: [' ']!== {#AnyObject?#}[#Bool#]; name=!== AnyObject? // RDAR_38149042: End completions // rdar://problem/38272904 @@ -291,7 +291,7 @@ public final class IntStore { } } // RDAR_41232519: Begin completions -// RDAR_41232519: Decl[InfixOperatorFunction]/OtherModule[Swift]: [' ']+ {#Int#}[#Int#]; name=+ Int +// RDAR_41232519: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: [' ']+ {#Int#}[#Int#]; name=+ Int // RDAR_41232519: End completions // rdar://problem/28188259 @@ -355,8 +355,8 @@ extension Foo { } #endif // RDAR_41234606: Begin completion -// RDAR_41234606-DAG: Decl[AssociatedType]/CurrNominal: .Element; name=Element -// RDAR_41234606-DAG: Decl[AssociatedType]/CurrNominal: .Iterator; name=Iterator +// RDAR_41234606-DAG: Decl[AssociatedType]/CurrNominal/IsSystem: .Element; name=Element +// RDAR_41234606-DAG: Decl[AssociatedType]/CurrNominal/IsSystem: .Iterator; name=Iterator // RDAR_41234606: End completions // rdar://problem/41071587 diff --git a/test/IDE/complete_cross_import.swift b/test/IDE/complete_cross_import.swift index eb561cdc6ac34..e19bdea5fd4a5 100644 --- a/test/IDE/complete_cross_import.swift +++ b/test/IDE/complete_cross_import.swift @@ -19,7 +19,7 @@ func foo() { } // COMPLETE-DAG: Decl[Module]/None: swift_ide_test[#Module#]; name=swift_ide_test -// COMPLETE-DAG: Decl[Module]/None: Swift[#Module#]; name=Swift +// COMPLETE-DAG: Decl[Module]/None/IsSystem: Swift[#Module#]; name=Swift // COMPLETE-DAG: Decl[Module]/None: B[#Module#]; name=B // COMPLETE-DAG: Decl[Module]/None: A[#Module#]; name=A // COMPLETE-DAG: Decl[FreeFunction]/OtherModule[B]: fromB()[#Void#]; name=fromB() diff --git a/test/IDE/complete_cross_import_indirect.swift b/test/IDE/complete_cross_import_indirect.swift index 0708f0e934ade..a7ec764bc81c7 100644 --- a/test/IDE/complete_cross_import_indirect.swift +++ b/test/IDE/complete_cross_import_indirect.swift @@ -15,7 +15,7 @@ func foo() { } // COMPLETE-DAG: Decl[Module]/None: swift_ide_test[#Module#]; name=swift_ide_test -// COMPLETE-DAG: Decl[Module]/None: Swift[#Module#]; name=Swift +// COMPLETE-DAG: Decl[Module]/None/IsSystem: Swift[#Module#]; name=Swift // COMPLETE-DAG: Decl[Module]/None: B[#Module#]; name=B // COMPLETE-DAG: Decl[Module]/None: A[#Module#]; name=A // COMPLETE-DAG: Decl[FreeFunction]/OtherModule[C]: fromC()[#Void#]; name=fromC() diff --git a/test/IDE/complete_cross_import_multiple.swift b/test/IDE/complete_cross_import_multiple.swift index a3bee717cf4a9..0eb334434b90e 100644 --- a/test/IDE/complete_cross_import_multiple.swift +++ b/test/IDE/complete_cross_import_multiple.swift @@ -17,7 +17,7 @@ func foo() { } // COMPLETE-DAG: Decl[Module]/None: swift_ide_test[#Module#]; name=swift_ide_test -// COMPLETE-DAG: Decl[Module]/None: Swift[#Module#]; name=Swift +// COMPLETE-DAG: Decl[Module]/None/IsSystem: Swift[#Module#]; name=Swift // COMPLETE-DAG: Decl[Module]/None: B[#Module#]; name=B // COMPLETE-DAG: Decl[Module]/None: A[#Module#]; name=A // COMPLETE-DAG: Decl[Module]/None: D[#Module#]; name=D diff --git a/test/IDE/complete_cross_import_no_underscore.swift b/test/IDE/complete_cross_import_no_underscore.swift index f6fcd2d63fa13..a07f7a977a99a 100644 --- a/test/IDE/complete_cross_import_no_underscore.swift +++ b/test/IDE/complete_cross_import_no_underscore.swift @@ -16,7 +16,7 @@ func foo() { } // COMPLETE-DAG: Decl[Module]/None: swift_ide_test[#Module#]; name=swift_ide_test -// COMPLETE-DAG: Decl[Module]/None: Swift[#Module#]; name=Swift +// COMPLETE-DAG: Decl[Module]/None/IsSystem: Swift[#Module#]; name=Swift // COMPLETE-DAG: Decl[Module]/None: B[#Module#]; name=B // COMPLETE-DAG: Decl[Module]/None: D[#Module#]; name=D // COMPLETE-DAG: Decl[FreeFunction]/OtherModule[B]: fromB()[#Void#]; name=fromB() diff --git a/test/IDE/complete_cross_import_no_underscore_imported.swift b/test/IDE/complete_cross_import_no_underscore_imported.swift index 1d686da9da22b..bea1478cef790 100644 --- a/test/IDE/complete_cross_import_no_underscore_imported.swift +++ b/test/IDE/complete_cross_import_no_underscore_imported.swift @@ -16,7 +16,7 @@ func foo() { } // COMPLETE-DAG: Decl[Module]/None: swift_ide_test[#Module#]; name=swift_ide_test -// COMPLETE-DAG: Decl[Module]/None: Swift[#Module#]; name=Swift +// COMPLETE-DAG: Decl[Module]/None/IsSystem: Swift[#Module#]; name=Swift // COMPLETE-DAG: Decl[Module]/None: B[#Module#]; name=B // COMPLETE-DAG: Decl[Module]/None: D[#Module#]; name=D // COMPLETE-DAG: Decl[FreeFunction]/OtherModule[B]: fromB()[#Void#]; name=fromB() diff --git a/test/IDE/complete_dynamic_lookup.swift b/test/IDE/complete_dynamic_lookup.swift index 14c4fcb1895fe..1dba037ded74b 100644 --- a/test/IDE/complete_dynamic_lookup.swift +++ b/test/IDE/complete_dynamic_lookup.swift @@ -232,8 +232,8 @@ protocol Bar { func bar() } // TLOC_MEMBERS_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .topLevelObjcClass_InstanceFunc1()[#Void#]{{; name=.+$}} // TLOC_MEMBERS_NO_DOT-NEXT: Decl[Subscript]/CurrNominal: [{#(i): Int8#}][#Int#]{{; name=.+$}} // TLOC_MEMBERS_NO_DOT-NEXT: Decl[InstanceVar]/CurrNominal: .topLevelObjcClass_Property1[#Int#]{{; name=.+$}} -// TLOC_MEMBERS_NO_DOT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: === {#AnyObject?#}[#Bool#]; -// TLOC_MEMBERS_NO_DOT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: !== {#AnyObject?#}[#Bool#]; +// TLOC_MEMBERS_NO_DOT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: === {#AnyObject?#}[#Bool#]; +// TLOC_MEMBERS_NO_DOT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: !== {#AnyObject?#}[#Bool#]; // TLOC_MEMBERS_NO_DOT-NEXT: Keyword[self]/CurrNominal: .self[#TopLevelObjcClass#]; name=self // TLOC_MEMBERS_NO_DOT-NEXT: End completions diff --git a/test/IDE/complete_enum_elements.swift b/test/IDE/complete_enum_elements.swift index 45b575f7f7a14..01a5138abee84 100644 --- a/test/IDE/complete_enum_elements.swift +++ b/test/IDE/complete_enum_elements.swift @@ -283,7 +283,7 @@ enum QuxEnum : Int { // QUX_ENUM_NO_DOT-NEXT: Decl[EnumElement]/CurrNominal: .Qux2[#QuxEnum#]{{; name=.+$}} // QUX_ENUM_NO_DOT-NEXT: Decl[TypeAlias]/CurrNominal: .RawValue[#Int#]{{; name=.+$}} // QUX_ENUM_NO_DOT-NEXT: Decl[Constructor]/CurrNominal: ({#rawValue: Int#})[#QuxEnum?#]{{; name=.+$}} -// QUX_ENUM_NO_DOT-NEXT: Decl[InstanceMethod]/Super: .hash({#(self): QuxEnum#})[#(into: inout Hasher) -> Void#]{{; name=.+$}} +// QUX_ENUM_NO_DOT-NEXT: Decl[InstanceMethod]/Super/IsSystem: .hash({#(self): QuxEnum#})[#(into: inout Hasher) -> Void#]{{; name=.+$}} // QUX_ENUM_NO_DOT-NEXT: Keyword[self]/CurrNominal: .self[#QuxEnum.Type#]; name=self // QUX_ENUM_NO_DOT-NEXT: Keyword/CurrNominal: .Type[#QuxEnum.Type#]; name=Type // QUX_ENUM_NO_DOT-NEXT: End completions @@ -295,7 +295,7 @@ enum QuxEnum : Int { // QUX_ENUM_DOT-NEXT: Decl[EnumElement]/CurrNominal: Qux2[#QuxEnum#]{{; name=.+$}} // QUX_ENUM_DOT-NEXT: Decl[TypeAlias]/CurrNominal: RawValue[#Int#]{{; name=.+$}} // QUX_ENUM_DOT-NEXT: Decl[Constructor]/CurrNominal: init({#rawValue: Int#})[#QuxEnum?#]{{; name=.+$}} -// QUX_ENUM_DOT-NEXT: Decl[InstanceMethod]/Super/TypeRelation[Invalid]: hash({#(self): QuxEnum#})[#(into: inout Hasher) -> Void#]{{; name=.+$}} +// QUX_ENUM_DOT-NEXT: Decl[InstanceMethod]/Super/IsSystem/TypeRelation[Invalid]: hash({#(self): QuxEnum#})[#(into: inout Hasher) -> Void#]{{; name=.+$}} // QUX_ENUM_DOT-NEXT: End completions func freeFunc() {} diff --git a/test/IDE/complete_exception.swift b/test/IDE/complete_exception.swift index 0a3fb079d354d..48d222ced7565 100644 --- a/test/IDE/complete_exception.swift +++ b/test/IDE/complete_exception.swift @@ -76,7 +76,7 @@ func test001() { // CATCH1-DAG: Decl[Class]/CurrModule: Error1[#Error1#]; name=Error1{{$}} // CATCH1-DAG: Keyword[let]/None: let{{; name=.+$}} // CATCH1-DAG: Decl[Class]/CurrModule: NoneError1[#NoneError1#]; name=NoneError1{{$}} -// CATCH1-DAG: Decl[Class]/OtherModule[Foundation]: NSError[#NSError#]{{; name=.+$}} +// CATCH1-DAG: Decl[Class]/OtherModule[Foundation]/IsSystem: NSError[#NSError#]{{; name=.+$}} } func test002() { @@ -210,13 +210,13 @@ func test014() { e.#^INSIDE_CATCH_ERR_DOT3^# } // NSERROR_DOT: Begin completions -// NSERROR_DOT-DAG: Decl[InstanceVar]/CurrNominal: domain[#String#]; name=domain -// NSERROR_DOT-DAG: Decl[InstanceVar]/CurrNominal: code[#Int#]; name=code -// NSERROR_DOT-DAG: Decl[InstanceVar]/Super: hashValue[#Int#]; name=hashValue -// NSERROR_DOT-DAG: Decl[InstanceMethod]/Super: myClass()[#AnyClass!#]; name=myClass() -// NSERROR_DOT-DAG: Decl[InstanceMethod]/Super: isEqual({#(other): NSObject!#})[#Bool#]; name=isEqual(other: NSObject!) -// NSERROR_DOT-DAG: Decl[InstanceVar]/Super: hash[#Int#]; name=hash -// NSERROR_DOT-DAG: Decl[InstanceVar]/Super: description[#String#]; name=description +// NSERROR_DOT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: domain[#String#]; name=domain +// NSERROR_DOT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: code[#Int#]; name=code +// NSERROR_DOT-DAG: Decl[InstanceVar]/Super: hashValue[#Int#]; name=hashValue +// NSERROR_DOT-DAG: Decl[InstanceMethod]/Super/IsSystem: myClass()[#AnyClass!#]; name=myClass() +// NSERROR_DOT-DAG: Decl[InstanceMethod]/Super/IsSystem: isEqual({#(other): NSObject!#})[#Bool#]; name=isEqual(other: NSObject!) +// NSERROR_DOT-DAG: Decl[InstanceVar]/Super/IsSystem: hash[#Int#]; name=hash +// NSERROR_DOT-DAG: Decl[InstanceVar]/Super/IsSystem: description[#String#]; name=description // NSERROR_DOT: End completions } func test015() { @@ -227,8 +227,8 @@ func test015() { } // Check that we can complete on the bound value; Not exhaustive.. // INT_DOT: Begin completions -// INT_DOT-DAG: Decl[InstanceVar]/Super: bigEndian[#(Int32)#]; name=bigEndian -// INT_DOT-DAG: Decl[InstanceVar]/Super: littleEndian[#(Int32)#]; name=littleEndian +// INT_DOT-DAG: Decl[InstanceVar]/Super/IsSystem: bigEndian[#(Int32)#]; name=bigEndian +// INT_DOT-DAG: Decl[InstanceVar]/Super/IsSystem: littleEndian[#(Int32)#]; name=littleEndian // INT_DOT: End completions //===--- Inside catch body top-level diff --git a/test/IDE/complete_expr_postfix_begin.swift b/test/IDE/complete_expr_postfix_begin.swift index 21242c75eaf59..1cc2d6879a4ec 100644 --- a/test/IDE/complete_expr_postfix_begin.swift +++ b/test/IDE/complete_expr_postfix_begin.swift @@ -140,11 +140,11 @@ typealias FooTypealias = Int // COMMON-DAG: Literal[Boolean]/None: true[#Bool#]{{; name=.+$}} // COMMON-DAG: Literal[Boolean]/None: false[#Bool#]{{; name=.+$}} // COMMON-DAG: Literal[Nil]/None: nil{{; name=.+$}} -// COMMON-DAG: Decl[Struct]/OtherModule[Swift]: Int8[#Int8#]{{; name=.+$}} -// COMMON-DAG: Decl[Struct]/OtherModule[Swift]: Int16[#Int16#]{{; name=.+$}} -// COMMON-DAG: Decl[Struct]/OtherModule[Swift]: Int32[#Int32#]{{; name=.+$}} -// COMMON-DAG: Decl[Struct]/OtherModule[Swift]: Int64[#Int64#]{{; name=.+$}} -// COMMON-DAG: Decl[Struct]/OtherModule[Swift]: Bool[#Bool#]{{; name=.+$}} +// COMMON-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int8[#Int8#]{{; name=.+$}} +// COMMON-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int16[#Int16#]{{; name=.+$}} +// COMMON-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int32[#Int32#]{{; name=.+$}} +// COMMON-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int64[#Int64#]{{; name=.+$}} +// COMMON-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Bool[#Bool#]{{; name=.+$}} // COMMON-DAG: Keyword[#function]/None{{(/TypeRelation\[Identical\])?}}: #function[#String#]{{; name=.+$}} // COMMON-DAG: Keyword[#file]/None{{(/TypeRelation\[Identical\])?}}: #file[#String#]{{; name=.+$}} // COMMON-DAG: Keyword[#line]/None{{(/TypeRelation\[Identical\])?}}: #line[#Int#]{{; name=.+$}} diff --git a/test/IDE/complete_expr_tuple.swift b/test/IDE/complete_expr_tuple.swift index c5d712d649836..0f2295f8b99c2 100644 --- a/test/IDE/complete_expr_tuple.swift +++ b/test/IDE/complete_expr_tuple.swift @@ -30,12 +30,12 @@ func testTupleNoDot1() { // TUPLE_NO_DOT_1: Begin completions, 10 items // TUPLE_NO_DOT_1-DAG: Pattern/CurrNominal: .0[#Int#]{{; name=.+$}} // TUPLE_NO_DOT_1-DAG: Pattern/CurrNominal: .1[#Double#]{{; name=.+$}} -// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: <= {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: >= {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: < {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: != {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: > {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: == {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: <= {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: >= {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: < {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: != {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_1-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: > {#(Int, Double)#}[#Bool#]{{; name=.+$}} // TUPLE_NO_DOT_1-DAG: BuiltinOperator/None: = {#(Int, Double)#}[#Void#]{{; name=.+$}} // TUPLE_NO_DOT_1-NEXT: Keyword[self]/CurrNominal: .self[#(Int, Double)#]; name=self // TUPLE_NO_DOT_1-NEXT: End completions @@ -47,12 +47,12 @@ func testTupleNoDot2() { // TUPLE_NO_DOT_2: Begin completions, 10 items // TUPLE_NO_DOT_2-DAG: Pattern/CurrNominal: .foo[#Int#]{{; name=.+$}} // TUPLE_NO_DOT_2-DAG: Pattern/CurrNominal: .bar[#Double#]{{; name=.+$}} -// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: <= {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: >= {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: < {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: != {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: > {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: == {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: <= {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: >= {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: < {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: != {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_2-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: > {#(Int, Double)#}[#Bool#]{{; name=.+$}} // TUPLE_NO_DOT_2-DAG: BuiltinOperator/None: = {#(foo: Int, bar: Double)#}[#Void#]{{; name=.+$}} // TUPLE_NO_DOT_2-DAG: Keyword[self]/CurrNominal: .self[#(foo: Int, bar: Double)#]; name=self // TUPLE_NO_DOT_2-NEXT: End completions @@ -64,12 +64,12 @@ func testTupleNoDot3() { // TUPLE_NO_DOT_3: Begin completions, 10 items // TUPLE_NO_DOT_3-DAG: Pattern/CurrNominal: .foo[#Int#]{{; name=.+$}} // TUPLE_NO_DOT_3-DAG: Pattern/CurrNominal: .1[#Double#]{{; name=.+$}} -// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: <= {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: >= {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: < {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: != {#(Int, Double)#}[#Bool#]{{; name=.+$}} -// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: > {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: == {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: <= {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: >= {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: < {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: != {#(Int, Double)#}[#Bool#]{{; name=.+$}} +// TUPLE_NO_DOT_3-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: > {#(Int, Double)#}[#Bool#]{{; name=.+$}} // TUPLE_NO_DOT_3-DAG: BuiltinOperator/None: = {#(foo: Int, Double)#}[#Void#]{{; name=.+$}} // TUPLE_NO_DOT_3-DAG: Keyword[self]/CurrNominal: .self[#(foo: Int, Double)#]; name=self // TUPLE_NO_DOT_3-NEXT: End completions diff --git a/test/IDE/complete_from_clang_framework.swift b/test/IDE/complete_from_clang_framework.swift index 14a2e82fd712b..4e8ffebcde5ff 100644 --- a/test/IDE/complete_from_clang_framework.swift +++ b/test/IDE/complete_from_clang_framework.swift @@ -341,7 +341,7 @@ func testExportedModuleCompletion() -> #^TYPE_MODULE_QUALIFIER^# { let x = #^EXPR_MODULE_QUALIFIER^# // MODULE_QUALIFIER: Begin completions // MODULE_QUALIFIER-DAG: Decl[Module]/None: swift_ide_test[#Module#]; name=swift_ide_test -// MODULE_QUALIFIER-DAG: Decl[Module]/None: Swift[#Module#]; name=Swift +// MODULE_QUALIFIER-DAG: Decl[Module]/None/IsSystem: Swift[#Module#]; name=Swift // MODULE_QUALIFIER-DAG: Decl[Module]/None: Foo[#Module#]; name=Foo // MODULE_QUALIFIER-DAG: Decl[Module]/None: FooHelper[#Module#]; name=FooHelper // MODULE_QUALIFIER-DAG: Decl[Module]/None: Bar[#Module#]; name=Bar diff --git a/test/IDE/complete_from_clang_importer_framework.swift b/test/IDE/complete_from_clang_importer_framework.swift index 93da9f2b5d1b7..7ec195825abf7 100644 --- a/test/IDE/complete_from_clang_importer_framework.swift +++ b/test/IDE/complete_from_clang_importer_framework.swift @@ -12,21 +12,21 @@ import ctypes import Darwin // CLANG_CTYPES: Begin completions -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/keyword[Foo1, Struct1]: FooStruct1[#FooStruct1#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/keyword[Foo2]: FooStruct2[#FooStruct2#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/recommended[Foo2, Foo1]: FooStruct3[#FooStruct3#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/recommendedover[Foo3, Foo2]: FooStruct4[#FooStruct4#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]: FooStruct5[#FooStruct5#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/recommendedover[ro1, ro2, ro3, ro4]/recommended[r1, r2, r3]/keyword[k1, k2, k3, k4]: FooStruct6[#FooStruct6#]{{; name=.+$}} -// CLANG_CTYPES-DAG: Decl[TypeAlias]/OtherModule[ctypes]/keyword[Foo2]: FooStructTypedef1[#FooStruct2#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/keyword[Foo1, Struct1]: FooStruct1[#FooStruct1#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/keyword[Foo2]: FooStruct2[#FooStruct2#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/recommended[Foo2, Foo1]: FooStruct3[#FooStruct3#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/recommendedover[Foo3, Foo2]: FooStruct4[#FooStruct4#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem: FooStruct5[#FooStruct5#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[Struct]/OtherModule[ctypes]/IsSystem/recommendedover[ro1, ro2, ro3, ro4]/recommended[r1, r2, r3]/keyword[k1, k2, k3, k4]: FooStruct6[#FooStruct6#]{{; name=.+$}} +// CLANG_CTYPES-DAG: Decl[TypeAlias]/OtherModule[ctypes]/IsSystem/keyword[Foo2]: FooStructTypedef1[#FooStruct2#]{{; name=.+$}} // CLANG_CTYPES: End completions // CLANG_MACROS: Begin completions -// CLANG_MACROS-DAG: Decl[GlobalVar]/OtherModule[macros]: USES_MACRO_FROM_OTHER_MODULE_1[#Int32#]{{; name=.+$}} +// CLANG_MACROS-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: USES_MACRO_FROM_OTHER_MODULE_1[#Int32#]{{; name=.+$}} // CLANG_MACROS: End completions // CLANG_DARWIN: Begin completions -// CLANG_DARWIN-DAG: Decl[TypeAlias]/OtherModule[Darwin.MacTypes]: FourCharCode[#UInt32#]{{; name=.+$}} +// CLANG_DARWIN-DAG: Decl[TypeAlias]/OtherModule[Darwin.MacTypes]/IsSystem: FourCharCode[#UInt32#]{{; name=.+$}} // CLANG_DARWIN_NEG-NOT: FixedPtr // CLANG_DARWIN_NEG-NOT: UniCharCoun // CLANG_DARWIN: End completions @@ -38,21 +38,21 @@ func testClangModule() { func testCompleteModuleQualifiedMacros1() { macros.#^CLANG_QUAL_MACROS_1^# // CLANG_QUAL_MACROS_1: Begin completions, 16 items -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: A_PI[#CDouble#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: CF_STRING[#CString#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: EOF[#Int32#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: GL_FALSE[#Int32#]{{$}`} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: GL_RGBA[#CInt#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: GL_RGB[#CInt#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: INT64_MAX[#CLongLong#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: MACRO_FROM_IMPL[#CInt#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: MINUS_THREE[#CInt#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: M_PIf[#CFloat#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: OBJC_STRING[#String#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: UINT32_MAX[#CUnsignedInt#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: USES_MACRO_FROM_OTHER_MODULE_1[#CInt#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: UTF8_STRING[#CString#]{{; name=.+$}} -// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]: VERSION_STRING[#CString#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: A_PI[#CDouble#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: CF_STRING[#CString#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: EOF[#Int32#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: GL_FALSE[#Int32#]{{$}`} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: GL_RGBA[#CInt#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: GL_RGB[#CInt#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: INT64_MAX[#CLongLong#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: MACRO_FROM_IMPL[#CInt#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: MINUS_THREE[#CInt#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: M_PIf[#CFloat#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: OBJC_STRING[#String#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: UINT32_MAX[#CUnsignedInt#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: USES_MACRO_FROM_OTHER_MODULE_1[#CInt#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: UTF8_STRING[#CString#]{{; name=.+$}} +// CLANG_QUAL_MACROS_1-DAG: Decl[GlobalVar]/OtherModule[macros]/IsSystem: VERSION_STRING[#CString#]{{; name=.+$}} // CLANG_QUAL_MACROS_1: End completions } @@ -60,7 +60,7 @@ func testClangMember1() { var FS = FooStruct1() FS.#^CLANG_MEMBER1^# // CLANG_MEMBERS1: Begin completions, 3 items -// CLANG_MEMBERS1-DAG: Decl[InstanceVar]/CurrNominal/keyword[x, Struct1]/recommended[y]: x[#Int32#]{{; name=.+$}} -// CLANG_MEMBERS1-DAG: Decl[InstanceVar]/CurrNominal/keyword[y, Struct1]/recommendedover[x]: y[#Double#]{{; name=.+$}} +// CLANG_MEMBERS1-DAG: Decl[InstanceVar]/CurrNominal/IsSystem/keyword[x, Struct1]/recommended[y]: x[#Int32#]{{; name=.+$}} +// CLANG_MEMBERS1-DAG: Decl[InstanceVar]/CurrNominal/IsSystem/keyword[y, Struct1]/recommendedover[x]: y[#Double#]{{; name=.+$}} // CLANG_MEMBERS1-DAG: Keyword[self]/CurrNominal: self[#FooStruct1#]; name=self } diff --git a/test/IDE/complete_from_foundation_overlay.swift b/test/IDE/complete_from_foundation_overlay.swift index 05b59c60a045e..d5ab456ef95c4 100644 --- a/test/IDE/complete_from_foundation_overlay.swift +++ b/test/IDE/complete_from_foundation_overlay.swift @@ -17,7 +17,7 @@ import Foundation #^PLAIN_TOP_LEVEL_1^# // PLAIN_TOP_LEVEL: Begin completions -// PLAIN_TOP_LEVEL-DAG: Decl[Struct]/OtherModule[Foundation.NSURL]: URLResourceKey[#URLResourceKey#]{{; name=.+}} +// PLAIN_TOP_LEVEL-DAG: Decl[Struct]/OtherModule[Foundation.NSURL]/IsSystem: URLResourceKey[#URLResourceKey#]{{; name=.+}} // PLAIN_TOP_LEVEL: End completions func privateNominalMembers(a: String) { @@ -28,5 +28,5 @@ func privateNominalMembers(a: String) { // FIXME: we should show the qualified String.Index type. // rdar://problem/20788802 -// PRIVATE_NOMINAL_MEMBERS_1-DAG: Decl[InstanceVar]/CurrNominal: startIndex[#String.Index#]{{; name=.+$}} +// PRIVATE_NOMINAL_MEMBERS_1-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: startIndex[#String.Index#]{{; name=.+$}} // PRIVATE_NOMINAL_MEMBERS_1: End completions diff --git a/test/IDE/complete_from_stdlib.swift b/test/IDE/complete_from_stdlib.swift index 5414acdfe9238..5bbd2ed686198 100644 --- a/test/IDE/complete_from_stdlib.swift +++ b/test/IDE/complete_from_stdlib.swift @@ -72,7 +72,7 @@ #^PLAIN_TOP_LEVEL_1^# // PLAIN_TOP_LEVEL: Begin completions -// PLAIN_TOP_LEVEL-DAG: Decl[Struct]/OtherModule[Swift]: Array[#Array#]{{; name=.+$}} +// PLAIN_TOP_LEVEL-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Array[#Array#]{{; name=.+$}} // PLAIN_TOP_LEVEL: End completions func privateNominalMembers(_ a: String) { @@ -83,7 +83,7 @@ func privateNominalMembers(_ a: String) { // FIXME: we should show the qualified String.Index type. // rdar://problem/20788802 -// PRIVATE_NOMINAL_MEMBERS_1-DAG: Decl[InstanceVar]/CurrNominal: startIndex[#String.Index#]{{; name=.+$}} +// PRIVATE_NOMINAL_MEMBERS_1-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: startIndex[#String.Index#]{{; name=.+$}} // PRIVATE_NOMINAL_MEMBERS_1: End completions func protocolExtCollection1a(_ a: C) { @@ -91,7 +91,7 @@ func protocolExtCollection1a(_ a: C) { } // PRIVATE_NOMINAL_MEMBERS_2A: Begin completions -// PRIVATE_NOMINAL_MEMBERS_2A-DAG: map({#(transform): (C.Element) throws -> T##(C.Element) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_2A-DAG/IsSystem: map({#(transform): (C.Element) throws -> T##(C.Element) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}} // PRIVATE_NOMINAL_MEMBERS_2A: End completions // NEGATIVE_PRIVATE_NOMINAL_MEMBERS_2A-NOT: Decl{{.*}}: index({#before: Comparable#}) @@ -109,8 +109,8 @@ func protocolExtCollection2(_ } // PRIVATE_NOMINAL_MEMBERS_3: Begin completions -// PRIVATE_NOMINAL_MEMBERS_3-DAG: Decl[InstanceMethod]/Super: map({#(transform): (C.Element) throws -> T##(C.Element) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_3-DAG: Decl[InstanceVar]/Super: lazy[#LazySequence#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_3-DAG: Decl[InstanceMethod]/Super/IsSystem: map({#(transform): (C.Element) throws -> T##(C.Element) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_3-DAG: Decl[InstanceVar]/Super/IsSystem: lazy[#LazySequence#]{{; name=.+}} // PRIVATE_NOMINAL_MEMBERS_3-DAG: firstIndex({#where: (C.Element) throws -> Bool##(C.Element) throws -> Bool#})[' rethrows'][#Comparable?#]{{; name=.+}} // PRIVATE_NOMINAL_MEMBERS_3: End completions // NEGATIVE_PRIVATE_NOMINAL_MEMBERS_3-NOT: Decl{{.*}}: firstIndex({#({{.*}}): Self.Iterator.Element @@ -119,10 +119,10 @@ func protocolExtArray(_ a: [T]) { a.#^PRIVATE_NOMINAL_MEMBERS_4^# } // PRIVATE_NOMINAL_MEMBERS_4: Begin completions -// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: map({#(transform): (Equatable) throws -> T##(Equatable) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceVar]/Super: last[#Equatable?#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: firstIndex({#of: Equatable#})[#Int?#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: firstIndex({#where: (Equatable) throws -> Bool##(Equatable) throws -> Bool#})[' rethrows'][#Int?#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super/IsSystem: map({#(transform): (Equatable) throws -> T##(Equatable) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceVar]/Super/IsSystem: last[#Equatable?#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super/IsSystem: firstIndex({#of: Equatable#})[#Int?#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super/IsSystem: firstIndex({#where: (Equatable) throws -> Bool##(Equatable) throws -> Bool#})[' rethrows'][#Int?#]{{; name=.+}} // PRIVATE_NOMINAL_MEMBERS_4: End completions func testArchetypeReplacement1(_ a: [FOO]) { @@ -130,14 +130,14 @@ func testArchetypeReplacement1(_ a: [FOO]) { } // PRIVATE_NOMINAL_MEMBERS_5: Begin completions -// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Equatable#})[#Void#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): Equatable#}, {#at: Int#})[#Void#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super: isEmpty[#Bool#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super: first[#Equatable?#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: dropFirst({#(k): Int#})[#ArraySlice#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: dropLast({#(k): Int#})[#ArraySlice#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: prefix({#(maxLength): Int#})[#ArraySlice#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: suffix({#(maxLength): Int#})[#ArraySlice#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: append({#(newElement): Equatable#})[#Void#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: insert({#(newElement): Equatable#}, {#at: Int#})[#Void#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super/IsSystem: isEmpty[#Bool#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super/IsSystem: first[#Equatable?#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super/IsSystem: dropFirst({#(k): Int#})[#ArraySlice#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super/IsSystem: dropLast({#(k): Int#})[#ArraySlice#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super/IsSystem: prefix({#(maxLength): Int#})[#ArraySlice#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super/IsSystem: suffix({#(maxLength): Int#})[#ArraySlice#]{{; name=.+}} func testArchetypeReplacement2(_ a: [BAR]) { @@ -145,16 +145,16 @@ func testArchetypeReplacement2(_ a: [BAR]) { } // PRIVATE_NOMINAL_MEMBERS_6: Begin completions -// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Equatable#})[#Void#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): Equatable#}, {#at: Int#})[#Void#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropFirst()[#ArraySlice#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropLast()[#[Equatable]#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: enumerated()[#EnumeratedSequence<[Equatable]>#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: min({#by: (Equatable, Equatable) throws -> Bool##(Equatable, Equatable) throws -> Bool#})[' rethrows'][#Equatable?#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: max({#by: (Equatable, Equatable) throws -> Bool##(Equatable, Equatable) throws -> Bool#})[' rethrows'][#Equatable?#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: append({#(newElement): Equatable#})[#Void#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: insert({#(newElement): Equatable#}, {#at: Int#})[#Void#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super/IsSystem: dropFirst()[#ArraySlice#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super/IsSystem: dropLast()[#[Equatable]#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super/IsSystem: enumerated()[#EnumeratedSequence<[Equatable]>#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super/IsSystem: min({#by: (Equatable, Equatable) throws -> Bool##(Equatable, Equatable) throws -> Bool#})[' rethrows'][#Equatable?#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super/IsSystem: max({#by: (Equatable, Equatable) throws -> Bool##(Equatable, Equatable) throws -> Bool#})[' rethrows'][#Equatable?#]{{; name=.+}} // FIXME: The following should include 'partialResult' as local parameter name: "(nextPartialResult): (_ partialResult: Result, Equatable)" -// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: reduce({#(initialResult): Result#}, {#(nextPartialResult): (Result, Equatable) throws -> Result##(Result, Equatable) throws -> Result#})[' rethrows'][#Result#]{{; name=.+}} -// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropFirst({#(k): Int#})[#ArraySlice#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super/IsSystem: reduce({#(initialResult): Result#}, {#(nextPartialResult): (Result, Equatable) throws -> Result##(Result, Equatable) throws -> Result#})[' rethrows'][#Result#]{{; name=.+}} +// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super/IsSystem: dropFirst({#(k): Int#})[#ArraySlice#]{{; name=.+}} // FIXME: restore Decl[InstanceMethod]/Super: flatMap({#(transform): (Equatable) throws -> Sequence##(Equatable) throws -> Sequence#})[' rethrows'][#[IteratorProtocol.Element]#]{{; name=.+}} func testArchetypeReplacement3 (_ a : [Int]) { @@ -162,13 +162,13 @@ func testArchetypeReplacement3 (_ a : [Int]) { } // PRIVATE_NOMINAL_MEMBERS_7: Begin completions -// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Int#})[#Void#] -// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: removeLast()[#Int#] -// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceVar]/Super: first[#Int?#] -// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: map({#(transform): (Int) throws -> T##(Int) throws -> T#})[' rethrows'][#[T]#] -// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: dropLast({#(k): Int#})[#ArraySlice#] -// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: elementsEqual({#(other): Sequence#}, {#by: (Int, Sequence.Element) throws -> Bool##(Int, Sequence.Element) throws -> Bool#})[' rethrows'][#Bool#]; name=elementsEqual(other: Sequence, by: (Int, Sequence.Element) throws -> Bool) rethrows -// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: elementsEqual({#(other): Sequence#})[#Bool#]; name=elementsEqual(other: Sequence) +// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: append({#(newElement): Int#})[#Void#] +// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super/IsSystem: removeLast()[#Int#] +// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceVar]/Super/IsSystem: first[#Int?#] +// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super/IsSystem: map({#(transform): (Int) throws -> T##(Int) throws -> T#})[' rethrows'][#[T]#] +// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super/IsSystem: dropLast({#(k): Int#})[#ArraySlice#] +// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super/IsSystem: elementsEqual({#(other): Sequence#}, {#by: (Int, Sequence.Element) throws -> Bool##(Int, Sequence.Element) throws -> Bool#})[' rethrows'][#Bool#]; name=elementsEqual(other: Sequence, by: (Int, Sequence.Element) throws -> Bool) rethrows +// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super/IsSystem: elementsEqual({#(other): Sequence#})[#Bool#]; name=elementsEqual(other: Sequence) protocol P2 { @@ -225,8 +225,8 @@ func testPostfixOperator1(_ x: Int) { func testPostfixOperator2(_ x: inout Int) { x#^POSTFIX_INT_2^# } -// POSTFIX_LVALUE_INT-NOT: Decl[PostfixOperatorFunction]/OtherModule[Swift]: ++[#Int#]; name= -// POSTFIX_LVALUE_INT-NOT: Decl[PostfixOperatorFunction]/OtherModule[Swift]: --[#Int#]; name= +// POSTFIX_LVALUE_INT-NOT: Decl[PostfixOperatorFunction]/OtherModule[Swift]/IsSystem: ++[#Int#]; name= +// POSTFIX_LVALUE_INT-NOT: Decl[PostfixOperatorFunction]/OtherModule[Swift]/IsSystem: --[#Int#]; name= func testPostfixOperator3(_ x: MyInt??) { x#^POSTFIX_OPTIONAL_1^# @@ -237,12 +237,12 @@ func testInfixOperator1(_ x: Int) { x#^INFIX_INT_1^# } // INFIX_INT: Begin completions -// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: ... {#Int#}[#ClosedRange#] -// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: &+ {#Int#}[#Int#] -// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: + {#Int#}[#Int#] -// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: &<< {#Int#}[#Int#] -// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: < {#Int#}[#Bool#] -// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#Int#}[#Bool#] +// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: ... {#Int#}[#ClosedRange#] +// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: &+ {#Int#}[#Int#] +// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: + {#Int#}[#Int#] +// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: &<< {#Int#}[#Int#] +// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: < {#Int#}[#Bool#] +// INFIX_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: == {#Int#}[#Bool#] // INFIX_INT: End completions // NEGATIVE_INFIX_INT-NOT: && // NEGATIVE_INFIX_INT-NOT: += @@ -250,13 +250,13 @@ func testInfixOperator2(_ x: inout Int) { x#^INFIX_INT_2^# } // INFIX_LVALUE_INT: Begin completions -// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: ... {#Int#}[#ClosedRange#] -// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: &+ {#Int#}[#Int#] -// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: + {#Int#}[#Int#] -// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: &<< {#Int#}[#Int#] -// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: < {#Int#}[#Bool#] -// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#Int#}[#Bool#] -// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: += {#Int#}[#Void#] +// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: ... {#Int#}[#ClosedRange#] +// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: &+ {#Int#}[#Int#] +// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: + {#Int#}[#Int#] +// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: &<< {#Int#}[#Int#] +// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: < {#Int#}[#Bool#] +// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: == {#Int#}[#Bool#] +// INFIX_LVALUE_INT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: += {#Int#}[#Void#] // INFIX_LVALUE_INT-NOT: && // INFIX_LVALUE_INT: End completions @@ -264,9 +264,9 @@ func testInfixOperator3(_ x: String) { x#^INFIX_STRING_1^# } // INFIX_STRING: Begin completions -// INFIX_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: + {#String#}[#String#] -// INFIX_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#String#}[#Bool#] -// INFIX_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: < {#String#}[#Bool#] +// INFIX_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: + {#String#}[#String#] +// INFIX_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: == {#String#}[#Bool#] +// INFIX_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: < {#String#}[#Bool#] // INFIX_STRING-NOT: += // INFIX_STRING-NOT: << // INFIX_STRING: End completions @@ -275,19 +275,19 @@ func testInfixOperator4(_ x: String) { x == ""#^INFIX_EXT_STRING_1^# } // INFIX_EXT_STRING: Begin completions -// INFIX_EXT_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: + {#String#}[#String#] -// INFIX_EXT_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: || {#Bool#}[#Bool#] -// INFIX_EXT_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: && {#Bool#}[#Bool#] +// INFIX_EXT_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: + {#String#}[#String#] +// INFIX_EXT_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: || {#Bool#}[#Bool#] +// INFIX_EXT_STRING-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: && {#Bool#}[#Bool#] // INFIX_EXT_STRING-NOT: == // INFIX_EXT_STRING: End completions class TestSequence : Sequence { #^CONFORM_SEQUENCE^# // CONFORM_SEQUENCE: Begin completions -// CONFORM_SEQUENCE-DAG: Decl[AssociatedType]/Super: typealias Element = {#(Type)#}; -// CONFORM_SEQUENCE-DAG: Decl[AssociatedType]/Super: typealias Iterator = {#(Type)#}; -// CONFORM_SEQUENCE-DAG: Decl[InstanceMethod]/Super: func makeIterator() -> some IteratorProtocol {|}; -// CONFORM_SEQUENCE-DAG: Decl[InstanceVar]/Super: var underestimatedCount: Int; -// CONFORM_SEQUENCE-DAG: Decl[InstanceMethod]/Super: func withContiguousStorageIfAvailable(_ body: (UnsafeBufferPointer) throws -> R) rethrows -> R? {|}; +// CONFORM_SEQUENCE-DAG: Decl[AssociatedType]/Super/IsSystem: typealias Element = {#(Type)#}; +// CONFORM_SEQUENCE-DAG: Decl[AssociatedType]/Super/IsSystem: typealias Iterator = {#(Type)#}; +// CONFORM_SEQUENCE-DAG: Decl[InstanceMethod]/Super/IsSystem: func makeIterator() -> some IteratorProtocol {|}; +// CONFORM_SEQUENCE-DAG: Decl[InstanceVar]/Super/IsSystem: var underestimatedCount: Int; +// CONFORM_SEQUENCE-DAG: Decl[InstanceMethod]/Super/IsSystem: func withContiguousStorageIfAvailable(_ body: (UnsafeBufferPointer) throws -> R) rethrows -> R? {|}; // CONFORM_SEQUENCE: End completions } diff --git a/test/IDE/complete_from_swift_module.swift b/test/IDE/complete_from_swift_module.swift index 0f95c0560b344..3f193f19844ca 100644 --- a/test/IDE/complete_from_swift_module.swift +++ b/test/IDE/complete_from_swift_module.swift @@ -63,7 +63,7 @@ func testQualifyingModulesSuggested() -> #^QUALIFYING_MODULE^# { let x = #^QUALIFYING_MODULE_2^# // QUALIFYING_MODULE: Begin completions // QUALIFYING_MODULE-DAG: Decl[Module]/None: swift_ide_test[#Module#]; name=swift_ide_test - // QUALIFYING_MODULE-DAG: Decl[Module]/None: Swift[#Module#]; name=Swift + // QUALIFYING_MODULE-DAG: Decl[Module]/None/IsSystem: Swift[#Module#]; name=Swift // QUALIFYING_MODULE-DAG: Decl[Module]/None: foo_swift_module[#Module#]; name=foo_swift_module // QUALIFYING_MODULE: End completions } @@ -141,15 +141,15 @@ func testPostfixOperator1(x: Int) { struct Foo: Swift.Array.#^STDLIB_TYPE_QUALIFIED_NESTED^# {} // STDLIB_TYPE_QUALIFIED_NESTED: Begin completions -// STDLIB_TYPE_QUALIFIED_NESTED: Decl[TypeAlias]/CurrNominal: Index[#Int#]; name=Index -// STDLIB_TYPE_QUALIFIED_NESTED: Decl[TypeAlias]/CurrNominal: Element[#Element#]; name=Element +// STDLIB_TYPE_QUALIFIED_NESTED: Decl[TypeAlias]/CurrNominal/IsSystem: Index[#Int#]; name=Index +// STDLIB_TYPE_QUALIFIED_NESTED: Decl[TypeAlias]/CurrNominal/IsSystem: Element[#Element#]; name=Element // STDLIB_TYPE_QUALIFIED_NESTED: Keyword/None: Type[#Array.Type#]; name=Type // STDLIB_TYPE_QUALIFIED_NESTED: End completions struct Bar: Swift.#^STDLIB_TYPE_QUALIFIED^# {} // STDLIB_TYPE_QUALIFIED: Begin completions // STDLIB_TYPE_QUALIFIED-NOT: Decl[Module] -// STDLIB_TYPE_QUALIFIED: Decl[Struct]/OtherModule[Swift]: AnyCollection[#AnyCollection#]; name=AnyCollection +// STDLIB_TYPE_QUALIFIED: Decl[Struct]/OtherModule[Swift]/IsSystem: AnyCollection[#AnyCollection#]; name=AnyCollection // STDLIB_TYPE_QUALIFIED-NOT: Decl[Module] // STDLIB_TYPE_QUALIFIED: End completions diff --git a/test/IDE/complete_from_swiftonly_systemmodule.swift b/test/IDE/complete_from_swiftonly_systemmodule.swift index c6e0bac2bc7e1..94d81f0fb840d 100644 --- a/test/IDE/complete_from_swiftonly_systemmodule.swift +++ b/test/IDE/complete_from_swiftonly_systemmodule.swift @@ -51,9 +51,9 @@ func test(value: SomeValue) { // GLOBAL-NOT: internalFunc // GLOBAL-NOT: _SecretClass // GLOBAL-NOT: InternalClass -// GLOBAL-DAG: Decl[Struct]/OtherModule[SomeModule]: SomeValue[#SomeValue#]; -// GLOBAL-DAG: Decl[FreeFunction]/OtherModule[SomeModule]: publicFunc()[#Void#]; -// GLOBAL-DAG: Decl[Class]/OtherModule[SomeModule]: PublicClass[#PublicClass#]; name=PublicClass +// GLOBAL-DAG: Decl[Struct]/OtherModule[SomeModule]/IsSystem: SomeValue[#SomeValue#]; +// GLOBAL-DAG: Decl[FreeFunction]/OtherModule[SomeModule]/IsSystem: publicFunc()[#Void#]; +// GLOBAL-DAG: Decl[Class]/OtherModule[SomeModule]/IsSystem: PublicClass[#PublicClass#]; name=PublicClass // GLOBAL: End completions let _: #^GLOBAL_TYPE^# @@ -67,12 +67,12 @@ func test(value: SomeValue) { let _ = value.#^INSTANCE^# // INSTANCE: Begin completions, 3 items // INSTANCE-DAG: Keyword[self]/CurrNominal: self[#SomeValue#]; -// INSTANCE-DAG: Decl[InstanceVar]/CurrNominal: publicValue[#Int#]; -// INSTANCE-DAG: Decl[InstanceMethod]/CurrNominal: publicMethod()[#Int#]; +// INSTANCE-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: publicValue[#Int#]; +// INSTANCE-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: publicMethod()[#Int#]; // INSTANCE: End completions let _ = SomeValue(#^INITIALIZER^# // INITIALIZER: Begin completions, 1 items -// INITIALIZER-DAG: Decl[Constructor]/CurrNominal: ['(']{#public: Int#}[')'][#SomeValue#]; +// INITIALIZER-DAG: Decl[Constructor]/CurrNominal/IsSystem: ['(']{#public: Int#}[')'][#SomeValue#]; // INITIALIZER: End completions } diff --git a/test/IDE/complete_in_closures.swift b/test/IDE/complete_in_closures.swift index 4b2c68a308a00..f93713055ba0a 100644 --- a/test/IDE/complete_in_closures.swift +++ b/test/IDE/complete_in_closures.swift @@ -397,11 +397,11 @@ var foo = { let x = "Siesta:\(3)".#^DECL_IN_CLOSURE_IN_TOPLEVEL_INIT^# // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT: Begin completions // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Keyword[self]/CurrNominal: self[#String#]; name=self - // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceVar]/CurrNominal: count[#Int#]; name=count - // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceVar]/CurrNominal: unicodeScalars[#String.UnicodeScalarView#]; name=unicodeScalars - // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceMethod]/CurrNominal: hasPrefix({#(prefix): String#})[#Bool#]; name=hasPrefix(prefix: String) - // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceVar]/CurrNominal: utf16[#String.UTF16View#]; name=utf16 - // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceMethod]/Super: dropFirst()[#Substring#]; name=dropFirst() + // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: count[#Int#]; name=count + // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: unicodeScalars[#String.UnicodeScalarView#]; name=unicodeScalars + // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: hasPrefix({#(prefix): String#})[#Bool#]; name=hasPrefix(prefix: String) + // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: utf16[#String.UTF16View#]; name=utf16 + // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT-DAG: Decl[InstanceMethod]/Super/IsSystem: dropFirst()[#Substring#]; name=dropFirst() // DECL_IN_CLOSURE_IN_TOPLEVEL_INIT: End completions } @@ -409,8 +409,8 @@ func testWithMemoryRebound(_ bar: UnsafePointer) { _ = bar.withMemoryRebound(to: Int64.self, capacity: 3) { ptr in return ptr #^SINGLE_EXPR_CLOSURE_CONTEXT^# // SINGLE_EXPR_CLOSURE_CONTEXT: Begin completions - // SINGLE_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceMethod]/CurrNominal: .deallocate()[#Void#]; name=deallocate() - // SINGLE_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceVar]/CurrNominal: .pointee[#Int64#]; name=pointee + // SINGLE_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: .deallocate()[#Void#]; name=deallocate() + // SINGLE_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .pointee[#Int64#]; name=pointee // SINGLE_EXPR_CLOSURE_CONTEXT: End completions } } @@ -419,14 +419,14 @@ func testInsideTernaryClosureReturn(test: Bool) -> [String] { return "hello".map { thing in test ? String(thing #^SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT^#).uppercased() : String(thing).lowercased() // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT: Begin completions - // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceVar]/CurrNominal: .utf8[#Character.UTF8View#]; name=utf8 - // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceVar]/CurrNominal: .description[#String#]; name=description - // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceVar]/CurrNominal: .isWhitespace[#Bool#]; name=isWhitespace - // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceMethod]/CurrNominal: .uppercased()[#String#]; name=uppercased() - // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: [' ']... {#String.Element#}[#ClosedRange#]; name=... String.Element - // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: [' ']< {#Character#}[#Bool#]; name=< Character - // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: [' ']>= {#String.Element#}[#Bool#]; name=>= String.Element - // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: [' ']== {#Character#}[#Bool#]; name=== Character + // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .utf8[#Character.UTF8View#]; name=utf8 + // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .description[#String#]; name=description + // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .isWhitespace[#Bool#]; name=isWhitespace + // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: .uppercased()[#String#]; name=uppercased() + // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: [' ']... {#String.Element#}[#ClosedRange#]; name=... String.Element + // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: [' ']< {#Character#}[#Bool#]; name=< Character + // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: [' ']>= {#String.Element#}[#Bool#]; name=>= String.Element + // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: [' ']== {#Character#}[#Bool#]; name=== Character // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT-DAG: Keyword[self]/CurrNominal: .self[#String.Element#]; name=self // SINGLE_TERNARY_EXPR_CLOSURE_CONTEXT: End completions } diff --git a/test/IDE/complete_literal.swift b/test/IDE/complete_literal.swift index 253f3a058a303..836885cee0f92 100644 --- a/test/IDE/complete_literal.swift +++ b/test/IDE/complete_literal.swift @@ -13,55 +13,55 @@ 1.#^LITERAL1^# } // LITERAL1: Begin completions -// LITERAL1-DAG: Decl[InstanceVar]/Super: bigEndian[#Int#]; name=bigEndian{{$}} -// LITERAL1-DAG: Decl[InstanceVar]/Super: littleEndian[#Int#]; name=littleEndian{{$}} -// LITERAL1-DAG: Decl[InstanceVar]/CurrNominal: byteSwapped[#Int#]; name=byteSwapped{{$}} -// LITERAL1-DAG: Decl[InstanceVar]/CurrNominal: nonzeroBitCount[#Int#]; name=nonzeroBitCount{{$}} +// LITERAL1-DAG: Decl[InstanceVar]/Super/IsSystem: bigEndian[#Int#]; name=bigEndian{{$}} +// LITERAL1-DAG: Decl[InstanceVar]/Super/IsSystem: littleEndian[#Int#]; name=littleEndian{{$}} +// LITERAL1-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: byteSwapped[#Int#]; name=byteSwapped{{$}} +// LITERAL1-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: nonzeroBitCount[#Int#]; name=nonzeroBitCount{{$}} { 1.1.#^LITERAL2^# } // LITERAL2: Begin completions -// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal: isNormal[#Bool#]; name=isNormal{{$}} -// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal: isFinite[#Bool#]; name=isFinite{{$}} -// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal: isZero[#Bool#]; name=isZero{{$}} -// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal: isSubnormal[#Bool#]; name=isSubnormal{{$}} -// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal: isInfinite[#Bool#]; name=isInfinite{{$}} -// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal: isNaN[#Bool#]; name=isNaN{{$}} +// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: isNormal[#Bool#]; name=isNormal{{$}} +// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: isFinite[#Bool#]; name=isFinite{{$}} +// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: isZero[#Bool#]; name=isZero{{$}} +// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: isSubnormal[#Bool#]; name=isSubnormal{{$}} +// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: isInfinite[#Bool#]; name=isInfinite{{$}} +// LITERAL2-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: isNaN[#Bool#]; name=isNaN{{$}} { true.#^LITERAL3^# } // LITERAL3: Begin completions -// LITERAL3-DAG: Decl[InstanceVar]/CurrNominal: description[#String#]; name=description{{$}} -// LITERAL3-DAG: Decl[InstanceVar]/CurrNominal: hashValue[#Int#]; name=hashValue{{$}} +// LITERAL3-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: description[#String#]; name=description{{$}} +// LITERAL3-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: hashValue[#Int#]; name=hashValue{{$}} { "swift".#^LITERAL4^# } // LITERAL4: Begin completions -// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal: withCString({#(body): (UnsafePointer) throws -> Result##(UnsafePointer) throws -> Result#})[' rethrows'][#Result#]; name=withCString(body: (UnsafePointer) throws -> Result) rethrows{{$}} +// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: withCString({#(body): (UnsafePointer) throws -> Result##(UnsafePointer) throws -> Result#})[' rethrows'][#Result#]; name=withCString(body: (UnsafePointer) throws -> Result) rethrows{{$}} // FIXME: we should show the qualified String.Index type. // rdar://problem/20788802 -// LITERAL4-DAG: Decl[InstanceVar]/CurrNominal: startIndex[#String.Index#]; name=startIndex{{$}} -// LITERAL4-DAG: Decl[InstanceVar]/CurrNominal: endIndex[#String.Index#]; name=endIndex{{$}} -// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal: append({#(c): Character#})[#Void#]; name=append(c: Character){{$}} -// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal: append({#contentsOf: Sequence#})[#Void#]; name=append(contentsOf: Sequence){{$}} -// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal: insert({#contentsOf: Collection#}, {#at: String.Index#})[#Void#]; name=insert(contentsOf: Collection, at: String.Index){{$}} -// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal: remove({#at: String.Index#})[#Character#]; name=remove(at: String.Index){{$}} -// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal: lowercased()[#String#]; name=lowercased(){{$}} +// LITERAL4-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: startIndex[#String.Index#]; name=startIndex{{$}} +// LITERAL4-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: endIndex[#String.Index#]; name=endIndex{{$}} +// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: append({#(c): Character#})[#Void#]; name=append(c: Character){{$}} +// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: append({#contentsOf: Sequence#})[#Void#]; name=append(contentsOf: Sequence){{$}} +// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: insert({#contentsOf: Collection#}, {#at: String.Index#})[#Void#]; name=insert(contentsOf: Collection, at: String.Index){{$}} +// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: remove({#at: String.Index#})[#Character#]; name=remove(at: String.Index){{$}} +// LITERAL4-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem: lowercased()[#String#]; name=lowercased(){{$}} func giveMeAString() -> Int { // rdar://22637799 return "Here's a string".#^LITERAL5^# // try .characters.count here } -// LITERAL5-DAG: Decl[InstanceVar]/CurrNominal: endIndex[#String.Index#]{{; name=.+$}} -// LITERAL5-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: reserveCapacity({#(n): Int#})[#Void#]{{; name=.+$}} -// LITERAL5-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: append({#(c): Character#})[#Void#]{{; name=.+$}} -// LITERAL5-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: append({#contentsOf: Sequence#})[#Void#]{{; name=.+$}} +// LITERAL5-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: endIndex[#String.Index#]{{; name=.+$}} +// LITERAL5-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem/TypeRelation[Invalid]: reserveCapacity({#(n): Int#})[#Void#]{{; name=.+$}} +// LITERAL5-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem/TypeRelation[Invalid]: append({#(c): Character#})[#Void#]{{; name=.+$}} +// LITERAL5-DAG: Decl[InstanceMethod]/CurrNominal/IsSystem/TypeRelation[Invalid]: append({#contentsOf: Sequence#})[#Void#]{{; name=.+$}} struct MyColor: _ExpressibleByColorLiteral { init(_colorLiteralRed: Float, green: Float, blue: Float, alpha: Float) { red = colorLiteralRed } @@ -82,17 +82,17 @@ func testColor12() { func testArray(f1: Float) { _ = [1, 2, f1] #^LITERAL8^# } -// LITERAL8-DAG: Decl[InstanceVar]/CurrNominal: .count[#Int#]; name=count -// LITERAL8-DAG: Decl[InstanceVar]/Super: .first[#Float?#]; name=first +// LITERAL8-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .count[#Int#]; name=count +// LITERAL8-DAG: Decl[InstanceVar]/Super/IsSystem: .first[#Float?#]; name=first func testDict(f1: Float) { _ = ["foo": f1, "bar": "baz"] #^LITERAL9^# } -// LITERAL9-DAG: Decl[InstanceVar]/CurrNominal: .keys[#Dictionary.Keys#]; name=keys -// LITERAL9-DAG: Decl[InstanceVar]/CurrNominal: .isEmpty[#Bool#]; name=isEmpty +// LITERAL9-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .keys[#Dictionary.Keys#]; name=keys +// LITERAL9-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .isEmpty[#Bool#]; name=isEmpty func testEditorPlaceHolder() { _ = <#T##foo##String#> #^LITERAL10^# } -// LITERAL10-DAG: Decl[InstanceVar]/CurrNominal: .utf16[#String.UTF16View#]; name=utf16 -// LITERAL10-DAG: Decl[InstanceVar]/CurrNominal: .utf8[#String.UTF8View#]; name=utf8 +// LITERAL10-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .utf16[#String.UTF16View#]; name=utf16 +// LITERAL10-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .utf8[#String.UTF8View#]; name=utf8 diff --git a/test/IDE/complete_multifile.swift b/test/IDE/complete_multifile.swift index 8dd332f36d5ec..76ad114431658 100644 --- a/test/IDE/complete_multifile.swift +++ b/test/IDE/complete_multifile.swift @@ -82,7 +82,7 @@ func testRawRepresentable() { // MYENUM_DOT-DAG: Decl[Constructor]/CurrNominal: init({#rawValue: String#})[#MyEnum?#]; // MYENUM_DOT-DAG: Decl[TypeAlias]/CurrNominal: AllCases[#[MyEnum]#]; // MYENUM_DOT-DAG: Decl[StaticVar]/CurrNominal: allCases[#[MyEnum]#]; -// MYENUM_DOT-DAG: Decl[InstanceMethod]/Super: hash({#(self): MyEnum#})[#(into: inout Hasher) -> Void#]; +// MYENUM_DOT-DAG: Decl[InstanceMethod]/Super/IsSystem: hash({#(self): MyEnum#})[#(into: inout Hasher) -> Void#]; // MYENUM_DOT: End completions } func testRawRepesentableInstance(value: MyEnum) { @@ -90,8 +90,8 @@ func testRawRepesentableInstance(value: MyEnum) { // MYENUM_INSTANCE_DOT: Begin completions, 4 items // MYENUM_INSTANCE_DOT-DAG: Keyword[self]/CurrNominal: self[#MyEnum#]; // MYENUM_INSTANCE_DOT-DAG: Decl[InstanceVar]/CurrNominal: rawValue[#String#]; -// MYENUM_INSTANCE_DOT-DAG: Decl[InstanceVar]/Super: hashValue[#Int#]; -// MYENUM_INSTANCE_DOT-DAG: Decl[InstanceMethod]/Super: hash({#into: &Hasher#})[#Void#]; +// MYENUM_INSTANCE_DOT-DAG: Decl[InstanceVar]/Super/IsSystem: hashValue[#Int#]; +// MYENUM_INSTANCE_DOT-DAG: Decl[InstanceMethod]/Super/IsSystem: hash({#into: &Hasher#})[#Void#]; // MYENUM_INSTANCE_DOT: End completions } func testHasWrappedValue(value: HasWrapped) { diff --git a/test/IDE/complete_multiple_trailingclosure.swift b/test/IDE/complete_multiple_trailingclosure.swift index 5fa03207a0169..f75dab6080939 100644 --- a/test/IDE/complete_multiple_trailingclosure.swift +++ b/test/IDE/complete_multiple_trailingclosure.swift @@ -51,7 +51,7 @@ func testMethod(value: MyStruct) { // METHOD_SAMELINE: Begin completions, 4 items // METHOD_SAMELINE-DAG: Pattern/ExprSpecific: {#fn2: (() -> String)? {() -> String in|}#}[#(() -> String)?#]; // METHOD_SAMELINE-DAG: Decl[InstanceMethod]/CurrNominal: .enumFunc()[#Void#]; -// METHOD_SAMELINE-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: [' ']+ {#SimpleEnum#}[#SimpleEnum#]; +// METHOD_SAMELINE-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: [' ']+ {#SimpleEnum#}[#SimpleEnum#]; // METHOD_SAMELINE-DAG: Keyword[self]/CurrNominal: .self[#SimpleEnum#]; // METHOD_SAMELINE: End completions diff --git a/test/IDE/complete_operators.swift b/test/IDE/complete_operators.swift index a2be1ac431fcd..51c250c0a6b1f 100644 --- a/test/IDE/complete_operators.swift +++ b/test/IDE/complete_operators.swift @@ -168,7 +168,7 @@ func testInfix1(x: S2) { } // S2_INFIX: Begin completions // FIXME: rdar://problem/22997089 - should be CurrModule -// S2_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: + {#S2#}[#S2#] +// S2_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: + {#S2#}[#S2#] // S2_INFIX-DAG: Decl[InfixOperatorFunction]/CurrModule: ** {#Int#}[#S2#]; name=** // S2_INFIX: End completions // NEGATIVE_S2_INFIX-NOT: **= @@ -184,7 +184,7 @@ func testInfix2(x: inout S2) { } // S2_INFIX_LVALUE: Begin completions // FIXME: rdar://problem/22997089 - should be CurrModule -// S2_INFIX_LVALUE-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: + {#S2#}[#S2#] +// S2_INFIX_LVALUE-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: + {#S2#}[#S2#] // S2_INFIX_LVALUE-DAG: Decl[InfixOperatorFunction]/CurrModule: ** {#Int#}[#S2#] // S2_INFIX_LVALUE-DAG: Decl[InfixOperatorFunction]/CurrModule: **= {#Int#}[#Void#] // S2_INFIX_LVALUE-DAG: BuiltinOperator/None: = {#S2#}[#Void#] @@ -215,9 +215,9 @@ func testInfix7(x: S2?) { x#^INFIX_7^# } // S2_INFIX_OPTIONAL: Begin completions -// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: != {#{{.*}}#}[#Bool#] -// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#{{.*}}#}[#Bool#] -// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: ?? {#S2#}[#S2#]; name=?? S2 +// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: != {#{{.*}}#}[#Bool#] +// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: == {#{{.*}}#}[#Bool#] +// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: ?? {#S2#}[#S2#]; name=?? S2 // S2_INFIX_OPTIONAL: End completions // The equality operators don't come from equatable. // NEGATIVE_S2_INFIX_OPTIONAL-NOT: == {#S2 @@ -231,7 +231,7 @@ func testInfix8(x: S3?) { } // The equality operators come from equatable. // S3_INFIX_OPTIONAL: Begin completions -// S3_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#S3?#}[#Bool#] +// S3_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: == {#S3?#}[#Bool#] // S3_INFIX_OPTIONAL: End completions infix operator **** { @@ -301,12 +301,12 @@ func testInfix17(x: Void) { } // VOID_OPERATORS: Begin completions -// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: != {#()#}[#Bool#]; name=!= () -// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#()#}[#Bool#]; name=== () -// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: <= {#()#}[#Bool#]; name=<= () -// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: >= {#()#}[#Bool#]; name=>= () -// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: < {#()#}[#Bool#]; name=< () -// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: > {#()#}[#Bool#]; name=> () +// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: != {#()#}[#Bool#]; name=!= () +// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: == {#()#}[#Bool#]; name=== () +// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: <= {#()#}[#Bool#]; name=<= () +// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: >= {#()#}[#Bool#]; name=>= () +// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: < {#()#}[#Bool#]; name=< () +// VOID_OPERATORS-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: > {#()#}[#Bool#]; name=> () // VOID_OPERATORS: End completions func testInfix18(x: (S2, S2) { @@ -318,8 +318,8 @@ func testInfix19(x: EmptyClass) { } // EMPTYCLASS_INFIX: Begin completions -// EMPTYCLASS_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: === {#AnyObject?#}[#Bool#] -// EMPTYCLASS_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: !== {#AnyObject?#}[#Bool#] +// EMPTYCLASS_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: === {#AnyObject?#}[#Bool#] +// EMPTYCLASS_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: !== {#AnyObject?#}[#Bool#] // EMPTYCLASS_INFIX: End completions enum E { @@ -344,7 +344,7 @@ func testSpace(x: S2) { } // S2_INFIX_SPACE: Begin completions // S2_INFIX_SPACE-DAG: Decl[InfixOperatorFunction]/CurrModule: [' ']** {#Int#}[#S2#] -// S2_INFIX_SPACE-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: [' ']+ {#S2#}[#S2#] +// S2_INFIX_SPACE-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: [' ']+ {#S2#}[#S2#] // S2_INFIX_SPACE: End completions func testExtInfix1(x: inout S2) { @@ -372,9 +372,9 @@ func testExtInfix2(x: S4) { x + x == x + x#^EXT_INFIX_2^# } // S4_EXT_INFIX: Begin completions -// S4_EXT_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: + {#S4#}[#S4#] -// S4_EXT_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: && {#Bool#}[#Bool#] -// S4_EXT_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: || {#Bool#}[#Bool#] +// S4_EXT_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: + {#S4#}[#S4#] +// S4_EXT_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: && {#Bool#}[#Bool#] +// S4_EXT_INFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: || {#Bool#}[#Bool#] // S4_EXT_INFIX: End completions // S4_EXT_INFIX-NEG-NOT: != @@ -386,7 +386,7 @@ func testExtInfix3(x: S4) { x + x#^EXT_INFIX_3^# } // S4_EXT_INFIX_SIMPLE: Begin completions -// S4_EXT_INFIX_SIMPLE-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: + {#S4#}[#S4#] +// S4_EXT_INFIX_SIMPLE-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: + {#S4#}[#S4#] // S4_EXT_INFIX_SIMPLE-DAG: Decl[InfixOperatorFunction]/CurrModule: +++ {#S4#}[#S4#] // S4_EXT_INFIX_SIMPLE: End completions diff --git a/test/IDE/complete_override.swift b/test/IDE/complete_override.swift index 239e1f5512016..4213dfa1df6ee 100644 --- a/test/IDE/complete_override.swift +++ b/test/IDE/complete_override.swift @@ -872,8 +872,8 @@ struct SynthesizedConformance1: Codable { let foo: Int #^OVERRIDE_SYNTHESIZED_1^# // OVERRIDE_SYNTHESIZED_1: Begin completions, 2 items -// OVERRIDE_SYNTHESIZED_1-DAG: Decl[Constructor]/Super: init(from decoder: Decoder) throws {|}; -// OVERRIDE_SYNTHESIZED_1-DAG: Decl[InstanceMethod]/Super: func encode(to encoder: Encoder) throws {|}; +// OVERRIDE_SYNTHESIZED_1-DAG: Decl[Constructor]/Super/IsSystem: init(from decoder: Decoder) throws {|}; +// OVERRIDE_SYNTHESIZED_1-DAG: Decl[InstanceMethod]/Super/IsSystem: func encode(to encoder: Encoder) throws {|}; } open class SynthesizedConformance2: Codable { @@ -881,7 +881,7 @@ open class SynthesizedConformance2: Codable { func encode(to encoder: Encoder) throws {} #^OVERRIDE_SYNTHESIZED_2^# // OVERRIDE_SYNTHESIZED_2: Begin completions, 1 items -// OVERRIDE_SYNTHESIZED_2: Decl[Constructor]/Super: public required init(from decoder: Decoder) throws {|}; +// OVERRIDE_SYNTHESIZED_2: Decl[Constructor]/Super/IsSystem: public required init(from decoder: Decoder) throws {|}; } struct SynthesizedConformance3: Hashable { @@ -889,23 +889,23 @@ struct SynthesizedConformance3: Hashable { #^OVERRIDE_SYNTHESIZED_3^# // FIXME: Where did Equatable.(==) go? // OVERRIDE_SYNTHESIZED_3: Begin completions, 2 items -// OVERRIDE_SYNTHESIZED_3-DAG: Decl[InstanceVar]/Super: var hashValue: Int; name=hashValue: Int -// OVERRIDE_SYNTHESIZED_3-DAG: Decl[InstanceMethod]/Super: func hash(into hasher: inout Hasher) {|} +// OVERRIDE_SYNTHESIZED_3-DAG: Decl[InstanceVar]/Super/IsSystem: var hashValue: Int; name=hashValue: Int +// OVERRIDE_SYNTHESIZED_3-DAG: Decl[InstanceMethod]/Super/IsSystem: func hash(into hasher: inout Hasher) {|} } enum SynthesizedConformance4: CaseIterable { case a, b, c, d #^OVERRIDE_SYNTHESIZED_4^# // OVERRIDE_SYNTHESIZED_4: Begin completions, 4 items -// OVERRIDE_SYNTHESIZED_4-DAG: Decl[InstanceVar]/Super: var hashValue: Int -// OVERRIDE_SYNTHESIZED_4-DAG: Decl[InstanceMethod]/Super: func hash(into hasher: inout Hasher) {|}; -// OVERRIDE_SYNTHESIZED_4-DAG: Decl[StaticVar]/Super: static var allCases: [SynthesizedConformance4]; -// OVERRIDE_SYNTHESIZED_4-DAG: Decl[AssociatedType]/Super: typealias AllCases = {#(Type)#}; +// OVERRIDE_SYNTHESIZED_4-DAG: Decl[InstanceVar]/Super/IsSystem: var hashValue: Int +// OVERRIDE_SYNTHESIZED_4-DAG: Decl[InstanceMethod]/Super/IsSystem: func hash(into hasher: inout Hasher) {|}; +// OVERRIDE_SYNTHESIZED_4-DAG: Decl[StaticVar]/Super/IsSystem: static var allCases: [SynthesizedConformance4]; +// OVERRIDE_SYNTHESIZED_4-DAG: Decl[AssociatedType]/Super/IsSystem: typealias AllCases = {#(Type)#}; } class SynthesizedConformance5: SynthesizedConformance2 { #^OVERRIDE_SYNTHESIZED_5^# // OVERRIDE_SYNTHESIZED_5: Begin completions, 2 items -// OVERRIDE_SYNTHESIZED_5-DAG: Decl[InstanceMethod]/Super: override func encode(to encoder: Encoder) throws {|}; -// OVERRIDE_SYNTHESIZED_5-DAG: Decl[Constructor]/Super: required init(from decoder: Decoder) throws {|}; +// OVERRIDE_SYNTHESIZED_5-DAG: Decl[InstanceMethod]/Super/IsSystem: override func encode(to encoder: Encoder) throws {|}; +// OVERRIDE_SYNTHESIZED_5-DAG: Decl[Constructor]/Super/IsSystem: required init(from decoder: Decoder) throws {|}; } diff --git a/test/IDE/complete_pound_selector.swift b/test/IDE/complete_pound_selector.swift index 43c6d518bb149..eccbac49c20fc 100644 --- a/test/IDE/complete_pound_selector.swift +++ b/test/IDE/complete_pound_selector.swift @@ -80,14 +80,14 @@ class Subclass : NSObject { // CHECK-SELECTOR_BASIC: Keyword/None: setter: {#@objc property#}; name=setter: @objc property // CHECK-IN_SELECTOR-NOT: getter: -// CHECK-IN_SELECTOR: Decl[Constructor]/CurrNominal: {{.?}}init; name=init -// CHECK-IN_SELECTOR: Decl[StaticMethod]/CurrNominal: {{.?}}perform(_:with:); name=perform(_:with:) -// CHECK-IN_SELECTOR: Decl[InstanceMethod]/CurrNominal: {{.?}}perform(_:with:); name=perform(_:with:) -// CHECK-IN_SELECTOR: Decl[InstanceMethod]/CurrNominal: {{.?}}myClass; name=myClass -// CHECK-IN_SELECTOR: Decl[StaticMethod]/CurrNominal: {{.?}}description; name=description -// CHECK-IN_SELECTOR: Decl[StaticMethod]/CurrNominal: {{.?}}isEqual(_:); name=isEqual(_:) -// CHECK-IN_SELECTOR: Decl[InstanceMethod]/CurrNominal: {{.?}}isEqual(_:); name=isEqual(_:) - -// CHECK-IN_SUPER_SELECTOR: Decl[InstanceMethod]/CurrNominal: {{.?}}perform(_:with:); name=perform(_:with:) -// CHECK-IN_SUPER_SELECTOR: Decl[InstanceMethod]/CurrNominal: {{.?}}myClass; name=myClass -// CHECK-IN_SUPER_SELECTOR: Decl[InstanceMethod]/CurrNominal: {{.?}}isEqual(_:); name=isEqual(_:) +// CHECK-IN_SELECTOR: Decl[Constructor]/CurrNominal/IsSystem: {{.?}}init; name=init +// CHECK-IN_SELECTOR: Decl[StaticMethod]/CurrNominal/IsSystem: {{.?}}perform(_:with:); name=perform(_:with:) +// CHECK-IN_SELECTOR: Decl[InstanceMethod]/CurrNominal/IsSystem: {{.?}}perform(_:with:); name=perform(_:with:) +// CHECK-IN_SELECTOR: Decl[InstanceMethod]/CurrNominal/IsSystem: {{.?}}myClass; name=myClass +// CHECK-IN_SELECTOR: Decl[StaticMethod]/CurrNominal/IsSystem: {{.?}}description; name=description +// CHECK-IN_SELECTOR: Decl[StaticMethod]/CurrNominal/IsSystem: {{.?}}isEqual(_:); name=isEqual(_:) +// CHECK-IN_SELECTOR: Decl[InstanceMethod]/CurrNominal/IsSystem: {{.?}}isEqual(_:); name=isEqual(_:) + +// CHECK-IN_SUPER_SELECTOR: Decl[InstanceMethod]/CurrNominal/IsSystem: {{.?}}perform(_:with:); name=perform(_:with:) +// CHECK-IN_SUPER_SELECTOR: Decl[InstanceMethod]/CurrNominal/IsSystem: {{.?}}myClass; name=myClass +// CHECK-IN_SUPER_SELECTOR: Decl[InstanceMethod]/CurrNominal/IsSystem: {{.?}}isEqual(_:); name=isEqual(_:) diff --git a/test/IDE/complete_precedencegroup.swift b/test/IDE/complete_precedencegroup.swift index 948112b818ae5..9657e21add5eb 100644 --- a/test/IDE/complete_precedencegroup.swift +++ b/test/IDE/complete_precedencegroup.swift @@ -98,8 +98,8 @@ infix operator ---: #^PRECEDENCE_GROUP_CURRFILE^# // ASSIGNMENT: Keyword[true]/None: true; name=true // PRECEDENCE_GROUP: Begin completions -// PRECEDENCE_GROUP-DAG: Decl[PrecedenceGroup]/OtherModule[Swift]: AssignmentPrecedence; name=AssignmentPrecedence -// PRECEDENCE_GROUP-DAG: Decl[PrecedenceGroup]/OtherModule[Swift]: ComparisonPrecedence; name=ComparisonPrecedence +// PRECEDENCE_GROUP-DAG: Decl[PrecedenceGroup]/OtherModule[Swift]/IsSystem: AssignmentPrecedence; name=AssignmentPrecedence +// PRECEDENCE_GROUP-DAG: Decl[PrecedenceGroup]/OtherModule[Swift]/IsSystem: ComparisonPrecedence; name=ComparisonPrecedence /* FIXME: SR-8898 We only see precedence groups that are earlier in life! */ // PRECEDENCE_GROUP_CURRFILE-DAG: Begin completions diff --git a/test/IDE/complete_stdlib_optional_objc.swift b/test/IDE/complete_stdlib_optional_objc.swift index ee2825f0df122..f76a21df4c023 100644 --- a/test/IDE/complete_stdlib_optional_objc.swift +++ b/test/IDE/complete_stdlib_optional_objc.swift @@ -63,18 +63,18 @@ func testAnyObject8(a: AnyObject) { } // UN_OPT_NO_DOT_INT: Begin completions -// UN_OPT_NO_DOT_INT-DAG: Decl[InstanceVar]/CurrNominal: ?.nonzeroBitCount[#Int#]{{; name=.+$}} +// UN_OPT_NO_DOT_INT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: ?.nonzeroBitCount[#Int#]{{; name=.+$}} // UN_OPT_NO_DOT_INT: End completions // UN_OPT_DOT_INT: Begin completions -// UN_OPT_DOT_INT-DAG: Decl[InstanceVar]/CurrNominal/Erase[1]: ?.nonzeroBitCount[#Int#]{{; name=.+$}} +// UN_OPT_DOT_INT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem/Erase[1]: ?.nonzeroBitCount[#Int#]{{; name=.+$}} // UN_OPT_DOT_INT: End completions // OBJCCLASS_MEMBERS_NO_DOT: Begin completions // OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InstanceVar]/CurrNominal: .instanceVar[#Int#] // OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc()[#ObjcClass#] -// OBJCCLASS_MEMBERS_NO_DOT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: === {#AnyObject?#}[#Bool#] -// OBJCCLASS_MEMBERS_NO_DOT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: !== {#AnyObject?#}[#Bool#] +// OBJCCLASS_MEMBERS_NO_DOT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: === {#AnyObject?#}[#Bool#] +// OBJCCLASS_MEMBERS_NO_DOT-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: !== {#AnyObject?#}[#Bool#] // OBJCCLASS_MEMBERS_NO_DOT-NEXT: Keyword[self]/CurrNominal: .self[#ObjcClass#]; name=self // OBJCCLASS_MEMBERS_NO_DOT-NEXT: End completions diff --git a/test/IDE/complete_swift_key_path.swift b/test/IDE/complete_swift_key_path.swift index ae296f1e48e18..4935b1007a464 100644 --- a/test/IDE/complete_swift_key_path.swift +++ b/test/IDE/complete_swift_key_path.swift @@ -62,16 +62,16 @@ let _ = \Person.#^TYPE_DOT^# let _ = \Person.friends#^ARRAY_NODOT^# // ARRAY-NODOT: Begin completions -// ARRAY-NODOT-DAG: Decl[Subscript]/CurrNominal: [{#(index): Int#}][#Person#]; name=[index: Int] -// ARRAY-NODOT-DAG: Decl[InstanceVar]/CurrNominal: .count[#Int#]; name=count -// ARRAY-NODOT-DAG: Decl[InstanceVar]/Super: .first[#Person?#]; name=first +// ARRAY-NODOT-DAG: Decl[Subscript]/CurrNominal/IsSystem: [{#(index): Int#}][#Person#]; name=[index: Int] +// ARRAY-NODOT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .count[#Int#]; name=count +// ARRAY-NODOT-DAG: Decl[InstanceVar]/Super/IsSystem: .first[#Person?#]; name=first let _ = \Person.friends.#^ARRAY_DOT^# // ARRAY-DOT: Begin completions -// ARRAY-DOT-NOT: Decl[Subscript]/CurrNominal: [{#(index): Int#}][#Element#]; name=[Int] -// ARRAY-DOT-DAG: Decl[InstanceVar]/CurrNominal: count[#Int#]; name=count -// ARRAY-DOT-DAG: Decl[InstanceVar]/Super: first[#Person?#]; name=first -// ARRAY-DOT-NOT: Decl[Subscript]/CurrNominal: [{#(index): Int#}][#Element#]; name=[Int] +// ARRAY-DOT-NOT: Decl[Subscript]/CurrNominal/IsSystem: [{#(index): Int#}][#Element#]; name=[Int] +// ARRAY-DOT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: count[#Int#]; name=count +// ARRAY-DOT-DAG: Decl[InstanceVar]/Super/IsSystem: first[#Person?#]; name=first +// ARRAY-DOT-NOT: Decl[Subscript]/CurrNominal/IsSystem: [{#(index): Int#}][#Element#]; name=[Int] let _ = \Person.friends[0]#^OBJ_NODOT^# // OBJ-NODOT: Begin completions, 5 items @@ -95,7 +95,7 @@ let _ = \Person.bestFriend#^OPTIONAL_NODOT^# // OPTIONAL-NODOT-NEXT: Decl[InstanceVar]/CurrNominal: ?.bestFriend[#Person?#]; name=bestFriend // OPTIONAL-NODOT-NEXT: Decl[InstanceVar]/CurrNominal: ?.itself[#Person#]; name=itself // OPTIONAL-NODOT-NEXT: Decl[Subscript]/CurrNominal: ?[{#(index): Int#}][#Int#]; name=[index: Int] -// OPTIONAL-NODOT: Decl[InstanceVar]/CurrNominal: .unsafelyUnwrapped[#Person#]; name=unsafelyUnwrapped +// OPTIONAL-NODOT: Decl[InstanceVar]/CurrNominal/IsSystem: .unsafelyUnwrapped[#Person#]; name=unsafelyUnwrapped let _ = \Person.bestFriend.#^OPTIONAL_DOT^# // OPTIONAL-DOT: Begin completions @@ -103,7 +103,7 @@ let _ = \Person.bestFriend.#^OPTIONAL_DOT^# // OPTIONAL-DOT-NEXT: Decl[InstanceVar]/CurrNominal/Erase[1]: ?.friends[#[Person]#]; name=friends // OPTIONAL-DOT-NEXT: Decl[InstanceVar]/CurrNominal/Erase[1]: ?.bestFriend[#Person?#]; name=bestFriend // OPTIONAL-DOT-NEXT: Decl[InstanceVar]/CurrNominal/Erase[1]: ?.itself[#Person#]; name=itself -// OPTIONAL-DOT: Decl[InstanceVar]/CurrNominal: unsafelyUnwrapped[#Person#]; name=unsafelyUnwrapped +// OPTIONAL-DOT: Decl[InstanceVar]/CurrNominal/IsSystem: unsafelyUnwrapped[#Person#]; name=unsafelyUnwrapped let _ = \Person.bestFriend?#^UNWRAPPED_NODOT^# // Same as OBJ_NODOT. @@ -119,15 +119,15 @@ let _ = \Person.bestFriend?.itself.#^CHAIN_DOT^# let _ = \[Person]#^ARRAYTYPE_NODOT^# // ARRAYTYPE-NODOT: Begin completions -// ARRAYTYPE-NODOT-DAG: Decl[Subscript]/CurrNominal: .[{#(index): Int#}][#Person#]; name=[index: Int] -// ARRAYTYPE-NODOT-DAG: Decl[InstanceVar]/CurrNominal: .count[#Int#]; name=count -// ARRAYTYPE-NODOT-DAG: Decl[InstanceVar]/Super: .first[#Person?#]; name=first +// ARRAYTYPE-NODOT-DAG: Decl[Subscript]/CurrNominal/IsSystem: .[{#(index): Int#}][#Person#]; name=[index: Int] +// ARRAYTYPE-NODOT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: .count[#Int#]; name=count +// ARRAYTYPE-NODOT-DAG: Decl[InstanceVar]/Super/IsSystem: .first[#Person?#]; name=first let _ = \[Person].#^ARRAYTYPE_DOT^# // ARRAYTYPE-DOT: Begin completions -// ARRAYTYPE-DOT-DAG: Decl[Subscript]/CurrNominal: [{#(index): Int#}][#Person#]; name=[index: Int] -// ARRAYTYPE-DOT-DAG: Decl[InstanceVar]/CurrNominal: count[#Int#]; name=count -// ARRAYTYPE-DOT-DAG: Decl[InstanceVar]/Super: first[#Person?#]; name=first +// ARRAYTYPE-DOT-DAG: Decl[Subscript]/CurrNominal/IsSystem: [{#(index): Int#}][#Person#]; name=[index: Int] +// ARRAYTYPE-DOT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: count[#Int#]; name=count +// ARRAYTYPE-DOT-DAG: Decl[InstanceVar]/Super/IsSystem: first[#Person?#]; name=first func test(_ p: Person) { let _ = p[keyPath: \Person.#^APPLY_TYPE_DOT^#] diff --git a/test/IDE/complete_type_subscript.swift b/test/IDE/complete_type_subscript.swift index 5411068a60b6c..b35946d0669ba 100644 --- a/test/IDE/complete_type_subscript.swift +++ b/test/IDE/complete_type_subscript.swift @@ -11,7 +11,7 @@ struct S0 { } // TOP_LEVEL_0: Keyword/None: Any[#Any#]; // TOP_LEVEL_0: Decl[Struct]/CurrModule: S0[#S0#]; -// TOP_LEVEL_0: Decl[Struct]/OtherModule[Swift]: Int[#Int#]; +// TOP_LEVEL_0: Decl[Struct]/OtherModule[Swift]/IsSystem: Int[#Int#]; // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PARAM_1 | %FileCheck %s -check-prefix=MYSTRUCT_0 // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RETURN_1 | %FileCheck %s -check-prefix=MYSTRUCT_0 @@ -42,7 +42,7 @@ struct G0 { // GEN_TOP_LEVEL_0: Keyword/None: Any[#Any#]; // GEN_TOP_LEVEL_0: Decl[GenericTypeParam]/Local: T[#T#]; name=T // GEN_TOP_LEVEL_0: Decl[Struct]/CurrModule: S0[#S0#]; -// GEN_TOP_LEVEL_0: Decl[Struct]/OtherModule[Swift]: Int[#Int#]; +// GEN_TOP_LEVEL_0: Decl[Struct]/OtherModule[Swift]/IsSystem: Int[#Int#]; // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GEN_PARAM_1 | %FileCheck %s -check-prefix=GEN_PARAM_1 // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GEN_RETURN_1 | %FileCheck %s -check-prefix=GEN_PARAM_1 @@ -69,7 +69,7 @@ struct G3 { // GEN_TOP_LEVEL_1: Keyword/None: Any[#Any#]; // GEN_TOP_LEVEL_1: Decl[GenericTypeParam]/Local: T[#T#]; // GEN_TOP_LEVEL_1: Decl[Struct]/CurrModule: S0[#S0#]; -// GEN_TOP_LEVEL_1: Decl[Struct]/OtherModule[Swift]: Int[#Int#]; +// GEN_TOP_LEVEL_1: Decl[Struct]/OtherModule[Swift]/IsSystem: Int[#Int#]; // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GEN_PARAM_4 | %FileCheck %s -check-prefix=GEN_PARAM_4 // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GEN_RETURN_4 | %FileCheck %s -check-prefix=GEN_PARAM_4 diff --git a/test/IDE/complete_unresolved_members.swift b/test/IDE/complete_unresolved_members.swift index 8ed1a35153ec6..de767c0ae9336 100644 --- a/test/IDE/complete_unresolved_members.swift +++ b/test/IDE/complete_unresolved_members.swift @@ -289,8 +289,8 @@ class C4 { // UNRESOLVED_3_OPT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Convertible]: North[#SomeEnum1#]; // UNRESOLVED_3_OPT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Convertible]: South[#SomeEnum1#]; // UNRESOLVED_3_OPT-DAG: Keyword[nil]/None/Erase[1]: nil[#SomeEnum1?#]; name=nil -// UNRESOLVED_3_OPT-DAG: Decl[EnumElement]/CurrNominal: none[#Optional#]; name=none -// UNRESOLVED_3_OPT-DAG: Decl[EnumElement]/CurrNominal: some({#SomeEnum1#})[#Optional#]; +// UNRESOLVED_3_OPT-DAG: Decl[EnumElement]/CurrNominal/IsSystem: none[#Optional#]; name=none +// UNRESOLVED_3_OPT-DAG: Decl[EnumElement]/CurrNominal/IsSystem: some({#SomeEnum1#})[#Optional#]; // UNRESOLVED_3_OPT-NOT: init({#(some): // UNRESOLVED_3_OPT-NOT: init({#nilLiteral: @@ -298,8 +298,8 @@ class C4 { // UNRESOLVED_3_OPTOPTOPT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Convertible]: North[#SomeEnum1#]; // UNRESOLVED_3_OPTOPTOPT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Convertible]: South[#SomeEnum1#]; // UNRESOLVED_3_OPTOPTOPT-DAG: Keyword[nil]/None/Erase[1]: nil[#SomeEnum1???#]; name=nil -// UNRESOLVED_3_OPTOPTOPT-DAG: Decl[EnumElement]/CurrNominal: none[#Optional#]; name=none -// UNRESOLVED_3_OPTOPTOPT-DAG: Decl[EnumElement]/CurrNominal: some({#SomeEnum1??#})[#Optional#]; +// UNRESOLVED_3_OPTOPTOPT-DAG: Decl[EnumElement]/CurrNominal/IsSystem: none[#Optional#]; name=none +// UNRESOLVED_3_OPTOPTOPT-DAG: Decl[EnumElement]/CurrNominal/IsSystem: some({#SomeEnum1??#})[#Optional#]; // UNRESOLVED_3_OPTOPTOPT-NOT: init({#(some): // UNRESOLVED_3_OPTOPTOPT-NOT: init({#nilLiteral: @@ -316,9 +316,9 @@ func testOptionalWithCustomExtension() { // UNRESOLVED_OPT_4-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Convertible]: earth[#Somewhere#]; // UNRESOLVED_OPT_4-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Convertible]: mars[#Somewhere#]; // UNRESOLVED_OPT_4-DAG: Keyword[nil]/None/Erase[1]: nil[#Somewhere?#]; name=nil -// UNRESOLVED_OPT_4-DAG: Decl[EnumElement]/CurrNominal: none[#Optional#]; name=none -// UNRESOLVED_OPT_4-DAG: Decl[EnumElement]/CurrNominal: some({#Somewhere#})[#Optional#]; -// UNRESOLVED_OPT_4-DAG: Decl[Constructor]/CurrNominal: init({#str: String#})[#Optional#]; name=init(str: String) +// UNRESOLVED_OPT_4-DAG: Decl[EnumElement]/CurrNominal/IsSystem: none[#Optional#]; name=none +// UNRESOLVED_OPT_4-DAG: Decl[EnumElement]/CurrNominal/IsSystem: some({#Somewhere#})[#Optional#]; +// UNRESOLVED_OPT_4-DAG: Decl[Constructor]/CurrNominal: init({#str: String#})[#Optional#]; name=init(str: String) // UNRESOLVED_OPT_4-DAG: Decl[StaticVar]/CurrNominal/TypeRelation[Identical]: nowhere[#Optional#]; name=nowhere // UNRESOLVED_OPT_4-NOT: init({#(some): // UNRESOLVED_OPT_4-NOT: init({#nilLiteral: @@ -780,6 +780,6 @@ func testTernaryOperator2(cond: Bool) { func sync(){} let _: SomeEnum1 = .#^TERNARY_CONDITION^# ? .bogus : .bogus // TERNARY_CONDITION: Begin completions -// TERNARY_CONDITION-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init()[#Bool#]; name=init() +// TERNARY_CONDITION-DAG: Decl[Constructor]/CurrNominal/IsSystem/TypeRelation[Identical]: init()[#Bool#]; name=init() // TERNARY_CONDITION: End completions } diff --git a/test/IDE/complete_value_expr.swift b/test/IDE/complete_value_expr.swift index 3e3f9bfe5bb8a..eabd01144a73a 100644 --- a/test/IDE/complete_value_expr.swift +++ b/test/IDE/complete_value_expr.swift @@ -1418,12 +1418,12 @@ func testTypeCheckNil() { func testResolveModules1() { Swift#^RESOLVE_MODULES_1^# // RESOLVE_MODULES_1: Begin completions -// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Int8[#Int8#]{{; name=.+$}} -// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Int16[#Int16#]{{; name=.+$}} -// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Int32[#Int32#]{{; name=.+$}} -// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Int64[#Int64#]{{; name=.+$}} -// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Bool[#Bool#]{{; name=.+$}} -// RESOLVE_MODULES_1-DAG: Decl[TypeAlias]/OtherModule[Swift]: .Float32[#Float#]{{; name=.+$}} +// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: .Int8[#Int8#]{{; name=.+$}} +// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: .Int16[#Int16#]{{; name=.+$}} +// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: .Int32[#Int32#]{{; name=.+$}} +// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: .Int64[#Int64#]{{; name=.+$}} +// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: .Bool[#Bool#]{{; name=.+$}} +// RESOLVE_MODULES_1-DAG: Decl[TypeAlias]/OtherModule[Swift]/IsSystem: .Float32[#Float#]{{; name=.+$}} // RESOLVE_MODULES_1: End completions } @@ -2045,7 +2045,7 @@ class TestDotExprWithNonNominal { // DOT_EXPR_NON_NOMINAL_2-NOT: otherField // DOT_EXPR_NON_NOMINAL_2-NOT: firstName // DOT_EXPR_NON_NOMINAL_2: Keyword[self]/CurrNominal: self[#Int#]; name=self -// DOT_EXPR_NON_NOMINAL_2: Decl[InstanceVar]/CurrNominal: hashValue[#Int#]; +// DOT_EXPR_NON_NOMINAL_2: Decl[InstanceVar]/CurrNominal/IsSystem: hashValue[#Int#]; // DOT_EXPR_NON_NOMINAL_2-NOT: otherField // DOT_EXPR_NON_NOMINAL_2-NOT: firstName } diff --git a/test/IDE/complete_where_clause.swift b/test/IDE/complete_where_clause.swift index 1d86e89f7fd9f..f7301e6e80f78 100644 --- a/test/IDE/complete_where_clause.swift +++ b/test/IDE/complete_where_clause.swift @@ -141,7 +141,7 @@ enum E2 where T.#^ENUM_2^# {} // ANYTYPE: Begin completions // ANYTYPE-DAG: Decl[GenericTypeParam]/Local: T[#T#]; // ANYTYPE-DAG: Decl[Class]/CurrModule: A1[#A1#]; -// ANYTYPE-DAG: Decl[Struct]/OtherModule[Swift]: Int[#Int#]; +// ANYTYPE-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int[#Int#]; // ANYTYPE: End completions protocol P2 { diff --git a/test/SourceKit/CodeComplete/complete_annotateddescription.swift b/test/SourceKit/CodeComplete/complete_annotateddescription.swift index 8fa63e9d183e8..d7edc287e352a 100644 --- a/test/SourceKit/CodeComplete/complete_annotateddescription.swift +++ b/test/SourceKit/CodeComplete/complete_annotateddescription.swift @@ -9,6 +9,11 @@ struct MyStruct { func test(value: MyStruct) { value } +func test() { + MyStruct. +} -// RUN: %sourcekitd-test -req=complete -pos=10:8 -req-opts=annotateddescription=1 %s -- %s > %t.result +// RUN: %sourcekitd-test \ +// RUN: -req=complete -pos=10:8 -req-opts=annotateddescription=1 %s -- %s == \ +// RUN: -req=complete -pos=13:12 -req-opts=annotateddescription=1 %s -- %s > %t.result // RUN: %diff -u %s.result %t.result diff --git a/test/SourceKit/CodeComplete/complete_annotateddescription.swift.result b/test/SourceKit/CodeComplete/complete_annotateddescription.swift.result index 2fc02f940ad8a..0b2862fa557ec 100644 --- a/test/SourceKit/CodeComplete/complete_annotateddescription.swift.result +++ b/test/SourceKit/CodeComplete/complete_annotateddescription.swift.result @@ -5,7 +5,7 @@ key.name: "[label:]", key.sourcetext: "[label: <#T##Int#>]", key.description: "[label param: Int]", - key.typename: "Int", + key.typename: "Int", key.context: source.codecompletion.context.thisclass, key.typerelation: source.codecompletion.typerelation.unknown, key.num_bytes_to_erase: 0, @@ -17,7 +17,7 @@ key.name: "[:]", key.sourcetext: "[<#T##param: Int##Int#>]", key.description: "[_ param: Int]", - key.typename: "Int", + key.typename: "Int", key.context: source.codecompletion.context.thisclass, key.typerelation: source.codecompletion.typerelation.unknown, key.num_bytes_to_erase: 0, @@ -29,7 +29,7 @@ key.name: "labelName(label:)", key.sourcetext: ".labelName(label: <#T##(@autoclosure () -> Int) -> Int#>)", key.description: "labelName(label: (@autoclosure () -> Int) -> Int)", - key.typename: "Void", + key.typename: "Void", key.context: source.codecompletion.context.thisclass, key.typerelation: source.codecompletion.typerelation.unknown, key.num_bytes_to_erase: 0, @@ -41,7 +41,7 @@ key.name: "labelNameParamName(label:)", key.sourcetext: ".labelNameParamName(label: <#T##(inout Int) throws -> MyStruct#>)", key.description: "labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows", - key.typename: "Void", + key.typename: "Void", key.context: source.codecompletion.context.thisclass, key.typerelation: source.codecompletion.typerelation.unknown, key.num_bytes_to_erase: 0, @@ -53,7 +53,7 @@ key.name: "paramName(:)", key.sourcetext: ".paramName(<#T##param: Int##Int#>)", key.description: "paramName(_ param: Int)", - key.typename: "Void", + key.typename: "Void", key.context: source.codecompletion.context.thisclass, key.typerelation: source.codecompletion.typerelation.unknown, key.num_bytes_to_erase: 0, @@ -65,7 +65,7 @@ key.name: "sameName(label:)", key.sourcetext: ".sameName(label: <#T##Int#>)", key.description: "sameName(label: Int)", - key.typename: "Void", + key.typename: "Void", key.context: source.codecompletion.context.thisclass, key.typerelation: source.codecompletion.typerelation.unknown, key.num_bytes_to_erase: 0, @@ -77,10 +77,97 @@ key.name: "self", key.sourcetext: ".self", key.description: "self", - key.typename: "MyStruct", + key.typename: "MyStruct", key.context: source.codecompletion.context.thisclass, key.typerelation: source.codecompletion.typerelation.unknown, key.num_bytes_to_erase: 0 } - ] + ], + key.annotated.typename: 1 +} +{ + key.results: [ + { + key.kind: source.lang.swift.decl.function.constructor, + key.name: "init()", + key.sourcetext: "init()", + key.description: "init()", + key.typename: "MyStruct", + key.context: source.codecompletion.context.thisclass, + key.typerelation: source.codecompletion.typerelation.unrelated, + key.num_bytes_to_erase: 0, + key.associated_usrs: "s:29complete_annotateddescription8MyStructVACycfc", + key.modulename: "complete_annotateddescription" + }, + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "labelName(:)", + key.sourcetext: "labelName(<#T##self: MyStruct##MyStruct#>)", + key.description: "labelName(_ self: MyStruct)", + key.typename: "(label: (@autoclosure () -> Int) -> Int) -> Void", + key.context: source.codecompletion.context.thisclass, + key.typerelation: source.codecompletion.typerelation.unrelated, + key.num_bytes_to_erase: 0, + key.associated_usrs: "s:29complete_annotateddescription8MyStructV9labelName0E0yS2iyXKXE_tF", + key.modulename: "complete_annotateddescription" + }, + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "labelNameParamName(:)", + key.sourcetext: "labelNameParamName(<#T##self: MyStruct##MyStruct#>)", + key.description: "labelNameParamName(_ self: MyStruct)", + key.typename: "(label: (inout Int) throws -> MyStruct) -> Void", + key.context: source.codecompletion.context.thisclass, + key.typerelation: source.codecompletion.typerelation.unrelated, + key.num_bytes_to_erase: 0, + key.associated_usrs: "s:29complete_annotateddescription8MyStructV014labelNameParamF00E0yACSizKXE_tKF", + key.modulename: "complete_annotateddescription" + }, + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "paramName(:)", + key.sourcetext: "paramName(<#T##self: MyStruct##MyStruct#>)", + key.description: "paramName(_ self: MyStruct)", + key.typename: "(Int) -> Void", + key.context: source.codecompletion.context.thisclass, + key.typerelation: source.codecompletion.typerelation.unrelated, + key.num_bytes_to_erase: 0, + key.associated_usrs: "s:29complete_annotateddescription8MyStructV9paramNameyySiF", + key.modulename: "complete_annotateddescription" + }, + { + key.kind: source.lang.swift.decl.function.method.instance, + key.name: "sameName(:)", + key.sourcetext: "sameName(<#T##self: MyStruct##MyStruct#>)", + key.description: "sameName(_ self: MyStruct)", + key.typename: "(label: Int) -> Void", + key.context: source.codecompletion.context.thisclass, + key.typerelation: source.codecompletion.typerelation.unrelated, + key.num_bytes_to_erase: 0, + key.associated_usrs: "s:29complete_annotateddescription8MyStructV8sameName5labelySi_tF", + key.modulename: "complete_annotateddescription" + }, + { + key.kind: source.lang.swift.keyword, + key.name: "self", + key.sourcetext: "self", + key.description: "self", + key.typename: "MyStruct.Type", + key.context: source.codecompletion.context.thisclass, + key.typerelation: source.codecompletion.typerelation.unknown, + key.num_bytes_to_erase: 0 + }, + { + key.kind: source.lang.swift.keyword, + key.name: "Type", + key.sourcetext: "Type", + key.description: "Type", + key.typename: "MyStruct.Type", + key.context: source.codecompletion.context.thisclass, + key.typerelation: source.codecompletion.typerelation.unknown, + key.num_bytes_to_erase: 0 + } + ], + key.reusingastcontext: 1, + key.annotated.typename: 1 } diff --git a/test/SourceKit/CodeComplete/complete_from_system.swift b/test/SourceKit/CodeComplete/complete_from_system.swift new file mode 100644 index 0000000000000..cf6809f4d4f7e --- /dev/null +++ b/test/SourceKit/CodeComplete/complete_from_system.swift @@ -0,0 +1,22 @@ +struct MyCollection : Collection { + var startIndex: Int { 0 } + var endIndex: Int { 0 } + func index(after i: Int) -> Int { i + 1 } + subscript(position: Int) -> Int { 0 } +} + +func test(col: MyCollection) { + col. +} + +// RUN: %sourcekitd-test -req=complete -pos=9:7 %s -- %s -module-name TestMod | %FileCheck %s + +// CHECK: key.name: "makeIterator()", +// CHECK-NOT: }, +// CHECK: key.is_system: 1 +// CHECK: }, + +// CHECK: key.name: "startIndex", +// CHECK-NOT: }, +// CHECK-NOT: key.is_system: 1 +// CHECK: }, diff --git a/tools/SourceKit/include/SourceKit/Core/LangSupport.h b/tools/SourceKit/include/SourceKit/Core/LangSupport.h index cb3b13d3fabd5..a30759b298842 100644 --- a/tools/SourceKit/include/SourceKit/Core/LangSupport.h +++ b/tools/SourceKit/include/SourceKit/Core/LangSupport.h @@ -93,6 +93,7 @@ struct CodeCompletionInfo { UIdent TypeRelation; Optional ModuleImportDepth; bool NotRecommended; + bool IsSystem; unsigned NumBytesToErase; struct IndexRange { @@ -147,6 +148,7 @@ class CodeCompletionConsumer { virtual void setCompletionKind(UIdent kind) {}; virtual void setReusingASTContext(bool) = 0; + virtual void setAnnotatedTypename(bool) = 0; virtual bool handleResult(const CodeCompletionInfo &Info) = 0; }; diff --git a/tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp b/tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp index 1ec0e7748af3f..6690b94a99011 100644 --- a/tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp +++ b/tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp @@ -110,13 +110,26 @@ std::vector SourceKit::CodeCompletion::extendCompletions( // FIXME: because other-module results are cached, they will not be // given a type-relation of invalid. As a hack, we look at the text of // the result type and look for 'Void'. - for (auto &chunk : result->getCompletionString()->getChunks()) { + bool isVoid = false; + auto chunks = result->getCompletionString()->getChunks(); + for (auto i = chunks.begin(), e = chunks.end(); i != e; ++i) { using ChunkKind = ide::CodeCompletionString::Chunk::ChunkKind; - if (chunk.is(ChunkKind::TypeAnnotation) && chunk.hasText() && - chunk.getText() == "Void") { - builder.setExpectedTypeRelation(Completion::Invalid); + bool isVoid = false; + if (i->is(ChunkKind::TypeAnnotation)) { + isVoid = i->getText() == "Void"; + break; + } else if (i->is(ChunkKind::TypeAnnotationBegin)) { + auto n = i + 1, t = i + 2; + isVoid = + // i+1 has text 'Void'. + n != e && n->hasText() && n->getText() == "Void" && + // i+2 terminates the group. + (t == e || t->endsPreviousNestedGroup(i->getNestingLevel())); + break; } } + if (isVoid) + builder.setExpectedTypeRelation(Completion::Invalid); } } @@ -1239,14 +1252,11 @@ void CompletionBuilder::getFilterName(CodeCompletionString *str, case ChunkKind::Ampersand: case ChunkKind::OptionalMethodCallTail: continue; - case ChunkKind::CallParameterTypeBegin: { - // Skip call parameter type type structure. + case ChunkKind::CallParameterTypeBegin: + case ChunkKind::TypeAnnotationBegin: { + // Skip call parameter type or type annotation structure. auto nestingLevel = C.getNestingLevel(); - ++i; - for (; i != e; ++i) { - if (i->endsPreviousNestedGroup(nestingLevel)) - break; - } + do { ++i; } while (i != e && !i->endsPreviousNestedGroup(nestingLevel)); --i; continue; } @@ -1314,10 +1324,11 @@ Completion *CompletionBuilder::finish() { if (current.getKind() == SwiftResult::Declaration) { base = SwiftResult( semanticContext, current.getNumBytesToErase(), completionString, - current.getAssociatedDeclKind(), current.getModuleName(), - current.isNotRecommended(), current.getNotRecommendedReason(), - current.getBriefDocComment(), current.getAssociatedUSRs(), - current.getDeclKeywords(), typeRelation, opKind); + current.getAssociatedDeclKind(), current.isSystem(), + current.getModuleName(), current.isNotRecommended(), + current.getNotRecommendedReason(), current.getBriefDocComment(), + current.getAssociatedUSRs(), current.getDeclKeywords(), + typeRelation, opKind); } else { base = SwiftResult(current.getKind(), semanticContext, current.getNumBytesToErase(), completionString, diff --git a/tools/SourceKit/lib/SwiftLang/SwiftCompletion.cpp b/tools/SourceKit/lib/SwiftLang/SwiftCompletion.cpp index 7ba24a9906b0a..dfb287c445dfb 100644 --- a/tools/SourceKit/lib/SwiftLang/SwiftCompletion.cpp +++ b/tools/SourceKit/lib/SwiftLang/SwiftCompletion.cpp @@ -77,8 +77,7 @@ struct SwiftToSourceKitCompletionAdapter { static void getResultSourceText(const CodeCompletionString *CCStr, raw_ostream &OS); - static void getResultTypeName(const CodeCompletionString *CCStr, - raw_ostream &OS); + static void getResultAssociatedUSRs(ArrayRef AssocUSRs, raw_ostream &OS); }; @@ -212,8 +211,9 @@ void SwiftLangSupport::codeComplete( SKConsumer, Result, CCOpts.annotatedDescription)) break; } - + SKConsumer.setReusingASTContext(info.completionContext->ReusingASTContext); + SKConsumer.setAnnotatedTypename(info.completionContext->getAnnotateResult()); }); std::string Error; @@ -473,7 +473,10 @@ bool SwiftToSourceKitCompletionAdapter::handleResult( unsigned TypeBegin = SS.size(); { llvm::raw_svector_ostream ccOS(SS); - getResultTypeName(Result->getCompletionString(), ccOS); + if (annotatedDescription) + ide::printCodeCompletionResultTypeNameAnnotated(*Result, ccOS); + else + ide::printCodeCompletionResultTypeName(*Result, ccOS); } unsigned TypeEnd = SS.size(); @@ -544,6 +547,7 @@ bool SwiftToSourceKitCompletionAdapter::handleResult( Info.ModuleName = Result->getModuleName(); Info.DocBrief = Result->getBriefDocComment(); Info.NotRecommended = Result->isNotRecommended(); + Info.IsSystem = Result->isSystem(); Info.NumBytesToErase = Result->getNumBytesToErase(); @@ -702,16 +706,13 @@ void SwiftToSourceKitCompletionAdapter::getResultSourceText( --i; continue; } - if (!C.isAnnotation() && C.hasText()) { - OS << C.getText(); + if (C.is(ChunkKind::TypeAnnotationBegin)) { + // Skip type annotation structure. + auto level = C.getNestingLevel(); + do { ++i; } while (i != Chunks.size() && !Chunks[i].endsPreviousNestedGroup(level)); + --i; } - } -} - -void SwiftToSourceKitCompletionAdapter::getResultTypeName( - const CodeCompletionString *CCStr, raw_ostream &OS) { - for (auto C : CCStr->getChunks()) { - if (C.getKind() == CodeCompletionString::Chunk::ChunkKind::TypeAnnotation) { + if (!C.isAnnotation() && C.hasText()) { OS << C.getText(); } } @@ -1235,6 +1236,7 @@ void SwiftLangSupport::codeCompleteOpen( typeContextKind = completionCtx.typeContextKind; mayUseImplicitMemberExpr = completionCtx.MayUseImplicitMemberExpr; consumer.setReusingASTContext(completionCtx.ReusingASTContext); + consumer.setAnnotatedTypename(completionCtx.getAnnotateResult()); completions = extendCompletions(results, sink, info, nameToPopularity, CCOpts); }); diff --git a/tools/SourceKit/tools/sourcekitd/include/sourcekitd/CodeCompletionResultsArray.h b/tools/SourceKit/tools/sourcekitd/include/sourcekitd/CodeCompletionResultsArray.h index 9643ceaeee900..b8c6b0076c364 100644 --- a/tools/SourceKit/tools/sourcekitd/include/sourcekitd/CodeCompletionResultsArray.h +++ b/tools/SourceKit/tools/sourcekitd/include/sourcekitd/CodeCompletionResultsArray.h @@ -35,6 +35,7 @@ class CodeCompletionResultsArrayBuilder { SourceKit::UIdent SemanticContext, SourceKit::UIdent TypeRelation, bool NotRecommended, + bool IsSystem, unsigned NumBytesToErase); std::unique_ptr createBuffer(); diff --git a/tools/SourceKit/tools/sourcekitd/lib/API/CodeCompletionResultsArray.cpp b/tools/SourceKit/tools/sourcekitd/lib/API/CodeCompletionResultsArray.cpp index d89ff2af49041..5e9260a6bc786 100644 --- a/tools/SourceKit/tools/sourcekitd/lib/API/CodeCompletionResultsArray.cpp +++ b/tools/SourceKit/tools/sourcekitd/lib/API/CodeCompletionResultsArray.cpp @@ -32,6 +32,7 @@ struct CodeCompletionResultsArrayBuilder::Implementation { Optional, UIdent, UIdent, + uint8_t, uint8_t> Builder; }; @@ -56,10 +57,15 @@ void CodeCompletionResultsArrayBuilder::add( UIdent SemanticContext, UIdent TypeRelation, bool NotRecommended, + bool IsSystem, unsigned NumBytesToErase) { - assert(NumBytesToErase <= (uint8_t(-1) >> 1)); - uint8_t BytesAndNotRecommended = (NumBytesToErase << 1) | NotRecommended; + uint8_t Flags = 0; + Flags |= NotRecommended << 1; + Flags |= IsSystem << 0; + + assert(NumBytesToErase <= uint8_t(-1)); + Impl.Builder.addEntry(Kind, Name, Description, @@ -70,7 +76,8 @@ void CodeCompletionResultsArrayBuilder::add( AssocUSRs, SemanticContext, TypeRelation, - BytesAndNotRecommended); + Flags, + uint8_t(NumBytesToErase)); } std::unique_ptr @@ -93,6 +100,7 @@ class CodeCompletionResultsArray { const char *, sourcekitd_uid_t, sourcekitd_uid_t, + uint8_t, uint8_t> CompactArrayReaderTy; static bool @@ -111,7 +119,8 @@ class CodeCompletionResultsArray { const char *AssocUSRs; sourcekitd_uid_t SemanticContext; sourcekitd_uid_t TypeRelation; - uint8_t BytesAndNotRecommended; + uint8_t Flags; + uint8_t NumBytesToErase; Reader.readEntries(Index, Kind, @@ -124,10 +133,11 @@ class CodeCompletionResultsArray { AssocUSRs, SemanticContext, TypeRelation, - BytesAndNotRecommended); + Flags, + NumBytesToErase); - unsigned NumBytesToErase = BytesAndNotRecommended >> 1; - bool NotRecommended = BytesAndNotRecommended & 0x1; + bool NotRecommended = Flags & 0x2; + bool IsSystem = Flags & 0x1; #define APPLY(K, Ty, Field) \ do { \ @@ -156,6 +166,9 @@ class CodeCompletionResultsArray { if (NotRecommended) { APPLY(KeyNotRecommended, Bool, NotRecommended); } + if (IsSystem) { + APPLY(KeyIsSystem, Bool, IsSystem); + } return true; } diff --git a/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp b/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp index 9a0a8084fb08c..ad8f88ca29617 100644 --- a/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp +++ b/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp @@ -1946,6 +1946,7 @@ class SKCodeCompletionConsumer : public CodeCompletionConsumer { void setCompletionKind(UIdent kind) override; void setReusingASTContext(bool flag) override; + void setAnnotatedTypename(bool flag) override; bool handleResult(const CodeCompletionInfo &Info) override; }; } // end anonymous namespace @@ -1982,6 +1983,11 @@ void SKCodeCompletionConsumer::setReusingASTContext(bool flag) { RespBuilder.getDictionary().setBool(KeyReusingASTContext, flag); } +void SKCodeCompletionConsumer::setAnnotatedTypename(bool flag) { + if (flag) + RespBuilder.getDictionary().setBool(KeyAnnotatedTypename, flag); +} + bool SKCodeCompletionConsumer::handleResult(const CodeCompletionInfo &R) { Optional ModuleNameOpt; if (!R.ModuleName.empty()) @@ -2006,6 +2012,7 @@ bool SKCodeCompletionConsumer::handleResult(const CodeCompletionInfo &R) { R.SemanticContext, R.TypeRelation, R.NotRecommended, + R.IsSystem, R.NumBytesToErase); return true; } @@ -2039,6 +2046,7 @@ class SKGroupedCodeCompletionConsumer : public GroupedCodeCompletionConsumer { void endGroup() override; void setNextRequestStart(unsigned offset) override; void setReusingASTContext(bool flag) override; + void setAnnotatedTypename(bool flag) override; }; } // end anonymous namespace @@ -2181,6 +2189,8 @@ bool SKGroupedCodeCompletionConsumer::handleResult(const CodeCompletionInfo &R) result.set(KeyModuleImportDepth, *R.ModuleImportDepth); if (R.NotRecommended) result.set(KeyNotRecommended, R.NotRecommended); + if (R.IsSystem) + result.set(KeyIsSystem, R.IsSystem); result.set(KeyNumBytesToErase, R.NumBytesToErase); if (R.descriptionStructure) { @@ -2240,6 +2250,10 @@ void SKGroupedCodeCompletionConsumer::setReusingASTContext(bool flag) { if (flag) RespBuilder.getDictionary().setBool(KeyReusingASTContext, flag); } +void SKGroupedCodeCompletionConsumer::setAnnotatedTypename(bool flag) { + if (flag) + RespBuilder.getDictionary().setBool(KeyAnnotatedTypename, flag); +} //===----------------------------------------------------------------------===// // Type Context Info diff --git a/utils/gyb_sourcekit_support/UIDs.py b/utils/gyb_sourcekit_support/UIDs.py index d69e00ff7c62c..33b80673032c5 100644 --- a/utils/gyb_sourcekit_support/UIDs.py +++ b/utils/gyb_sourcekit_support/UIDs.py @@ -181,6 +181,7 @@ def __init__(self, internal_name, external_name): KEY('ReusingASTContext', 'key.reusingastcontext'), KEY('CompletionCheckDependencyInterval', 'key.completion_check_dependency_interval'), + KEY('AnnotatedTypename', 'key.annotated.typename'), ] diff --git a/validation-test/IDE/complete_from_cocoa.swift b/validation-test/IDE/complete_from_cocoa.swift index e392023ff2198..2a68a19f3d96e 100644 --- a/validation-test/IDE/complete_from_cocoa.swift +++ b/validation-test/IDE/complete_from_cocoa.swift @@ -13,8 +13,8 @@ import Cocoa func testUnqualified() { #^T1^# // T1: Begin completions -// T1-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]: CFArrayCreate({#(allocator): CFAllocator!#}, {#(values): UnsafeMutablePointer!#}, {#(numValues): CFIndex#}, {#(callBacks): UnsafePointer!#})[#CFArray!#]{{; name=.+$}} -// T1-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]: CFArrayGetCount({#(theArray): CFArray!#})[#CFIndex#]{{; name=.+$}} -// T1-DAG: Decl[Class]/OtherModule[ObjectiveC.NSObject]: NSObject[#NSObject#]{{; name=.+$}} +// T1-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]/IsSystem: CFArrayCreate({#(allocator): CFAllocator!#}, {#(values): UnsafeMutablePointer!#}, {#(numValues): CFIndex#}, {#(callBacks): UnsafePointer!#})[#CFArray!#]{{; name=.+$}} +// T1-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]/IsSystem: CFArrayGetCount({#(theArray): CFArray!#})[#CFIndex#]{{; name=.+$}} +// T1-DAG: Decl[Class]/OtherModule[ObjectiveC.NSObject]/IsSystem: NSObject[#NSObject#]{{; name=.+$}} // T1: End completions } diff --git a/validation-test/IDE/complete_from_cocoa_2.swift b/validation-test/IDE/complete_from_cocoa_2.swift index b0236426fc7ee..ce8e64546567c 100644 --- a/validation-test/IDE/complete_from_cocoa_2.swift +++ b/validation-test/IDE/complete_from_cocoa_2.swift @@ -13,17 +13,17 @@ import Cocoa func testQualifiedWithDot() { Cocoa.#^T1^# // T1: Begin completions -// T1-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]: CFArrayCreate({#(allocator): CFAllocator!#}, {#(values): UnsafeMutablePointer!#}, {#(numValues): CFIndex#}, {#(callBacks): UnsafePointer!#})[#CFArray!#]{{; name=.+$}} -// T1-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]: CFArrayGetCount({#(theArray): CFArray!#})[#CFIndex#]{{; name=.+$}} -// T1-DAG: Decl[Class]/OtherModule[ObjectiveC.NSObject]: NSObject[#NSObject#]{{; name=.+$}} +// T1-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]/IsSystem: CFArrayCreate({#(allocator): CFAllocator!#}, {#(values): UnsafeMutablePointer!#}, {#(numValues): CFIndex#}, {#(callBacks): UnsafePointer!#})[#CFArray!#]{{; name=.+$}} +// T1-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]/IsSystem: CFArrayGetCount({#(theArray): CFArray!#})[#CFIndex#]{{; name=.+$}} +// T1-DAG: Decl[Class]/OtherModule[ObjectiveC.NSObject]/IsSystem: NSObject[#NSObject#]{{; name=.+$}} // T1: End completions } func testQualifiedWithoutDot() { Cocoa#^T2^# // T2: Begin completions -// T2-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]: .CFArrayCreate({#(allocator): CFAllocator!#}, {#(values): UnsafeMutablePointer!#}, {#(numValues): CFIndex#}, {#(callBacks): UnsafePointer!#})[#CFArray!#]{{; name=.+$}} -// T2-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]: .CFArrayGetCount({#(theArray): CFArray!#})[#CFIndex#]{{; name=.+$}} -// T2-DAG: Decl[Class]/OtherModule[ObjectiveC.NSObject]: .NSObject[#NSObject#]{{; name=.+$}} +// T2-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]/IsSystem: .CFArrayCreate({#(allocator): CFAllocator!#}, {#(values): UnsafeMutablePointer!#}, {#(numValues): CFIndex#}, {#(callBacks): UnsafePointer!#})[#CFArray!#]{{; name=.+$}} +// T2-DAG: Decl[FreeFunction]/OtherModule[CoreFoundation.CFArray]/IsSystem: .CFArrayGetCount({#(theArray): CFArray!#})[#CFIndex#]{{; name=.+$}} +// T2-DAG: Decl[Class]/OtherModule[ObjectiveC.NSObject]/IsSystem: .NSObject[#NSObject#]{{; name=.+$}} // T2: End completions } diff --git a/validation-test/IDE/crashers_fixed/subexpr-literal-in-sequence-expr.swift b/validation-test/IDE/crashers_fixed/subexpr-literal-in-sequence-expr.swift index cc292aa532c60..2d68d98ee60af 100644 --- a/validation-test/IDE/crashers_fixed/subexpr-literal-in-sequence-expr.swift +++ b/validation-test/IDE/crashers_fixed/subexpr-literal-in-sequence-expr.swift @@ -8,4 +8,4 @@ func test2() { "" + [""]#^B^# } // Sanity check results. -// CHECK: Decl[InstanceVar]/CurrNominal: .startIndex[#Int#]; name=startIndex +// CHECK: Decl[InstanceVar]/CurrNominal/IsSystem: .startIndex[#Int#]; name=startIndex