sphinx-codeautolink 0.17.1__tar.gz → 0.17.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. {sphinx_codeautolink-0.17.1/src/sphinx_codeautolink.egg-info → sphinx_codeautolink-0.17.3}/PKG-INFO +1 -1
  2. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/contributing.rst +10 -0
  3. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/about.rst +8 -2
  4. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/examples.rst +5 -11
  5. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/index.rst +1 -1
  6. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/release_notes.rst +10 -0
  7. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/pyproject.toml +3 -0
  8. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/__init__.py +2 -2
  9. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/extension/__init__.py +16 -4
  10. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/extension/backref.py +7 -1
  11. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/extension/block.py +28 -2
  12. sphinx_codeautolink-0.17.3/src/sphinx_codeautolink/locale/fr/LC_MESSAGES/sphinx-codeautolink.mo +0 -0
  13. sphinx_codeautolink-0.17.3/src/sphinx_codeautolink/locale/fr/LC_MESSAGES/sphinx-codeautolink.po +25 -0
  14. sphinx_codeautolink-0.17.3/src/sphinx_codeautolink/locale/nl/LC_MESSAGES/sphinx-codeautolink.mo +0 -0
  15. sphinx_codeautolink-0.17.3/src/sphinx_codeautolink/locale/nl/LC_MESSAGES/sphinx-codeautolink.po +27 -0
  16. sphinx_codeautolink-0.17.3/src/sphinx_codeautolink/locale/ru/LC_MESSAGES/sphinx-codeautolink.po +25 -0
  17. sphinx_codeautolink-0.17.3/src/sphinx_codeautolink/locale/uk/LC_MESSAGES/sphinx-codeautolink.po +25 -0
  18. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3/src/sphinx_codeautolink.egg-info}/PKG-INFO +1 -1
  19. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink.egg-info/SOURCES.txt +8 -0
  20. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/__init__.py +58 -1
  21. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/_check.py +12 -4
  22. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_extdoctest_doctest.txt +0 -3
  23. sphinx_codeautolink-0.17.3/tests/extension/ref/lexer_extdoctest_setup.txt +35 -0
  24. sphinx_codeautolink-0.17.3/tests/extension/ref/lexer_extdoctest_setup_wrong.txt +15 -0
  25. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_extdoctest_testcode.txt +0 -1
  26. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tox.ini +3 -3
  27. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/LICENSE +0 -0
  28. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/MANIFEST.in +0 -0
  29. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/requirements.txt +0 -0
  30. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/404.rst +0 -0
  31. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/conf.py +0 -0
  32. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/example_library.rst +0 -0
  33. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/lib.py +0 -0
  34. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/reference.rst +0 -0
  35. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/docs/src/static/custom.css +0 -0
  36. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/readme_pypi.rst +0 -0
  37. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/requirements/build +0 -0
  38. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/requirements/dev +0 -0
  39. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/requirements/docs +0 -0
  40. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/requirements/extras +0 -0
  41. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/requirements/tests +0 -0
  42. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/setup.cfg +0 -0
  43. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/extension/cache.py +0 -0
  44. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/extension/directive.py +0 -0
  45. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/extension/resolve.py +0 -0
  46. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/extension/translation.py +0 -0
  47. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/locale/de/LC_MESSAGES/sphinx-codeautolink.mo +0 -0
  48. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/locale/de/LC_MESSAGES/sphinx-codeautolink.po +0 -0
  49. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/locale/es/LC_MESSAGES/sphinx-codeautolink.mo +0 -0
  50. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/locale/es/LC_MESSAGES/sphinx-codeautolink.po +0 -0
  51. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/locale/fi/LC_MESSAGES/sphinx-codeautolink.mo +0 -0
  52. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/locale/fi/LC_MESSAGES/sphinx-codeautolink.po +0 -0
  53. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/locale/it/LC_MESSAGES/sphinx-codeautolink.mo +0 -0
  54. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/locale/it/LC_MESSAGES/sphinx-codeautolink.po +0 -0
  55. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/locale/sphinx-codeautolink.pot +0 -0
  56. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/parse.py +0 -0
  57. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/static/sphinx-codeautolink.css +0 -0
  58. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink/warn.py +0 -0
  59. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink.egg-info/dependency_links.txt +0 -0
  60. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink.egg-info/requires.txt +0 -0
  61. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/src/sphinx_codeautolink.egg-info/top_level.txt +0 -0
  62. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/__init__.py +0 -0
  63. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/concat_invalid.txt +0 -0
  64. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/custom_block_import_invalid.txt +0 -0
  65. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/custom_block_syntax_error.txt +0 -0
  66. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/failed_resolve_invalid_location.txt +0 -0
  67. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/failed_resolve_no_module.txt +0 -0
  68. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/failed_resolve_return_type.txt +0 -0
  69. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/match_block_warning.txt +0 -0
  70. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/missing_inventory.txt +0 -0
  71. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/no_backreference.txt +0 -0
  72. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/no_module_docs.txt +0 -0
  73. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/preface_invalid_arg.txt +0 -0
  74. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/ref_import_star_invalid.txt +0 -0
  75. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/ref_invalid_block_type.txt +0 -0
  76. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/ref_invalid_syntax.txt +0 -0
  77. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/ref_invalid_syntax_complex.txt +0 -0
  78. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/ref_ipython_non-python.txt +0 -0
  79. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/fail/skip_invalid.txt +0 -0
  80. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/class_mro_fix.txt +0 -0
  81. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/concat_default.txt +0 -0
  82. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/concat_off.txt +0 -0
  83. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/concat_on_across_sections.txt +0 -0
  84. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/concat_on_breaks.txt +0 -0
  85. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/concat_section_breaks.txt +0 -0
  86. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/concat_section_returns_to_global.txt +0 -0
  87. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/custom_block.txt +0 -0
  88. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/custom_block_imported.txt +0 -0
  89. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/empty_project.txt +0 -0
  90. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/inventory_map_is_needed.txt +0 -0
  91. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/inventory_map_not_needed.txt +0 -0
  92. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_bazel.txt +0 -0
  93. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_default.txt +0 -0
  94. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_default_fail.txt +0 -0
  95. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_doctest.txt +0 -0
  96. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_doctest_empty_input.txt +0 -0
  97. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_highlight_language.txt +0 -0
  98. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_highlight_none.txt +0 -0
  99. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_ipython.txt +0 -0
  100. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_ipython3.txt +0 -0
  101. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_ipython_directive.txt +0 -0
  102. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_ipython_directive_comment.txt +0 -0
  103. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_ipython_syntax.txt +0 -0
  104. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_literal.txt +0 -0
  105. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_non_python_block.txt +0 -0
  106. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_py.txt +0 -0
  107. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_py3.txt +0 -0
  108. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_pycon.txt +0 -0
  109. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_pycon_implicit.txt +0 -0
  110. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_pyi.txt +0 -0
  111. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_python3.txt +0 -0
  112. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_sage.txt +0 -0
  113. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/lexer_starlark.txt +0 -0
  114. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/line_numbers.txt +0 -0
  115. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_concatenated.txt +0 -0
  116. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_consumed_non_python.txt +0 -0
  117. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_document.txt +0 -0
  118. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_global.txt +0 -0
  119. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_global_multiline.txt +0 -0
  120. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_global_overwritten.txt +0 -0
  121. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_multiline.txt +0 -0
  122. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_multiline_and_arg.txt +0 -0
  123. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_multiple.txt +0 -0
  124. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/preface_single.txt +0 -0
  125. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_assign_targets.txt +0 -0
  126. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_builtins.txt +0 -0
  127. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_chain.txt +0 -0
  128. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_chain_call.txt +0 -0
  129. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_class_attr.txt +0 -0
  130. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_class_meth_returns_self.txt +0 -0
  131. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_class_type_attr.txt +0 -0
  132. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_decorator.txt +0 -0
  133. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_fluent_attrs.txt +0 -0
  134. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_fluent_call.txt +0 -0
  135. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_func_args.txt +0 -0
  136. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_func_no_module.txt +0 -0
  137. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_import_as.txt +0 -0
  138. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_import_from.txt +0 -0
  139. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_import_from_complex.txt +0 -0
  140. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_import_multiple.txt +0 -0
  141. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_import_multiple_libs.txt +0 -0
  142. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_import_star.txt +0 -0
  143. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_import_submodule.txt +0 -0
  144. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_imported_func.txt +0 -0
  145. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_imported_func_relocated.txt +0 -0
  146. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_inherited.txt +0 -0
  147. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_intersphinx_only.txt +0 -0
  148. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_invalid_func.txt +0 -0
  149. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_invalid_typehint.txt +0 -0
  150. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_optional.txt +0 -0
  151. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_optional_future.txt +0 -0
  152. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_shadow_builtin.txt +0 -0
  153. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/ref_simple.txt +0 -0
  154. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/search_css_duplicates_removed.txt +0 -0
  155. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/skip_file.txt +0 -0
  156. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/skip_next.txt +0 -0
  157. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/skip_next_consumed_non_python.txt +0 -0
  158. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/skip_off.txt +0 -0
  159. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/ref/skip_section.txt +0 -0
  160. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/src/class_mro_fix.py +0 -0
  161. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/src/future_project.py +0 -0
  162. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/src/parser_func.py +0 -0
  163. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/src/test_project/__init__.py +0 -0
  164. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/src/test_project/sub.py +0 -0
  165. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/table/tab_autodoc_empty.txt +0 -0
  166. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/table/tab_autodoc_links.txt +0 -0
  167. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/table/tab_manual_collapse.txt +0 -0
  168. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/table/tab_manual_empty.txt +0 -0
  169. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/table/tab_manual_links.txt +0 -0
  170. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/table/tab_manual_links_subsection.txt +0 -0
  171. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/extension/table/tab_no_table.txt +0 -0
  172. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/parse/__init__.py +0 -0
  173. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/parse/_util.py +0 -0
  174. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/parse/assign.py +0 -0
  175. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/parse/chain.py +0 -0
  176. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/parse/match.py +0 -0
  177. {sphinx_codeautolink-0.17.1 → sphinx_codeautolink-0.17.3}/tests/parse/scope.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sphinx-codeautolink
3
- Version: 0.17.1
3
+ Version: 0.17.3
4
4
  Summary: Automatic links from code examples to reference documentation.
5
5
  Author-email: Felix Hildén <felix.hilden@gmail.com>
6
6
  Maintainer-email: Felix Hildén <felix.hilden@gmail.com>
@@ -37,6 +37,16 @@ For tips and tricks on contributing, see `how to submit a contribution
37
37
  specifically `opening a pull request
38
38
  <https://opensource.guide/how-to-contribute/#opening-a-pull-request>`_.
39
39
 
40
+ If you want to contribute to someone else's fork and find yourself forgetting
41
+ how to do it every time, here's the runbook:
42
+
43
+ .. code:: sh
44
+
45
+ git remote add [name] git@github.com:[name]/sphinx-codeautolink.git
46
+ git fetch [name]
47
+ git switch -c branch [name]/branch
48
+ git remote rm [name]
49
+
40
50
  Testing
41
51
  -------
42
52
  The installation can be verified, and any changes tested by running tox.
@@ -16,8 +16,8 @@ is injected after the ordinary Sphinx build is finished.
16
16
 
17
17
  Caveats
18
18
  -------
19
- - **Only works with HTML documentation**, disabled otherwise. If the extension
20
- is off, it silently removes directives that would produce output.
19
+ - **Only works with HTML or DIRHTML documentation**, disabled otherwise. If the
20
+ extension is off, it silently removes directives that would produce output.
21
21
  - **Only processes blocks, not inline code**. Sphinx has great tools
22
22
  for linking definitions inline, and longer code should be in a block anyway.
23
23
  - **Doesn't run example code**. Therefore all possible resolvable types are not
@@ -79,6 +79,12 @@ Locally defined custom block parsers in :confval:`codeautolink_custom_blocks`
79
79
  cannot be passed to Pickle, which prevents parallel Sphinx builds.
80
80
  Please consider using an importable function instead.
81
81
 
82
+ Priority
83
+ ********
84
+ The extension parses code blocks in the ``doctree-read`` Sphinx event.
85
+ The priority is set to 490 to catch nodes removed by ``sphinx.ext.doctest``
86
+ (priority 500). In other cases the priority of the extension is default.
87
+
82
88
  Copying code blocks
83
89
  -------------------
84
90
  If you feel like code links make copying code a bit more difficult,
@@ -215,24 +215,18 @@ Please specify a ``type`` in :rst:dir:`autolink-examples`:
215
215
 
216
216
  Doctest code blocks
217
217
  -------------------
218
- Using the ``sphinx.ext.doctest`` extension for code examples requires
219
- setting up :confval:`codeautolink_custom_blocks`.
220
- To help in that, :func:`clean_pycon <sphinx_codeautolink.clean_pycon>`
221
- is provided as a ready-made transformer.
222
-
223
- .. code:: python
218
+ Using the ``sphinx.ext.doctest`` extension for code examples only requires
219
+ activating the extension::
224
220
 
225
221
  extensions = [
226
222
  ...,
227
223
  "sphinx.ext.doctest",
228
224
  ]
229
- codeautolink_custom_blocks = {
230
- "python3": None,
231
- "pycon3": "sphinx_codeautolink.clean_pycon",
232
- }
233
225
 
234
226
  ``doctest`` and ``testcode`` blocks now work as expected.
235
- However, any test setup and teardown code is not taken into account.
227
+ Code in :rst:dir:`testsetup` is considered to be the first block
228
+ :rst:dir:`autolink-preface` before each matching test group.
229
+ However, `skipif` is not supported.
236
230
 
237
231
  .. doctest::
238
232
 
@@ -68,7 +68,7 @@ Caveats
68
68
  -------
69
69
  For a more thorough explanation, see :ref:`about`.
70
70
 
71
- - Only works with HTML documentation
71
+ - Only works with HTML or DIRHTML documentation
72
72
  - Only processes blocks, not inline code
73
73
  - Doesn't run example code
74
74
  - Parsing and type hint resolving is incomplete
@@ -8,6 +8,16 @@ These release notes are based on
8
8
  sphinx-codeautolink adheres to
9
9
  `Semantic Versioning <https://semver.org>`_.
10
10
 
11
+ 0.17.3 (2025-03-06)
12
+ -------------------
13
+ - Fix Sphinx InventoryItem deprecation warning (:issue:`173`)
14
+ - Add support for the DIRHTML Sphinx builder (:issue:`188`)
15
+
16
+ 0.17.2 (2025-03-02)
17
+ -------------------
18
+ - Support :rst:dir:`testsetup` from ``sphinx.ext.doctest`` as another
19
+ type of preface (:issue:`186`)
20
+
11
21
  0.17.1 (2025-02-24)
12
22
  -------------------
13
23
  - Add translations via i18n (:issue:`164`)
@@ -48,6 +48,9 @@ version = {attr = "sphinx_codeautolink.__version__"}
48
48
  [tool.pytest.ini_options]
49
49
  python_files = "*.py"
50
50
  testpaths = ["tests"]
51
+ filterwarnings = [
52
+ "ignore:.*IPython:UserWarning",
53
+ ]
51
54
 
52
55
  [tool.coverage.run]
53
56
  source = ["src"]
@@ -8,7 +8,7 @@ from .extension import SphinxCodeAutoLink, backref, directive
8
8
  from .extension.block import clean_ipython, clean_pycon
9
9
  from .extension.translation import MESSAGE_CATALOG_NAME
10
10
 
11
- __version__ = "0.17.1"
11
+ __version__ = "0.17.3"
12
12
 
13
13
 
14
14
  def setup(app: Sphinx):
@@ -66,7 +66,7 @@ def setup(app: Sphinx):
66
66
 
67
67
  app.connect("builder-inited", state.build_inited)
68
68
  app.connect("autodoc-process-docstring", state.autodoc_process_docstring)
69
- app.connect("doctree-read", state.parse_blocks)
69
+ app.connect("doctree-read", state.parse_blocks, priority=490)
70
70
  app.connect("env-merge-info", state.merge_environments)
71
71
  app.connect("env-purge-doc", state.purge_doc_from_environment)
72
72
  app.connect("env-updated", state.create_references)
@@ -7,6 +7,7 @@ from functools import wraps
7
7
  from pathlib import Path
8
8
  from traceback import print_exc
9
9
 
10
+ from sphinx import version_info as sphinx_version
10
11
  from sphinx.ext.intersphinx import InventoryAdapter
11
12
  from sphinx.util import import_object
12
13
 
@@ -89,7 +90,7 @@ class SphinxCodeAutoLink:
89
90
  @print_exceptions()
90
91
  def build_inited(self, app) -> None:
91
92
  """Handle initial setup."""
92
- if app.builder.name != "html":
93
+ if app.builder.name not in ("html", "dirhtml"):
93
94
  self.do_nothing = True
94
95
  return
95
96
 
@@ -177,7 +178,9 @@ class SphinxCodeAutoLink:
177
178
  }
178
179
  inter_inv = InventoryAdapter(app.env).main_inventory
179
180
  transposed = transpose_inventory(inter_inv, relative_to=app.outdir)
180
- transposed.update(transpose_inventory(inventory, relative_to=app.outdir))
181
+ transposed.update(
182
+ transpose_inventory(inventory, relative_to=app.outdir, use_tuple=True)
183
+ )
181
184
  return transposed
182
185
 
183
186
  @print_exceptions()
@@ -268,6 +271,7 @@ class SphinxCodeAutoLink:
268
271
  visitor = CodeRefsVisitor(
269
272
  doctree,
270
273
  code_refs=self.code_refs,
274
+ builder=app.builder.name,
271
275
  warn_no_backreference=self.warn_no_backreference,
272
276
  )
273
277
  doctree.walk(visitor)
@@ -289,12 +293,15 @@ class SphinxCodeAutoLink:
289
293
  self.inventory,
290
294
  self.custom_blocks,
291
295
  self.search_css_classes,
296
+ builder_name=app.builder.name,
292
297
  )
293
298
 
294
299
  self.cache.write()
295
300
 
296
301
 
297
- def transpose_inventory(inv: dict, relative_to: str) -> dict[str, str]:
302
+ def transpose_inventory(
303
+ inv: dict, relative_to: str, *, use_tuple: bool = False
304
+ ) -> dict[str, str]:
298
305
  """
299
306
  Transpose Sphinx inventory from {type: {name: (..., location)}} to {name: location}.
300
307
 
@@ -306,13 +313,18 @@ def transpose_inventory(inv: dict, relative_to: str) -> dict[str, str]:
306
313
  Sphinx inventory
307
314
  relative_to
308
315
  if a local file is found, transform it to be relative to this dir
316
+ use_tuple
317
+ force using Sphinx inventory tuple interface,
318
+ TODO: move to class interface if it becomes public (#173)
309
319
  """
310
320
  transposed = {}
311
321
  for type_, items in inv.items():
312
322
  if not type_.startswith("py:"):
313
323
  continue
314
324
  for item, info in items.items():
315
- location = info[2]
325
+ location = (
326
+ info.uri if not use_tuple and sphinx_version >= (8, 2) else info[2]
327
+ )
316
328
  if not location.startswith("http"):
317
329
  location = str(Path(location).relative_to(relative_to))
318
330
  transposed[item] = location
@@ -1,6 +1,7 @@
1
1
  """Backreference tables implementation."""
2
2
 
3
3
  from dataclasses import dataclass
4
+ from pathlib import Path
4
5
 
5
6
  from docutils import nodes
6
7
 
@@ -62,11 +63,13 @@ class CodeRefsVisitor(nodes.SparseNodeVisitor):
62
63
  self,
63
64
  *args,
64
65
  code_refs: dict[str, list[CodeExample]],
66
+ builder: str,
65
67
  warn_no_backreference: bool = False,
66
68
  **kwargs,
67
69
  ) -> None:
68
70
  super().__init__(*args, **kwargs)
69
71
  self.code_refs = code_refs
72
+ self.builder = builder
70
73
  self.warn_no_backreference = warn_no_backreference
71
74
 
72
75
  def unknown_departure(self, node) -> None:
@@ -79,7 +82,10 @@ class CodeRefsVisitor(nodes.SparseNodeVisitor):
79
82
 
80
83
  items = []
81
84
  for ref in self.code_refs.get(node.ref, []):
82
- link = ref.document + ".html"
85
+ if self.builder == "dirhtml" and Path(ref.document).name != "index":
86
+ link = ref.document + "/index.html"
87
+ else:
88
+ link = ref.document + ".html"
83
89
  if ref.ref_id is not None:
84
90
  link += f"#{ref.ref_id}"
85
91
  items.append((link, " / ".join(ref.headings)))
@@ -125,6 +125,7 @@ class CodeBlockAnalyser(nodes.SparseNodeVisitor):
125
125
  self.global_preface = global_preface
126
126
  self.file_preface = []
127
127
  self.prefaces = []
128
+ self.doctest_preface: dict[str, list[str]] = {}
128
129
  self.transformers = BUILTIN_BLOCKS.copy()
129
130
  self.transformers.update(custom_blocks)
130
131
  self.valid_blocks = self.transformers.keys()
@@ -198,10 +199,21 @@ class CodeBlockAnalyser(nodes.SparseNodeVisitor):
198
199
  """Pop latest title."""
199
200
  self.title_stack.pop()
200
201
 
201
- def visit_doctest_block(self, node):
202
+ def visit_doctest_block(self, node: nodes.doctest_block):
202
203
  """Visit a Python doctest block."""
203
204
  return self.parse_source(node, "pycon")
204
205
 
206
+ def visit_comment(self, node: nodes.comment):
207
+ """Visit an ext.doctest setup block."""
208
+ if node.get("testnodetype") == "testsetup":
209
+ groups = node["groups"]
210
+ lines = [ln for c in node.children for ln in c.astext().split("\n")]
211
+ for g in groups:
212
+ if g == "*":
213
+ self.doctest_preface = {"*": lines}
214
+ else:
215
+ self.doctest_preface[g] = lines
216
+
205
217
  def visit_literal_block(self, node: nodes.literal_block):
206
218
  """Visit a generic literal block."""
207
219
  return self.parse_source(node, node.get("language", self.highlight_lang))
@@ -213,6 +225,15 @@ class CodeBlockAnalyser(nodes.SparseNodeVisitor):
213
225
  prefaces = self.prefaces
214
226
  self.prefaces = []
215
227
 
228
+ if node.get("testnodetype") == "doctest":
229
+ groups = node["groups"]
230
+ doctest_prefaces = [
231
+ ln
232
+ for g in groups
233
+ for ln in self.doctest_preface.get(g, self.doctest_preface.get("*", []))
234
+ ]
235
+ prefaces = doctest_prefaces + prefaces
236
+
216
237
  skip = self.skip
217
238
  if skip == "next":
218
239
  self.skip = None
@@ -354,9 +375,14 @@ def link_html(
354
375
  inventory: dict,
355
376
  custom_blocks: dict,
356
377
  search_css_classes: list,
378
+ builder_name: str = "html",
357
379
  ) -> None:
358
380
  """Inject links to code blocks on disk."""
359
- html_file = Path(out_dir) / (document + ".html")
381
+ if builder_name == "dirhtml" and Path(document).name != "index":
382
+ html_file = Path(out_dir) / document / "index.html"
383
+ else:
384
+ html_file = Path(out_dir) / (document + ".html")
385
+
360
386
  text = html_file.read_text("utf-8")
361
387
  soup = BeautifulSoup(text, "html.parser")
362
388
 
@@ -0,0 +1,25 @@
1
+ # French translations for sphinx-codeautolink.
2
+ # Copyright (C) 2025 ORGANIZATION
3
+ # This file is distributed under the same license as the sphinx-codeautolink project.
4
+ # Colin Marquardt <cmarqu42@gmail.com>, 2025.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: 1\n"
9
+ "Report-Msgid-Bugs-To: cmarqu42@gmail.com\n"
10
+ "POT-Creation-Date: 2025-02-23 17:30+0200\n"
11
+ "PO-Revision-Date: 2025-02-25 22:23+0100\n"
12
+ "Last-Translator: Colin Marquardt <cmarqu42@gmail.com>\n"
13
+ "Language: fr\n"
14
+ "Language-Team: Colin Marquardt <cmarqu42@gmail.com>\n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=utf-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+ "Generated-By: Babel 2.17.0\n"
20
+
21
+ msgid "References to"
22
+ msgstr "Références à"
23
+
24
+ msgid "Expand for references to"
25
+ msgstr "Étendre pour les références à"
@@ -0,0 +1,27 @@
1
+ # Dutch (Netherlands) translations for sphinx-codeautolink.
2
+ # Copyright (C) 2025 ORGANIZATION
3
+ # This file is distributed under the same license as the sphinx-codeautolink
4
+ # project.
5
+ # Trevor James Smith <smith.trevorj@ouranos.ca>, 2025.
6
+ #
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: 1\n"
10
+ "Report-Msgid-Bugs-To: smith.trevorj@ouranos.ca\n"
11
+ "POT-Creation-Date: 2025-02-23 17:30+0200\n"
12
+ "PO-Revision-Date: 2025-02-26 09:04-0500\n"
13
+ "Last-Translator: Trevor James Smith <smith.trevorj@ouranos.ca>\n"
14
+ "Language: nl\n"
15
+ "Language-Team: Trevor James Smith <smith.trevorj@ouranos.ca>\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "MIME-Version: 1.0\n"
18
+ "Content-Type: text/plain; charset=utf-8\n"
19
+ "Content-Transfer-Encoding: 8bit\n"
20
+ "Generated-By: Babel 2.17.0\n"
21
+
22
+ msgid "References to"
23
+ msgstr "Referenties naar"
24
+
25
+ msgid "Expand for references to"
26
+ msgstr "Uitklappen voor referenties naar"
27
+
@@ -0,0 +1,25 @@
1
+ # Russian translations for sphinx-codeautolink.
2
+ # Copyright (C) 2025 ORGANIZATION
3
+ # This file is distributed under the same license as the sphinx-codeautolink project.
4
+ # Yuriy Skalko <yuriy.skalko@gmail.com>, 2025.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: 1\n"
9
+ "Report-Msgid-Bugs-To: yuriy.skalko@gmail.com\n"
10
+ "POT-Creation-Date: 2025-02-24 17:30+0200\n"
11
+ "PO-Revision-Date: 2025-02-24 18:42+0100\n"
12
+ "Last-Translator: Yuriy Skalko <yuriy.skalko@gmail.com>\n"
13
+ "Language: ru\n"
14
+ "Language-Team: Yuriy Skalko <yuriy.skalko@gmail.com>\n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=utf-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+ "Generated-By: Babel 2.17.0\n"
20
+
21
+ msgid "References to"
22
+ msgstr "Ссылки на"
23
+
24
+ msgid "Expand for references to"
25
+ msgstr "Раскрыть ссылки на"
@@ -0,0 +1,25 @@
1
+ # Ukrainian translations for sphinx-codeautolink.
2
+ # Copyright (C) 2025 ORGANIZATION
3
+ # This file is distributed under the same license as the sphinx-codeautolink project.
4
+ # Yuriy Skalko <yuriy.skalko@gmail.com>, 2025.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: 1\n"
9
+ "Report-Msgid-Bugs-To: yuriy.skalko@gmail.com\n"
10
+ "POT-Creation-Date: 2025-02-24 17:30+0200\n"
11
+ "PO-Revision-Date: 2025-02-24 18:42+0100\n"
12
+ "Last-Translator: Yuriy Skalko <yuriy.skalko@gmail.com>\n"
13
+ "Language: uk\n"
14
+ "Language-Team: Yuriy Skalko <yuriy.skalko@gmail.com>\n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=utf-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+ "Generated-By: Babel 2.17.0\n"
20
+
21
+ msgid "References to"
22
+ msgstr "Посилання на"
23
+
24
+ msgid "Expand for references to"
25
+ msgstr "Розгорнути посилання на"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sphinx-codeautolink
3
- Version: 0.17.1
3
+ Version: 0.17.3
4
4
  Summary: Automatic links from code examples to reference documentation.
5
5
  Author-email: Felix Hildén <felix.hilden@gmail.com>
6
6
  Maintainer-email: Felix Hildén <felix.hilden@gmail.com>
@@ -42,8 +42,14 @@ src/sphinx_codeautolink/locale/es/LC_MESSAGES/sphinx-codeautolink.mo
42
42
  src/sphinx_codeautolink/locale/es/LC_MESSAGES/sphinx-codeautolink.po
43
43
  src/sphinx_codeautolink/locale/fi/LC_MESSAGES/sphinx-codeautolink.mo
44
44
  src/sphinx_codeautolink/locale/fi/LC_MESSAGES/sphinx-codeautolink.po
45
+ src/sphinx_codeautolink/locale/fr/LC_MESSAGES/sphinx-codeautolink.mo
46
+ src/sphinx_codeautolink/locale/fr/LC_MESSAGES/sphinx-codeautolink.po
45
47
  src/sphinx_codeautolink/locale/it/LC_MESSAGES/sphinx-codeautolink.mo
46
48
  src/sphinx_codeautolink/locale/it/LC_MESSAGES/sphinx-codeautolink.po
49
+ src/sphinx_codeautolink/locale/nl/LC_MESSAGES/sphinx-codeautolink.mo
50
+ src/sphinx_codeautolink/locale/nl/LC_MESSAGES/sphinx-codeautolink.po
51
+ src/sphinx_codeautolink/locale/ru/LC_MESSAGES/sphinx-codeautolink.po
52
+ src/sphinx_codeautolink/locale/uk/LC_MESSAGES/sphinx-codeautolink.po
47
53
  src/sphinx_codeautolink/static/sphinx-codeautolink.css
48
54
  tests/__init__.py
49
55
  tests/extension/__init__.py
@@ -83,6 +89,8 @@ tests/extension/ref/lexer_default_fail.txt
83
89
  tests/extension/ref/lexer_doctest.txt
84
90
  tests/extension/ref/lexer_doctest_empty_input.txt
85
91
  tests/extension/ref/lexer_extdoctest_doctest.txt
92
+ tests/extension/ref/lexer_extdoctest_setup.txt
93
+ tests/extension/ref/lexer_extdoctest_setup_wrong.txt
86
94
  tests/extension/ref/lexer_extdoctest_testcode.txt
87
95
  tests/extension/ref/lexer_highlight_language.txt
88
96
  tests/extension/ref/lexer_highlight_none.txt
@@ -278,6 +278,7 @@ Test project
278
278
 
279
279
  for file in subfiles:
280
280
  assert_links(result_dir / (file + ".html"), links)
281
+
281
282
  assert check_link_targets(result_dir) == n_subfiles * len(links)
282
283
 
283
284
 
@@ -312,6 +313,60 @@ Test project
312
313
  assert "sphinx-codeautolink-a" in str(blocks[1])
313
314
 
314
315
 
316
+ def test_dirhtml_builder(tmp_path: Path):
317
+ index = """
318
+ Test project
319
+ ============
320
+
321
+ .. toctree::
322
+ :maxdepth: 2
323
+
324
+ page1/index
325
+ page2
326
+ subdir/page3
327
+
328
+ Index Page Code
329
+ ---------------
330
+
331
+ .. code:: python
332
+
333
+ import test_project
334
+ test_project.bar()
335
+
336
+ .. automodule:: test_project
337
+ """
338
+
339
+ page = """
340
+ Page {idx}
341
+ ===========
342
+
343
+ .. code:: python
344
+
345
+ import test_project
346
+ test_project.bar()
347
+
348
+ .. autolink-examples:: test_project.bar
349
+ """
350
+
351
+ files = {
352
+ "conf.py": default_conf,
353
+ "index.rst": index,
354
+ "page1/index.rst": page.format(idx=1),
355
+ "page2.rst": page.format(idx=2),
356
+ "subdir/page3.rst": page.format(idx=3),
357
+ }
358
+ links = ["test_project", "test_project.bar"]
359
+
360
+ result_dir = _sphinx_build(tmp_path, "dirhtml", files)
361
+
362
+ assert_links(result_dir / "index.html", links)
363
+ assert_links(result_dir / "page1/index.html", links)
364
+ assert_links(result_dir / "page2/index.html", links)
365
+ assert_links(result_dir / "subdir/page3/index.html", links)
366
+
367
+ assert check_link_targets(result_dir) == len(links) * 4
368
+
369
+
315
370
  def _sphinx_build(
316
371
  folder: Path, builder: str, files: dict[str, str], n_processes: int | None = None
317
372
  ) -> Path:
@@ -319,7 +374,9 @@ def _sphinx_build(
319
374
  src_dir = folder / "src"
320
375
  src_dir.mkdir(exist_ok=True)
321
376
  for name, content in files.items():
322
- (src_dir / name).write_text(content, "utf-8")
377
+ path = src_dir / name
378
+ path.parent.mkdir(exist_ok=True, parents=True)
379
+ path.write_text(content, "utf-8")
323
380
 
324
381
  build_dir = folder / "build"
325
382
  args = ["-M", builder, str(src_dir), str(build_dir), "-W"]
@@ -12,7 +12,7 @@ external_site_ids = {}
12
12
  def check_link_targets(root: Path) -> int:
13
13
  """Validate links in HTML site at root, return number of links found."""
14
14
  site_docs = {
15
- p.relative_to(root): BeautifulSoup(p.read_text("utf-8"), "html.parser")
15
+ p: BeautifulSoup(p.read_text("utf-8"), "html.parser")
16
16
  for p in root.glob("**/*.html")
17
17
  }
18
18
  site_ids = {k: gather_ids(v) for k, v in site_docs.items()}
@@ -27,10 +27,18 @@ def check_link_targets(root: Path) -> int:
27
27
  external_site_ids[base] = gather_ids(sub_soup)
28
28
  ids = external_site_ids[base]
29
29
  else:
30
- ids = site_ids[Path(base)]
30
+ target_path = (doc.parent / base).resolve()
31
+ if target_path.is_dir():
32
+ target_path /= "index.html"
33
+ assert target_path.exists(), (
34
+ f"Target path {target_path!s} not found while validating"
35
+ f" link for `{link.string}` in {doc.relative_to(root)!s}!"
36
+ )
37
+ ids = site_ids[target_path]
38
+
31
39
  assert id_ in ids, (
32
- f"ID {id_} not found in {base}"
33
- f" while validating link for `{link.string}` in {doc!s}!"
40
+ f"ID {id_} not found in {base} while validating link"
41
+ f" for `{link.string}` in {doc.relative_to(root)!s}!"
34
42
  )
35
43
  total += 1
36
44
  return total
@@ -4,10 +4,7 @@ attr
4
4
  test_project.Foo
5
5
  test_project.Foo
6
6
  # split
7
- from sphinx_codeautolink.extension.block import clean_pycon
8
7
  extensions.append("sphinx.ext.doctest")
9
- codeautolink_custom_blocks = {"pycon3": clean_pycon}
10
- suppress_warnings = ["config.cache"]
11
8
  # split
12
9
  Test project
13
10
  ============
@@ -0,0 +1,35 @@
1
+ test_project.bar
2
+ tp.bar
3
+ test.Foo
4
+ # split
5
+ extensions.append("sphinx.ext.doctest")
6
+ # split
7
+ Test project
8
+ ============
9
+
10
+ .. testsetup::
11
+
12
+ import test_project
13
+
14
+ .. doctest::
15
+
16
+ >>> test_project.bar()
17
+
18
+ .. testsetup:: *
19
+
20
+ .. doctest::
21
+
22
+ >>> test_project.Foo()
23
+
24
+ .. testsetup:: thisgroup
25
+
26
+ import test_project as tp
27
+
28
+ import test_project as test
29
+
30
+ .. doctest:: thisgroup
31
+
32
+ >>> tp.bar()
33
+ >>> test.Foo()
34
+
35
+ .. automodule:: test_project
@@ -0,0 +1,15 @@
1
+ # split
2
+ extensions.append("sphinx.ext.doctest")
3
+ # split
4
+ Test project
5
+ ============
6
+
7
+ .. testsetup:: specificgroup
8
+
9
+ import test_project
10
+
11
+ .. doctest::
12
+
13
+ >>> test_project.bar()
14
+
15
+ .. automodule:: test_project
@@ -5,7 +5,6 @@ test_project.Foo
5
5
  test_project.Foo
6
6
  # split
7
7
  extensions.append("sphinx.ext.doctest")
8
- codeautolink_custom_blocks = {"python3": None}
9
8
  # split
10
9
  Test project
11
10
  ============
@@ -35,7 +35,7 @@ commands = coverage run
35
35
  [testenv:doc8]
36
36
  description = Check documentation .rst files
37
37
  allowlist_externals = doc8
38
- commands = doc8 docs/src
38
+ commands = doc8 docs/src --quiet
39
39
 
40
40
  [testenv:docs]
41
41
  description = Build Sphinx documentation
@@ -62,7 +62,7 @@ description = Build and check package
62
62
  deps = -r requirements/build
63
63
  allowlist_externals = rm, cmd
64
64
  commands =
65
- python -m build
65
+ python -m build -C--quiet
66
66
  twine check --strict dist/*
67
67
  commands_post =
68
68
  lin,mac: rm -r dist
@@ -76,7 +76,7 @@ commands_pre =
76
76
  lin,mac: rm -rf dist
77
77
  win: cmd /c if exist dist rmdir /s /q dist
78
78
  commands =
79
- python -m build
79
+ python -m build -C--quiet
80
80
  twine check --strict dist/*
81
81
  twine upload dist/* --config-file .pypirc
82
82
  commands_post =