@slippy-lint/slippy
Version:
A simple but powerful linter for Solidity
42 lines • 1.82 kB
JavaScript
import { StateVariableDefinition } from "@nomicfoundation/slang/ast";
import { hasDefaultVisibility } from "../slang/state-variables.js";
import { assertNonterminalNode, NonterminalKind, TerminalKindExtensions, } from "@nomicfoundation/slang/cst";
export const NoDefaultVisibility = {
name: "no-default-visibility",
recommended: true,
create: function () {
return new NoDefaultVisibilityRule(this.name);
},
};
class NoDefaultVisibilityRule {
constructor(name) {
this.name = name;
}
run({ file }) {
const results = [];
const cursor = file.createTreeCursor();
while (cursor.goToNextNonterminalWithKind(NonterminalKind.StateVariableDefinition)) {
assertNonterminalNode(cursor.node);
const stateVariableDefinition = new StateVariableDefinition(cursor.node);
const defaultVisibility = hasDefaultVisibility(stateVariableDefinition);
const name = stateVariableDefinition.name.unparse();
if (defaultVisibility) {
const firstTerminalCursor = cursor.spawn();
while (firstTerminalCursor.goToNextTerminal() &&
firstTerminalCursor.node.isTerminalNode() &&
TerminalKindExtensions.isTrivia(firstTerminalCursor.node.kind)) {
// ignore trivia
}
results.push({
rule: this.name,
sourceId: file.id,
line: firstTerminalCursor.textRange.start.line,
column: firstTerminalCursor.textRange.start.column,
message: `State variable '${name}' has default visibility`,
});
}
}
return results;
}
}
//# sourceMappingURL=no-default-visibility.js.map