Skip to content

Commit e3ba609

Browse files
authored
Merge pull request #37834 from rintaro/ide-completion-protocol-at-expr-rdar77934897
[CodeCompletion] Add flairs to cached items
2 parents 038af80 + f553826 commit e3ba609

10 files changed

+421
-117
lines changed

include/swift/IDE/CodeCompletion.h

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ class Decl;
3333
class DeclContext;
3434
class FrontendOptions;
3535
class ModuleDecl;
36+
class SourceFile;
3637

3738
namespace ide {
3839

3940
class CodeCompletionCache;
4041
class CodeCompletionContext;
4142
class CodeCompletionResultBuilder;
43+
struct CodeCompletionResultSink;
4244
struct RequestedCachedModule;
4345

4446
/// A routine to remove code completion tokens from code completion
@@ -424,6 +426,13 @@ enum class CodeCompletionFlairBit: uint8_t {
424426

425427
/// E.g. type decl introducer ('enum', 'class', etc.) in a function body.
426428
RareKeywordAtCurrentPosition = 1 << 4,
429+
430+
/// E.g. protocol names at an expression position.
431+
RareTypeAtCurrentPosition = 1 << 5,
432+
433+
/// E.g. referencing a type, function, etc… at top level position in a non
434+
/// script/main.swift file
435+
ExpressionAtNonScriptOrMainFileScope = 1 << 6,
427436
};
428437

429438
using CodeCompletionFlair = OptionSet<CodeCompletionFlairBit>;
@@ -752,6 +761,12 @@ class CodeCompletionResult {
752761
getOperatorKind() != CodeCompletionOperatorKind::None);
753762
}
754763

764+
/// Copy this result to \p Sink with \p newFlair . Note that this does NOT
765+
/// copy the value of \c CompletionString , \c AssociatedUSRs etc. it only
766+
/// copies the pointers to them.
767+
CodeCompletionResult *withFlair(CodeCompletionFlair newFlair,
768+
CodeCompletionResultSink &Sink);
769+
755770
ResultKind getKind() const { return static_cast<ResultKind>(Kind); }
756771

757772
CodeCompletionDeclKind getAssociatedDeclKind() const {
@@ -807,6 +822,11 @@ class CodeCompletionResult {
807822
return static_cast<CodeCompletionFlair>(Flair);
808823
}
809824

825+
/// Modify "flair" of this result *in place*.
826+
void setFlair(CodeCompletionFlair flair) {
827+
Flair = unsigned(flair.toRaw());
828+
}
829+
810830
bool isNotRecommended() const {
811831
return getNotRecommendedReason() != NotRecommendedReason::None;
812832
}
@@ -961,7 +981,7 @@ class CodeCompletionConsumer {
961981
virtual void
962982
handleResultsAndModules(CodeCompletionContext &context,
963983
ArrayRef<RequestedCachedModule> requestedModules,
964-
DeclContext *DCForModules) = 0;
984+
DeclContext *DC) = 0;
965985
};
966986

967987
/// A simplified code completion consumer interface that clients can use to get
@@ -1014,14 +1034,15 @@ void lookupCodeCompletionResultsFromModule(CodeCompletionResultSink &targetSink,
10141034
const ModuleDecl *module,
10151035
ArrayRef<std::string> accessPath,
10161036
bool needLeadingDot,
1017-
const DeclContext *currDeclContext);
1037+
const SourceFile *SF);
10181038

10191039
/// Copy code completion results from \p sourceSink to \p targetSink, possibly
1020-
/// restricting by \p onlyTypes.
1021-
void copyCodeCompletionResults(CodeCompletionResultSink &targetSink,
1022-
CodeCompletionResultSink &sourceSink,
1023-
bool onlyTypes,
1024-
bool onlyPrecedenceGroups);
1040+
/// restricting by \p onlyTypes. Returns copied results in \p targetSink.
1041+
MutableArrayRef<CodeCompletionResult *>
1042+
copyCodeCompletionResults(CodeCompletionResultSink &targetSink,
1043+
CodeCompletionResultSink &sourceSink,
1044+
bool onlyTypes,
1045+
bool onlyPrecedenceGroups);
10251046

10261047
} // end namespace ide
10271048
} // end namespace swift

0 commit comments

Comments
 (0)