mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[CodeCompletion][NFC] Use ASTWalker::ParentTy instead of ASTNode
in 'ExprParentFinder'. There's no reason to re-pack into ASTNode.
This commit is contained in:
@@ -4917,7 +4917,7 @@ namespace {
|
|||||||
class ExprParentFinder : public ASTWalker {
|
class ExprParentFinder : public ASTWalker {
|
||||||
friend class CodeCompletionTypeContextAnalyzer;
|
friend class CodeCompletionTypeContextAnalyzer;
|
||||||
Expr *ChildExpr;
|
Expr *ChildExpr;
|
||||||
llvm::function_ref<bool(ASTNode)> Predicate;
|
llvm::function_ref<bool(ParentTy)> Predicate;
|
||||||
|
|
||||||
bool arePositionsSame(Expr *E1, Expr *E2) {
|
bool arePositionsSame(Expr *E1, Expr *E2) {
|
||||||
return E1->getSourceRange().Start == E2->getSourceRange().Start &&
|
return E1->getSourceRange().Start == E2->getSourceRange().Start &&
|
||||||
@@ -4925,11 +4925,11 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
llvm::SmallVector<ASTNode, 5> Ancestors;
|
llvm::SmallVector<ParentTy, 5> Ancestors;
|
||||||
ASTNode ParentClosest;
|
ParentTy ParentClosest;
|
||||||
ASTNode ParentFarthest;
|
ParentTy ParentFarthest;
|
||||||
ExprParentFinder(Expr* ChildExpr,
|
ExprParentFinder(Expr* ChildExpr,
|
||||||
llvm::function_ref<bool(ASTNode)> Predicate) :
|
llvm::function_ref<bool(ParentTy)> Predicate) :
|
||||||
ChildExpr(ChildExpr), Predicate(Predicate) {}
|
ChildExpr(ChildExpr), Predicate(Predicate) {}
|
||||||
|
|
||||||
std::pair<bool, Expr *> walkToExprPre(Expr *E) override {
|
std::pair<bool, Expr *> walkToExprPre(Expr *E) override {
|
||||||
@@ -4989,8 +4989,9 @@ class CodeCompletionTypeContextAnalyzer {
|
|||||||
public:
|
public:
|
||||||
CodeCompletionTypeContextAnalyzer(DeclContext *DC, Expr *ParsedExpr) : DC(DC),
|
CodeCompletionTypeContextAnalyzer(DeclContext *DC, Expr *ParsedExpr) : DC(DC),
|
||||||
ParsedExpr(ParsedExpr), SM(DC->getASTContext().SourceMgr),
|
ParsedExpr(ParsedExpr), SM(DC->getASTContext().SourceMgr),
|
||||||
Context(DC->getASTContext()), Finder(ParsedExpr, [](ASTNode Node) {
|
Context(DC->getASTContext()),
|
||||||
if (auto E = Node.dyn_cast<Expr *>()) {
|
Finder(ParsedExpr, [](ASTWalker::ParentTy Node) {
|
||||||
|
if (auto E = Node.getAsExpr()) {
|
||||||
switch(E->getKind()) {
|
switch(E->getKind()) {
|
||||||
case ExprKind::Call:
|
case ExprKind::Call:
|
||||||
case ExprKind::Binary:
|
case ExprKind::Binary:
|
||||||
@@ -5000,7 +5001,7 @@ public:
|
|||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (auto S = Node.dyn_cast<Stmt *>()) {
|
} else if (auto S = Node.getAsStmt()) {
|
||||||
switch (S->getKind()) {
|
switch (S->getKind()) {
|
||||||
case StmtKind::Return:
|
case StmtKind::Return:
|
||||||
case StmtKind::ForEach:
|
case StmtKind::ForEach:
|
||||||
@@ -5012,7 +5013,7 @@ public:
|
|||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (auto D = Node.dyn_cast<Decl *>()) {
|
} else if (auto D = Node.getAsDecl()) {
|
||||||
switch (D->getKind()) {
|
switch (D->getKind()) {
|
||||||
case DeclKind::PatternBinding:
|
case DeclKind::PatternBinding:
|
||||||
return true;
|
return true;
|
||||||
@@ -5148,11 +5149,11 @@ public:
|
|||||||
|
|
||||||
for (auto It = Finder.Ancestors.rbegin(); It != Finder.Ancestors.rend();
|
for (auto It = Finder.Ancestors.rbegin(); It != Finder.Ancestors.rend();
|
||||||
++ It) {
|
++ It) {
|
||||||
if (auto Parent = It->dyn_cast<Expr *>()) {
|
if (auto Parent = It->getAsExpr()) {
|
||||||
analyzeExpr(Parent, Callback, PossibleNames);
|
analyzeExpr(Parent, Callback, PossibleNames);
|
||||||
} else if (auto Parent = It->dyn_cast<Stmt *>()) {
|
} else if (auto Parent = It->getAsStmt()) {
|
||||||
analyzeStmt(Parent, Callback);
|
analyzeStmt(Parent, Callback);
|
||||||
} else if (auto Parent = It->dyn_cast<Decl *>()) {
|
} else if (auto Parent = It->getAsDecl()) {
|
||||||
analyzeDecl(Parent, Callback);
|
analyzeDecl(Parent, Callback);
|
||||||
}
|
}
|
||||||
if (!PossibleTypes.empty() || !PossibleNames.empty())
|
if (!PossibleTypes.empty() || !PossibleNames.empty())
|
||||||
@@ -5429,12 +5430,12 @@ void CodeCompletionCallbacksImpl::doneParsing() {
|
|||||||
case CompletionKind::UnresolvedMember : {
|
case CompletionKind::UnresolvedMember : {
|
||||||
Lookup.setHaveDot(SourceLoc());
|
Lookup.setHaveDot(SourceLoc());
|
||||||
SmallVector<Type, 1> PossibleTypes;
|
SmallVector<Type, 1> PossibleTypes;
|
||||||
ExprParentFinder Walker(UnresolvedExpr, [&](ASTNode Node) {
|
ExprParentFinder Walker(UnresolvedExpr, [&](ASTWalker::ParentTy Node) {
|
||||||
return Node.is<Expr *>();
|
return Node.getAsExpr();
|
||||||
});
|
});
|
||||||
CurDeclContext->walkContext(Walker);
|
CurDeclContext->walkContext(Walker);
|
||||||
bool Success = false;
|
bool Success = false;
|
||||||
if (auto PE = Walker.ParentFarthest.get<Expr *>()) {
|
if (auto PE = Walker.ParentFarthest.getAsExpr()) {
|
||||||
prepareForRetypechecking(PE);
|
prepareForRetypechecking(PE);
|
||||||
Success = typeCheckUnresolvedExpr(*CurDeclContext, UnresolvedExpr, PE,
|
Success = typeCheckUnresolvedExpr(*CurDeclContext, UnresolvedExpr, PE,
|
||||||
PossibleTypes);
|
PossibleTypes);
|
||||||
|
|||||||
Reference in New Issue
Block a user