From a85899c31dafc3d9c24842edc22fe1f3ce304a88 Mon Sep 17 00:00:00 2001 From: Atsushi Sakai Date: Sat, 8 Mar 2025 20:18:01 +0900 Subject: [PATCH 1/2] feat: add linkcode_resolve function for enhanced documentation linking --- docs/conf.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 919fa9ac76..1566b0c52a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -184,4 +184,36 @@ ] -# -- Extension configuration ------------------------------------------------- +# -- linkcode setting ------------------------------------------------- + +import inspect +import os +import sys +import functools + +GITHUB_REPO = "https://github.com/AtsushiSakai/PythonRobotics" +GITHUB_BRANCH = "main" + + +def linkcode_resolve(domain, info): + if domain != "py": + return None + + modname = info["module"] + fullname = info["fullname"] + + try: + module = __import__(modname, fromlist=[fullname]) + obj = functools.reduce(getattr, fullname.split("."), module) + except (ImportError, AttributeError): + return None + + try: + srcfile = inspect.getsourcefile(obj) + srcfile = os.path.relpath(srcfile, start=os.path.dirname( + sys.modules[modname].__file__)) + lineno = inspect.getsourcelines(obj)[1] + except Exception: + return None + + return f"{GITHUB_REPO}/blob/{GITHUB_BRANCH}/{srcfile}#L{lineno}" From 4fa2621eb661aaf43477bb18a0a4e413244418ec Mon Sep 17 00:00:00 2001 From: Atsushi Sakai Date: Sun, 9 Mar 2025 20:11:59 +0900 Subject: [PATCH 2/2] feat: enhance documentation linking with linkcode and relative path resolution --- docs/conf.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 1566b0c52a..eeabab11b1 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,6 +13,8 @@ # import os import sys +from pathlib import Path + sys.path.insert(0, os.path.abspath('../')) @@ -41,7 +43,7 @@ 'matplotlib.sphinxext.plot_directive', 'sphinx.ext.autodoc', 'sphinx.ext.mathjax', - 'sphinx.ext.viewcode', + 'sphinx.ext.linkcode', 'sphinx.ext.napoleon', 'sphinx.ext.imgconverter', 'IPython.sphinxext.ipython_console_highlighting', @@ -192,7 +194,7 @@ import functools GITHUB_REPO = "https://github.com/AtsushiSakai/PythonRobotics" -GITHUB_BRANCH = "main" +GITHUB_BRANCH = "master" def linkcode_resolve(domain, info): @@ -210,10 +212,19 @@ def linkcode_resolve(domain, info): try: srcfile = inspect.getsourcefile(obj) - srcfile = os.path.relpath(srcfile, start=os.path.dirname( - sys.modules[modname].__file__)) + srcfile = get_relative_path_from_parent(srcfile, "PythonRobotics") lineno = inspect.getsourcelines(obj)[1] except Exception: return None return f"{GITHUB_REPO}/blob/{GITHUB_BRANCH}/{srcfile}#L{lineno}" + + +def get_relative_path_from_parent(file_path: str, parent_dir: str): + path = Path(file_path).resolve() + + try: + parent_path = next(p for p in path.parents if p.name == parent_dir) + return str(path.relative_to(parent_path)) + except StopIteration: + raise ValueError(f"Parent directory '{parent_dir}' not found in {file_path}")