Files

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é")