21 lines
1.2 KiB
JavaScript
21 lines
1.2 KiB
JavaScript
// Détecte les identifiants référencés sans liaison (ReferenceError potentielle) via @babel/traverse
|
|
const FE = require("path").resolve(__dirname, "../../../frontend/node_modules") + "/"
|
|
const parser = require(FE + "@babel/parser")
|
|
const traverse = require(FE + "@babel/traverse").default
|
|
const fs = require("fs")
|
|
const globals = new Set(Object.getOwnPropertyNames(globalThis).concat(["require","module","exports","__dirname","__filename","process","Buffer","console","setTimeout","clearTimeout","setInterval","clearInterval","setImmediate","URL","fetch","AbortController","structuredClone","undefined","arguments"]))
|
|
let bad = 0
|
|
for (const file of process.argv.slice(2)) {
|
|
const ast = parser.parse(fs.readFileSync(file, "utf8"), { sourceType: "script", allowReturnOutsideFunction: true })
|
|
traverse(ast, {
|
|
ReferencedIdentifier(p) {
|
|
const name = p.node.name
|
|
if (p.scope.hasBinding(name, true) || globals.has(name)) return
|
|
if (p.parentPath.isMemberExpression({ property: p.node }) && !p.parentPath.node.computed) return
|
|
bad++
|
|
console.log(file.split("/").pop() + ":" + p.node.loc.start.line + " " + name)
|
|
}
|
|
})
|
|
}
|
|
console.log(bad ? bad + " identifiant(s) non lié(s)" : "aucun identifiant non lié")
|