@solvprotocol/upgrade-safe-transpiler
Version:
Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.
46 lines (41 loc) • 1.44 kB
text/typescript
import { SourceUnit } from 'solidity-ast';
import { findAll } from 'solidity-ast/utils';
import { getNodeBounds } from '../solc/ast-utils';
import { Transformation } from './type';
import { renameContract, renamePath } from '../rename';
import { TransformerTools } from '../transform';
export function* fixImportDirectives(
ast: SourceUnit,
{ resolver }: TransformerTools,
): Generator<Transformation> {
for (const imp of findAll('ImportDirective', ast)) {
const referencedSourceUnit = resolver.resolveNode('SourceUnit', imp.sourceUnit);
const aliases = imp.symbolAliases.map(a => {
const id = referencedSourceUnit.exportedSymbols[a.foreign.name]?.[0];
if (id === undefined) {
throw new Error(`Can't find symbol imported in ${ast.absolutePath}`);
}
let alias = '';
const contract = resolver.resolveContract(id);
if (contract === undefined) {
alias += a.foreign.name;
} else {
alias += renameContract(a.foreign.name);
}
if (a.local != null && a.local !== a.foreign.name) {
alias += ` as ${a.local}`;
}
return alias;
});
const statement = ['import'];
if (aliases.length > 0) {
statement.push(`{ ${aliases.join(', ')} } from`);
}
statement.push(`"${renamePath(imp.file)}";`);
yield {
kind: 'fix-import-directives',
text: statement.join(' '),
...getNodeBounds(imp),
};
}
}