Skip to content

Commit 3725261

Browse files
feat: Docs V0 (#25)
# Motivation Updates api-reference generation and rendering # Content - modified code that generates metadata # Testing # Please check the following before marking your PR as ready for review - [ ] I have added tests for my changes - [x] I have updated the documentation or added new documentation as needed - [x] I have read and agree to the [Contributor License Agreement](../CLA.md)
1 parent 01c15d1 commit 3725261

File tree

21 files changed

+1117
-491
lines changed

21 files changed

+1117
-491
lines changed

docs/mint.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@
157157
"api-reference/core/ExpressionStatement",
158158
"api-reference/core/ExternalModule",
159159
"api-reference/core/File",
160-
"api-reference/core/FlagKwargs",
161160
"api-reference/core/ForLoopStatement",
162161
"api-reference/core/Function",
163162
"api-reference/core/FunctionCall",

docs/snippets/Attribute.mdx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export const Attribute = ({ type, description }) => (
2+
<div className="py-6 first:pt-3 dark:border-gray-300/[0.06] text-sm font-normal">
3+
<div className="inline-grid grid-cols-[auto_auto] gap-1 font-mono py-2">
4+
{type}
5+
</div>
6+
<p className="mt-2">{description}</p>
7+
</div>
8+
)

docs/snippets/GithubLinkNote.mdx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export const GithubLinkNote = ({link}) => (
2+
<Info>
3+
<div className="flex gap-5 items-center">View Source on <a target="_blank" rel="noopener noreferrer" href={link}> Github</a></div>
4+
</Info>
5+
)

docs/snippets/HorizontalDivider.mdx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export const HorizontalDivider = ({light=false}) => (
2+
<div className="divide-y">
3+
<div className={`divide-y ${light ? "dark:border-gray-300/[0.06]" : "border-gray-600"}`}></div>
4+
<div className={`divide-y ${light ? "dark:border-gray-300/[0.06]" : "border-gray-600"}`}></div>
5+
</div>
6+
)

docs/snippets/Parameter.mdx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
export const Parameter = ({name, type, description, defaultValue}) => (
2+
<div className="py-6 first:pt-3 dark:border-gray-300/[0.06] text-sm font-normal">
3+
<div className="flex justify-between items-start font-mono">
4+
<div className="flex gap-4 items-start">
5+
<div className="flex gap-1 items-center text-sm text-primary mt-2">
6+
{name}
7+
</div>
8+
<div className="inline-grid grid-cols-[auto_auto] gap-1 py-2">
9+
{type}
10+
</div>
11+
</div>
12+
13+
<div className="flex-shrink-0 mt-2">
14+
{defaultValue ? (
15+
<div className="flex gap-1 items-center text-sm border border-purple-500 px-2 py-0.5 rounded">
16+
<span className="text-gray-500">default:</span>
17+
<span className="text-purple-500">{defaultValue}</span>
18+
</div>
19+
) : (
20+
<span className="text-sm border border-purple-500 px-2 py-0.5 rounded">
21+
required
22+
</span>
23+
)}
24+
</div>
25+
</div>
26+
<p className="mt-2">{description}</p>
27+
</div>
28+
)

docs/snippets/ParameterWrapper.mdx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export const ParameterWrapper = ({ children }) => (
2+
<div className="pl-6 divide-y">
3+
<h4 className="font-bold">Parameters</h4>
4+
<div className="divide-y dark:border-gray-300/[0.06]">
5+
{children}
6+
</div>
7+
</div>
8+
)

docs/snippets/Return.mdx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export const Return = ({return_type, description}) => (
2+
<div className="pl-6 divide-y">
3+
<h4 className="font-bold">Returns</h4>
4+
<div className="dark:border-gray-300/[0.06] ">
5+
<div className="py-6 first:pt-3 text-sm font-normal">
6+
<div className="flex gap-4 items-center">
7+
<div className="inline-grid grid-cols-[auto_auto] gap-1 font-mono py-2">
8+
{return_type}
9+
</div>
10+
</div>
11+
<p className="mt-2">{description}</p>
12+
</div>
13+
</div>
14+
</div>
15+
)

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ dependencies = [
6565
"psutil>=5.8.0",
6666
"fastapi[standard]<1.0.0,>=0.115.2",
6767
"starlette<1.0.0,>=0.16.0",
68+
"tqdm>=4.67.1",
6869
]
6970
license = {file = "LICENSE"}
7071
classifiers = [

src/codegen/git/utils/clone_url.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
def url_to_github(url: str, branch: str) -> str:
99
clone_url = url.removesuffix(".git").replace("[email protected]:", "github.com/")
10-
return f"https://{clone_url}/blob/{branch}"
10+
return f"{clone_url}/blob/{branch}"
1111

1212

1313
def get_clone_url_for_repo_config(repo_config: RepoConfig, github_type: GithubType = GithubType.GithubEnterprise) -> str:

src/codegen/gscli/generate/commands.py

Lines changed: 20 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,10 @@
1010

1111
from codegen.gscli.generate.runner_imports import _generate_runner_imports
1212
from codegen.gscli.generate.utils import LanguageType, generate_builtins_file
13-
from codegen.sdk.code_generation.doc_utils.canonicals import get_canonical_codemod_class_mdx, get_canonical_codemod_classes
13+
from codegen.sdk.code_generation.codegen_sdk_codebase import get_codegen_sdk_codebase
14+
from codegen.sdk.code_generation.doc_utils.generate_docs_json import generate_docs_json
1415
from codegen.sdk.code_generation.doc_utils.skills import format_all_skills
15-
from codegen.sdk.code_generation.doc_utils.utils import get_all_classes_to_document
16-
from codegen.sdk.code_generation.mdx_docs_generation import render_mdx_for_codebase_page, render_mdx_page_for_class
17-
from codegen.sdk.code_generation.prompts.api_docs import get_codegen_sdk_codebase
18-
from codegen.sdk.core.codebase import PyCodebaseType
19-
from codegen.sdk.enums import ProgrammingLanguage
16+
from codegen.sdk.code_generation.mdx_docs_generation import render_mdx_page_for_class
2017
from codegen.sdk.python import PyClass
2118
from codegen.sdk.skills.core.utils import get_all_skills, get_guide_skills_dict
2219

@@ -110,18 +107,17 @@ def generate_docs(docs_dir: str) -> None:
110107
111108
This will generate docs using the codebase locally, including any unstaged changes
112109
"""
113-
codebase = get_codegen_sdk_codebase()
114-
generate_codegen_sdk_docs(docs_dir, codebase)
110+
generate_codegen_sdk_docs(docs_dir)
115111
# generate_canonical_codemod_docs(docs_dir, codebase)
116-
generate_skills_docs(docs_dir)
117-
generate_guides(docs_dir)
112+
# generate_skills_docs(docs_dir)
113+
# generate_guides(docs_dir)
118114

119115

120116
def generate_guides(docs_dir: str):
121117
"""Updates code snippets in the guides with the latest skill implementations"""
122118
guide_skills = get_guide_skills_dict()
123119
for guide_relative_path in guide_skills:
124-
guide_file_path = os.path.join(docs_dir, "codebase-sdk", str(guide_relative_path) + ".mdx")
120+
guide_file_path = os.path.join(docs_dir, "api-reference", str(guide_relative_path) + ".mdx")
125121

126122
with open(guide_file_path) as f:
127123
file_content = f.read()
@@ -143,23 +139,20 @@ def get_snippet_pattern(target_name: str) -> str:
143139
return pattern
144140

145141

146-
def generate_codegen_sdk_docs(docs_dir: str, codebase: PyCodebaseType) -> None:
142+
def generate_codegen_sdk_docs(docs_dir: str) -> None:
147143
"""Generate the docs for the codegen_sdk API and update the mint.json"""
148144
print(colored("Generating codegen_sdk docs", "green"))
149145

150146
# Generate docs page for codebase api and write to the file system
151-
mdx_page = render_mdx_for_codebase_page(codebase)
152-
os.makedirs(os.path.join(docs_dir, "codebase-sdk"), exist_ok=True)
153-
file_path = os.path.join(docs_dir, "codebase-sdk", "codebase.mdx")
154-
with open(file_path, "w") as f:
155-
f.write(mdx_page)
147+
codebase = get_codegen_sdk_codebase()
148+
gs_docs = generate_docs_json(codebase, "HEAD")
156149

157150
# Prepare the directories for the new docs
158151
# Delete existing documentation directories if they exist
159152
# So we remove generated docs for any classes which no longer exist
160-
python_docs_dir = os.path.join(docs_dir, "codebase-sdk", "python")
161-
typescript_docs_dir = os.path.join(docs_dir, "codebase-sdk", "typescript")
162-
core_dir = os.path.join(docs_dir, "codebase-sdk", "core")
153+
python_docs_dir = os.path.join(docs_dir, "api-reference", "python")
154+
typescript_docs_dir = os.path.join(docs_dir, "api-reference", "typescript")
155+
core_dir = os.path.join(docs_dir, "api-reference", "core")
163156

164157
for dir_path in [python_docs_dir, typescript_docs_dir, core_dir]:
165158
if os.path.exists(dir_path):
@@ -170,27 +163,27 @@ def generate_codegen_sdk_docs(docs_dir: str, codebase: PyCodebaseType) -> None:
170163
os.makedirs(core_dir, exist_ok=True)
171164

172165
# Generate the docs pages for core, python, and typescript classes
173-
classes = get_all_classes_to_document(codebase)
174166

175167
# Write the generated docs to the file system, splitting between core, python, and typescript
176168
# keep track of where we put each one so we can update the mint.json
177169
python_set = set()
178170
typescript_set = set()
179171
core_set = set()
180172
# TODO replace this with new `get_mdx_for_class` function
181-
for class_name, class_obj in classes.items():
173+
for class_doc in gs_docs.classes:
174+
class_name = class_doc.title
182175
lower_class_name = class_name.lower()
183176
if lower_class_name.startswith("py"):
184177
file_path = os.path.join(python_docs_dir, f"{class_name}.mdx")
185-
python_set.add(f"codebase-sdk/python/{class_name}")
178+
python_set.add(f"api-reference/python/{class_name}")
186179
elif lower_class_name.startswith(("ts", "jsx")):
187180
file_path = os.path.join(typescript_docs_dir, f"{class_name}.mdx")
188-
typescript_set.add(f"codebase-sdk/typescript/{class_name}")
181+
typescript_set.add(f"api-reference/typescript/{class_name}")
189182
else:
190183
file_path = os.path.join(core_dir, f"{class_name}.mdx")
191-
core_set.add(f"codebase-sdk/core/{class_name}")
184+
core_set.add(f"api-reference/core/{class_name}")
192185

193-
mdx_page = render_mdx_page_for_class(cls=class_obj, codebase=codebase)
186+
mdx_page = render_mdx_page_for_class(cls_doc=class_doc)
194187
with open(file_path, "w") as f:
195188
f.write(mdx_page)
196189
print(colored("Finished writing new .mdx files", "green"))
@@ -201,7 +194,7 @@ def generate_codegen_sdk_docs(docs_dir: str, codebase: PyCodebaseType) -> None:
201194
mint_data = json.load(mint_file)
202195

203196
# Find the "Codebase SDK" group where we want to add the pages
204-
codebase_sdk_group = next(group for group in mint_data["navigation"] if group["group"] == "GraphSitter Reference")
197+
codebase_sdk_group = next(group for group in mint_data["navigation"] if group["group"] == "API Reference")
205198

206199
# Update the pages for each language group
207200
for group in codebase_sdk_group["pages"]:
@@ -243,26 +236,3 @@ def filter_class(cls: PyClass):
243236
if decorator.name == "skill_impl" and "external=True" in decorator.source:
244237
return True
245238
return False
246-
247-
248-
def generate_canonical_codemod_docs(docs_dir: str, codebase: PyCodebaseType) -> None:
249-
"""Generates docs for all canonical codemods"""
250-
print(colored("Generating canonical codemod docs", "green"))
251-
252-
print(colored("> Grabbing canonicals", "green"))
253-
classes = get_canonical_codemod_classes(codebase, language=ProgrammingLanguage.PYTHON)
254-
255-
# =====[ Write the canonical docs to the file system ]=====
256-
examples_dir = os.path.join(docs_dir, "codebase-sdk", "examples")
257-
print(colored(f"> Generating docs in {examples_dir}", "green"))
258-
docstrings = {k: get_canonical_codemod_class_mdx(v) for k, v in classes.items()}
259-
for k, v in docstrings.items():
260-
file_path = os.path.join(examples_dir, f"{k}.mdx")
261-
with open(file_path, "w") as f:
262-
f.write(v)
263-
264-
print(colored("> Writing to disk", "green"))
265-
266-
267-
if __name__ == "__main__":
268-
generate_skills_docs("docs")

src/codegen/sdk/code_generation/doc_utils/canonicals.py

Lines changed: 0 additions & 86 deletions
This file was deleted.

0 commit comments

Comments
 (0)