[CodeCompletion] Avoid prechecking twice when typeCheckForCodeCompletion is given a non-applicable expression (NFC) #34518
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
For code completion within a multi-statement closure, typeCheckExpression will be called on the expression containing the closure, and potentially again on the expression within the closure body that contains the completion location.
In the first call, the typeCheckForCodeCompletion pre-checks the expression as part of determining whether a second call is going to be made (in which case the first is not applicable for completion purposes) or not. In the case where it's not applicable control is returned to the regular typeCheckExpression code path, which would then pre-check the expression again.
This just moves the pre-check in typeCheckExpression before the call out to typeCheckForCodeCompletion, and passes a bool to typeCheckForCodeCompletion to tell it not to pre-check. typeCheckForCodeCompletion still needs to support pre-checking for fallback cases when no separate typeCheckExpression call will be made due to errors in the outer expression, or when no typeCheckExpression call is made at all.