Skip to content

Commit f596041

Browse files
committed
chore: refactor
1 parent bce681e commit f596041

File tree

3 files changed

+25
-37
lines changed

3 files changed

+25
-37
lines changed

sphinx_autodoc_vyper/generator.py

+4-25
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import os
44
from typing import List
55

6-
from .parser import Constant, Contract, Enum, Event, Function, Struct
6+
from .parser import Contract, Function, Struct
77

88
INDEX_RST = """Vyper Smart Contracts Documentation
99
================================
@@ -74,7 +74,7 @@ def _generate_contract_docs(self, contracts: List[Contract]) -> None:
7474
if contract.enums:
7575
content += _insert_content_section("Enums")
7676
for enum in contract.enums:
77-
content += generate_enum_doc(enum)
77+
content += enum.generate_docs()
7878

7979
if contract.structs:
8080
content += _insert_content_section("Structs")
@@ -84,12 +84,12 @@ def _generate_contract_docs(self, contracts: List[Contract]) -> None:
8484
if contract.events:
8585
content += _insert_content_section("Events")
8686
for event in contract.events:
87-
content += generate_event_doc(event)
87+
content += event.generate_docs()
8888

8989
if contract.constants:
9090
content += _insert_content_section("Constants")
9191
for constant in contract.constants:
92-
content += generate_constant_doc(constant)
92+
content += constant.generate_docs()
9393

9494
# TODO: fix this
9595
# if contract.variables:
@@ -137,24 +137,3 @@ def _generate_struct_docs(struct: Struct) -> str:
137137
def _insert_content_section(name: str) -> str:
138138
"""Insert a hyperlinked content section accessible from the docs index."""
139139
return f"{name}\n{'-' * len(name)}\n\n"
140-
141-
142-
def generate_enum_doc(enum: Enum) -> str:
143-
content = f".. py:class:: {enum.name}\n\n"
144-
for value in enum.values:
145-
content += f" .. py:attribute:: {value}\n\n"
146-
return content
147-
148-
149-
def generate_constant_doc(constant: Constant) -> str:
150-
return f".. py:data:: {constant.name}\n\n {constant.type}: {constant.value}\n\n"
151-
152-
153-
def generate_event_doc(event: Event) -> str:
154-
content = f".. py:class:: {event.name}\n\n"
155-
for field in event.fields:
156-
content += f" .. py:attribute:: {field.name}\n\n"
157-
content += (
158-
f" {f'indexed({field.type})' if field.indexed else field.type}\n\n"
159-
)
160-
return content

sphinx_autodoc_vyper/parser.py

+17
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ class Enum:
3030
name: str
3131
values: List[str]
3232

33+
def generate_docs(self) -> str:
34+
content = f".. py:class:: {self.name}\n\n"
35+
for value in self.values:
36+
content += f" .. py:attribute:: {value}\n\n"
37+
return content
38+
3339

3440
@dataclass
3541
class Constant:
@@ -43,6 +49,9 @@ def __post_init__(self) -> None:
4349
if self.type is not None and self.type not in VALID_VYPER_TYPES:
4450
logger.warning(f"{self} is not a valid Vyper type")
4551

52+
def generate_docs(self) -> str:
53+
return f".. py:data:: {self.name}\n\n {self.type}: {self.value}\n\n"
54+
4655

4756
@dataclass
4857
class Variable:
@@ -140,6 +149,14 @@ class Event:
140149
name: str
141150
params: List[EventParameter]
142151

152+
def generate_docs(self) -> str:
153+
content = f".. py:class:: {event.name}\n\n"
154+
for field in event.fields:
155+
type_str = f"indexed({field.type})" if field.indexed else field.type
156+
content += f" .. py:attribute:: {field.name}\n\n"
157+
content += f" {type_str}\n\n"
158+
return content
159+
143160

144161
@dataclass
145162
class Function:

tests/test_generator.py

+4-12
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,7 @@
22

33
from pathlib import Path
44

5-
from sphinx_autodoc_vyper.generator import (
6-
SphinxGenerator,
7-
generate_constant_doc,
8-
generate_enum_doc,
9-
generate_event_doc,
10-
)
5+
from sphinx_autodoc_vyper.generator import SphinxGenerator
116
from sphinx_autodoc_vyper.parser import (
127
Constant,
138
Contract,
@@ -93,17 +88,15 @@ def test_contract_rst_generation(contracts_dir: Path, output_dir: Path) -> None:
9388
def test_generate_enum_doc() -> None:
9489
"""Test documentation generation for Enum."""
9590
enum = Enum(name="Status", values=["PENDING", "COMPLETED"])
96-
generated_doc = generate_enum_doc(enum)
9791
expected_doc = ".. py:enum:: Status\n :members:\n\n PENDING\n COMPLETED\n"
98-
assert generated_doc == expected_doc
92+
assert enum.generate_docs() == expected_doc
9993

10094

10195
def test_generate_constant_doc() -> None:
10296
"""Test documentation generation for Constant."""
10397
constant = Constant(name="MAX_SUPPLY", type="uint256", value="1000000")
104-
generated_doc = generate_constant_doc(constant)
10598
expected_doc = ".. py:data:: MAX_SUPPLY\n\n :type: uint256\n :value: 1000000\n"
106-
assert generated_doc == expected_doc
99+
assert constant.generate_docs() == expected_doc
107100

108101

109102
def test_generate_variable_doc() -> None:
@@ -145,14 +138,13 @@ def test_generate_event_doc() -> None:
145138
Parameter(name="value", type="uint256"),
146139
],
147140
)
148-
generated_doc = generate_event_doc(event)
149141
expected_doc = (
150142
".. py:event:: Transfer\n\n"
151143
" :param address from: \n"
152144
" :param address to: \n"
153145
" :param uint256 value: \n"
154146
)
155-
assert generated_doc == expected_doc
147+
assert event.generate_docs() == expected_doc
156148

157149

158150
def test_generate_docs_for_contract_with_functions_and_structs() -> None:

0 commit comments

Comments
 (0)