@slippy-lint/slippy
Version:
A simple but powerful linter for Solidity
44 lines • 1.58 kB
JavaScript
import { NonterminalKind, TerminalKind } from "@nomicfoundation/slang/cst";
export const NoTxOrigin = {
name: "no-tx-origin",
recommended: true,
create: function () {
return new NoTxOriginRule(this.name);
},
};
class NoTxOriginRule {
constructor(name) {
this.name = name;
}
run({ file }) {
const diagnostics = [];
const cursor = file.createTreeCursor();
while (cursor.goToNextNonterminalWithKind(NonterminalKind.MemberAccessExpression)) {
const memberAccess = cursor.spawn();
if (!memberAccess.goToFirstChild())
continue;
if (!memberAccess.node.isNonterminalNode())
continue;
if (memberAccess.node.kind !== NonterminalKind.Expression)
continue;
if (memberAccess.goToNextTerminalWithKind(TerminalKind.Identifier)) {
if (memberAccess.node.unparse() !== "tx")
continue;
}
const txTextRange = memberAccess.textRange;
if (memberAccess.goToNextTerminalWithKind(TerminalKind.Identifier)) {
if (memberAccess.node.unparse() !== "origin")
continue;
}
diagnostics.push({
sourceId: file.id,
rule: this.name,
message: "Avoid using tx.origin",
line: txTextRange.start.line,
column: txTextRange.start.column,
});
}
return diagnostics;
}
}
//# sourceMappingURL=no-tx-origin.js.map