JS: remove model of Deferred #3054
Merged
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.
Removes the
Deferred
model fromUseOfReturnlessFunction.ql
, and replaces it with an extremely simple heuristic that looks for methods namedresolve
.Promises were not used for much when the
UseOfReturnlessFunction
query was created.And adding a Promise model into a single query was therefore not a big deal.
Promises were later used to create
AdditionalFlowStep
s, and now we are looking at adding Promises as type-tracking steps. (#3036).Adding these type-tracking steps caused non-monotonic recursion as the
Deferred
model uses type-tracking.I therefore suggest removing the model from
UseOfReturnlessFunction
.The performance benefit from this change is negligible, as the
UseOfReturnlessFunction
query does not use a data-flow or taint-tracking configuration.