mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[SourceKit] Make sure we reuse ASTContext in function bodies for solver-based cursor info
The main problem that prevented us from reusing the ASTContext was that we weren’t remapping the `LocToResolve` in the temporary buffer that only contains the re-parsed function back to the original buffer. Thus `NodeFinder` couldn’t find the node that we want to get cursor info for. Getting AST reuse to work for top-level items is harder because it currently heavily relies on the `HasCodeCompletion` state being set on the parser result. I’ll try that in a follow-up PR. rdar://103251263
This commit is contained in:
@@ -52,9 +52,11 @@ class ContextFinder : public SourceEntityWalker {
|
||||
std::function<bool(ASTNode)> IsContext;
|
||||
SmallVector<ASTNode, 4> AllContexts;
|
||||
bool contains(ASTNode Enclosing) {
|
||||
auto Result = SM.rangeContains(Enclosing.getSourceRange(), Target);
|
||||
if (Result && IsContext(Enclosing))
|
||||
auto Result = SM.rangeContainsRespectingReplacedRanges(
|
||||
Enclosing.getSourceRange(), Target);
|
||||
if (Result && IsContext(Enclosing)) {
|
||||
AllContexts.push_back(Enclosing);
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user