UNPKG

@slippy-lint/slippy

Version:

A simple but powerful linter for Solidity

43 lines 1.6 kB
import { NonterminalKind, TerminalKind } from "@nomicfoundation/slang/cst"; export const NoDuplicateImports = { name: "no-duplicate-imports", recommended: true, create: function () { return new NoDuplicateImportsRule(this.name); }, }; class NoDuplicateImportsRule { constructor(name) { this.name = name; } run({ file }) { const diagnostics = []; const cursor = file.createTreeCursor(); const importPaths = new Set(); while (cursor.goToNextNonterminalWithKind(NonterminalKind.ImportDirective)) { const importPathCursor = cursor.spawn(); if (!importPathCursor.goToNextNonterminalWithKind(NonterminalKind.StringLiteral)) { continue; } const importPath = importPathCursor.node.unparse().trim().slice(1, -1); const importKeywordCursor = cursor.spawn(); if (!importKeywordCursor.goToNextTerminalWithKind(TerminalKind.ImportKeyword)) { continue; } if (importPaths.has(importPath)) { diagnostics.push({ sourceId: file.id, rule: this.name, message: `Duplicate import of '${importPath}'`, line: importKeywordCursor.textRange.start.line, column: importKeywordCursor.textRange.start.column, }); } else { importPaths.add(importPath); } } return diagnostics; } } //# sourceMappingURL=no-duplicate-imports.js.map