Compare commits

...
2 Commits
5 changed files with 61 additions and 2 deletions
+6
View File
@@ -1,6 +1,12 @@
Changelog Changelog
========= =========
0.7.2
-----
- Fix double extension in llms.txt URLs when source suffix matches sourcelink suffix
`#63 <https://github.com/jdillard/sphinx-llms-txt/issues/63>`_
0.7.1 0.7.1
----- -----
+5
View File
@@ -26,6 +26,11 @@ Highlights
Filter content, include source code files, or integrate with alternative output formats like Markdown for even better LLM compatibility. Filter content, include source code files, or integrate with alternative output formats like Markdown for even better LLM compatibility.
See :doc:`getting-started` for output format options and :doc:`configuration-values` for all settings. See :doc:`getting-started` for output format options and :doc:`configuration-values` for all settings.
.. seealso::
For better default output without configuration, see `sphinx-llm <https://github.com/NVIDIA/sphinx-llm>`_ from NVIDIA.
sphinx-llms-txt is best when customized with alternative output formats, content filtering, or source code inclusion.
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
+1 -1
View File
@@ -21,7 +21,7 @@ from .manager import LLMSFullManager
from .processor import DocumentProcessor from .processor import DocumentProcessor
from .writer import FileWriter from .writer import FileWriter
__version__ = "0.7.1" __version__ = "0.7.2"
# Export classes needed by tests # Export classes needed by tests
__all__ = [ __all__ = [
+7 -1
View File
@@ -163,11 +163,17 @@ class FileWriter:
title = page_titles.get(docname, docname) title = page_titles.get(docname, docname)
# Avoid duplicate extensions when suffix matches
# sourcelink_suffix (e.g., both are ".txt")
effective_sourcelink_suffix = sourcelink_suffix
if suffix and suffix == sourcelink_suffix:
effective_sourcelink_suffix = ""
uri = uri_template.format( uri = uri_template.format(
base_url=base_url, base_url=base_url,
docname=docname, docname=docname,
suffix=suffix or "", suffix=suffix or "",
sourcelink_suffix=sourcelink_suffix, sourcelink_suffix=effective_sourcelink_suffix,
) )
f.write(f"- [{title}]({uri})\n") f.write(f"- [{title}]({uri})\n")
+42
View File
@@ -132,6 +132,48 @@ def test_uri_template_custom(tmp_path):
assert "- [Home Page](https://example.com/raw/index.rst)" in content assert "- [Home Page](https://example.com/raw/index.rst)" in content
def test_uri_template_no_double_extension_when_suffix_matches_sourcelink(tmp_path):
"""Test that .txt suffix + .txt sourcelink_suffix doesn't produce .txt.txt URLs."""
build_dir = tmp_path / "build"
build_dir.mkdir()
sources_dir = build_dir / "_sources"
sources_dir.mkdir()
class MockApp:
class Config:
html_sourcelink_suffix = ".txt"
config = Config()
config = {
"llms_txt_file": True,
"llms_txt_filename": "llms.txt",
"html_baseurl": "https://example.com",
}
writer = FileWriter(config, str(build_dir), MockApp())
page_titles = {
"index": "Home Page",
"contents": "Table of Contents",
}
# .txt source files — suffix matches sourcelink_suffix
page_order = [("index", ".txt"), ("contents", ".txt")]
writer.write_verbose_info_to_file(page_order, page_titles, 0, sources_dir)
verbose_file = build_dir / "llms.txt"
with open(verbose_file, "r", encoding="utf-8") as f:
content = f.read()
# Should NOT have double .txt.txt extension
assert ".txt.txt" not in content
# Should have single .txt extension
assert "- [Home Page](https://example.com/_sources/index.txt)" in content
assert "- [Table of Contents](https://example.com/_sources/contents.txt)" in content
def test_uri_template_invalid_fallback(tmp_path): def test_uri_template_invalid_fallback(tmp_path):
""" """
Test that invalid template falls back to default sources template when Test that invalid template falls back to default sources template when