UNPKG

@slippy-lint/slippy

Version:

A simple but powerful linter for Solidity

44 lines 1.58 kB
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