mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
Following a suggestion by Asger, we track use nodes through calls to `promisify`. When we see a call to a promisified function, we introduce a new synthetic API-graph node representing the callback argument synthesised by the promisification, and track the result of the call to an `await` (or other promise resolution), which is then considered to be a use of the first parameter of the synthetic callback (the zeroth parameter being an error code, which we do not model yet).
29 lines
1.3 KiB
JavaScript
29 lines
1.3 KiB
JavaScript
var bluebird = require("bluebird");
|
|
var readFile = require("fs").readFile;
|
|
|
|
var readFileAsync = bluebird.promisify(readFile);
|
|
|
|
readFile(
|
|
"tst.txt", // def (parameter 0 (member readFile (member exports (module fs))))
|
|
"utf8", // def (parameter 1 (member readFile (member exports (module fs))))
|
|
function (
|
|
err, // use (parameter 0 (parameter 2 (member readFile (member exports (module fs)))))
|
|
contents // use (parameter 1 (parameter 2 (member readFile (member exports (module fs)))))
|
|
) { });
|
|
|
|
readFileAsync(
|
|
"tst.txt" // def (parameter 0 (member readFile (member exports (module fs))))
|
|
).then(
|
|
function (buf) { } // use (parameter 1 (parameter 1 (member readFile (member exports (module fs)))))
|
|
).catch(
|
|
function (err) { } // not yet modelled: (parameter 0 (parameter 1 (member readFile (member exports (module fs)))))
|
|
);
|
|
|
|
try {
|
|
let p = readFileAsync(
|
|
"tst.txt", // def (parameter 0 (member readFile (member exports (module fs))))
|
|
"utf8" // def (parameter 1 (member readFile (member exports (module fs))))
|
|
);
|
|
let data = await p; // use (parameter 1 (parameter 2 (member readFile (member exports (module fs)))))
|
|
} catch (e) { } // not yet modelled: (parameter 0 (parameter 2 (member readFile (member exports (module fs)))))
|