solidity-docgen
Version:
Documentation generator for Solidity smart contracts.
129 lines • 4.84 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.types = exports.variables = exports.errors = exports.modifiers = exports.events = exports.functions = exports.items = exports.returns = exports.params = exports.signature = exports.fullName = exports.name = exports.natspec = exports.type = void 0;
const utils_1 = require("solidity-ast/utils");
const natspec_1 = require("../utils/natspec");
const site_1 = require("../site");
const doc_item_1 = require("../doc-item");
const helpers_1 = require("./helpers");
const item_type_1 = require("../utils/item-type");
function type({ item }) {
return (0, item_type_1.itemType)(item);
}
exports.type = type;
function natspec({ item }) {
return (0, natspec_1.parseNatspec)(item);
}
exports.natspec = natspec;
function name({ item }, original) {
if (item.nodeType === 'FunctionDefinition') {
return typeof (original) === 'string' && original !== '' ? original : item.kind;
}
else {
return original;
}
}
exports.name = name;
function fullName({ item, contract }) {
if (contract) {
return `${contract.name}.${item.name}`;
}
else {
return `${item.name}`;
}
}
exports.fullName = fullName;
function signature({ item }) {
switch (item.nodeType) {
case 'ContractDefinition':
return undefined;
case 'FunctionDefinition': {
const { kind, name } = item;
const params = item.parameters.parameters;
const returns = item.returnParameters.parameters;
const head = (kind === 'function' || kind === 'freeFunction') ? `function ${name}` : kind;
let res = [
`${head}(${params.map(helpers_1.formatVariable).join(', ')})`,
item.visibility,
];
if (item.stateMutability !== 'nonpayable') {
res.push(item.stateMutability);
}
if (item.virtual) {
res.push('virtual');
}
if (returns.length > 0) {
res.push(`returns (${returns.map(helpers_1.formatVariable).join(', ')})`);
}
return res.join(' ');
}
case 'EventDefinition': {
const params = item.parameters.parameters;
return `event ${item.name}(${params.map(helpers_1.formatVariable).join(', ')})`;
}
case 'ErrorDefinition': {
const params = item.parameters.parameters;
return `error ${item.name}(${params.map(helpers_1.formatVariable).join(', ')})`;
}
case 'ModifierDefinition': {
const params = item.parameters.parameters;
return `modifier ${item.name}(${params.map(helpers_1.formatVariable).join(', ')})`;
}
case 'VariableDeclaration':
return (0, helpers_1.formatVariable)(item);
}
}
exports.signature = signature;
;
function getParams(params, natspec) {
return params.parameters.map((p, i) => ({
...p,
type: p.typeDescriptions.typeString,
natspec: natspec?.find((q, j) => q.name === undefined ? i === j : p.name === q.name)?.description,
}));
}
function params({ item }) {
if ('parameters' in item) {
return getParams(item.parameters, natspec(item[site_1.DOC_ITEM_CONTEXT]).params);
}
}
exports.params = params;
function returns({ item }) {
if ('returnParameters' in item) {
return getParams(item.returnParameters, natspec(item[site_1.DOC_ITEM_CONTEXT]).returns);
}
}
exports.returns = returns;
function items({ item }) {
return (item.nodeType === 'ContractDefinition')
? item.nodes.filter((0, utils_1.isNodeType)(doc_item_1.docItemTypes)).filter(n => !('visibility' in n) || n.visibility !== 'private')
: undefined;
}
exports.items = items;
function functions({ item }) {
return [...(0, utils_1.findAll)('FunctionDefinition', item)].filter(f => f.visibility !== 'private');
}
exports.functions = functions;
function events({ item }) {
return [...(0, utils_1.findAll)('EventDefinition', item)];
}
exports.events = events;
function modifiers({ item }) {
return [...(0, utils_1.findAll)('ModifierDefinition', item)];
}
exports.modifiers = modifiers;
function errors({ item }) {
return [...(0, utils_1.findAll)('ErrorDefinition', item)];
}
exports.errors = errors;
function variables({ item }) {
return (item.nodeType === 'ContractDefinition')
? item.nodes.filter((0, utils_1.isNodeType)('VariableDeclaration')).filter(v => v.stateVariable && v.visibility !== 'private')
: undefined;
}
exports.variables = variables;
function types({ item }) {
return [...(0, utils_1.findAll)(['StructDefinition', 'EnumDefinition', 'UserDefinedValueTypeDefinition'], item)];
}
exports.types = types;
//# sourceMappingURL=properties.js.map
;