-
Notifications
You must be signed in to change notification settings - Fork 1.8k
JS: Incremental API graph #20733
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
JS: Incremental API graph #20733
Conversation
Locally these seem to get rid of the compilation warnings, but of course CI is the true arbiter here.
In this case we actually want magic to apply, but was prevented by locality.
Use manual recursion instead.
| private import semmle.javascript.dataflow.TypeTracking | ||
| private module Stage1Input implements StageInputSig { | ||
| pragma[inline] | ||
| predicate isAdditionalUseRoot(Node node) { none() } |
Check warning
Code scanning / CodeQL
Cannot inline predicate across overlay frontier Warning
| t = useStep(nd, promisified, boundArgs, prop, result) | ||
| } | ||
| pragma[inline] | ||
| predicate isAdditionalDefRoot(Node node) { none() } |
Check warning
Code scanning / CodeQL
Cannot inline predicate across overlay frontier Warning
|
|
||
| pragma[nomagic] | ||
| private predicate shouldTrackIntoOverlay(DataFlow::SourceNode nd) { | ||
| exists(DataFlow::Node overlayNode | |
Check warning
Code scanning / CodeQL
Omittable 'exists' variable Warning
in this argument
|
|
||
| pragma[nomagic] | ||
| private predicate shouldBacktrackIntoOverlay(DataFlow::SourceNode nd) { | ||
| exists(DataFlow::Node overlayNode | |
Check warning
Code scanning / CodeQL
Omittable 'exists' variable Warning
in this argument
| private module Debug { | ||
| private module FullInput implements StageInputSig { | ||
| pragma[inline] | ||
| predicate isAdditionalUseRoot(Node node) { none() } |
Check warning
Code scanning / CodeQL
Cannot inline predicate across overlay frontier Warning
| predicate inScope(DataFlow::Node node) { any() } | ||
| } | ||
|
|
||
| private module Full = Stage<FullInput>; |
Check warning
Code scanning / CodeQL
Dead code Warning
|
|
||
| private module Full = Stage<FullInput>; | ||
|
|
||
| query predicate missingDefNode(DataFlow::Node node) { |
Check warning
Code scanning / CodeQL
Dead code Warning
| not exists(MkDef(node)) | ||
| } | ||
|
|
||
| query predicate missingUseNode(DataFlow::Node node) { |
Check warning
Code scanning / CodeQL
Dead code Warning
| not exists(MkUse(node)) | ||
| } | ||
|
|
||
| query predicate lostEdge(Node pred, Label::ApiLabel lbl, Node succ) { |
Check warning
Code scanning / CodeQL
Dead code Warning
| not Cached::edge(pred, lbl, succ) | ||
| } | ||
|
|
||
| query predicate counts(int numEdges, int numOverlayEdges, float ratio) { |
Check warning
Code scanning / CodeQL
Dead code Warning
This was initially lost after rebasing with indentation changes
Some abstract classes defines fields without binding them, leaving it up to the subclasses to bind them. When combined with overlay[local?], the charpred for such an abstract class can become local, while the subclasses are global. The means the charpred needs to be materialized, even though it doesn't bind the fields, leading to a cartesian product.
2e5779a to
c8abbdc
Compare
No description provided.