sphinx-lua-ls 3.7.0__tar.gz → 3.8.0__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 (194) hide show
  1. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/.cl-keeper.yaml +1 -1
  2. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/.github/workflows/ci.yaml +6 -4
  3. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/CHANGELOG.md +15 -5
  4. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/CONTRIBUTING.md +4 -0
  5. {sphinx_lua_ls-3.7.0/sphinx_lua_ls.egg-info → sphinx_lua_ls-3.8.0}/PKG-INFO +2 -2
  6. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/conf.py +3 -0
  7. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/example/.emmyrc.json +1 -6
  8. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/settings.rst +13 -2
  9. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/pyproject.toml +3 -3
  10. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/__init__.py +3 -0
  11. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/_version.py +3 -3
  12. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/config.py +16 -3
  13. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/domain.py +2 -2
  14. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/lua_ls.py +87 -27
  15. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0/sphinx_lua_ls.egg-info}/PKG-INFO +2 -2
  16. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls.egg-info/SOURCES.txt +1 -0
  17. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls.egg-info/requires.txt +1 -1
  18. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-annotations.html +8 -8
  19. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-annotations.html +8 -8
  20. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-doctype.html +2 -2
  21. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-global_tables.html +2 -2
  22. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-globals.html +4 -4
  23. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-incongruent_export.html +4 -4
  24. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-member_ordering.html +8 -8
  25. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-nested_modules.html +2 -2
  26. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-nesting.html +12 -12
  27. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-nesting_recursive.html +36 -36
  28. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-object_types.html +16 -16
  29. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-relative_resolve.html +2 -2
  30. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-signatures.html +46 -46
  31. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-using.html +2 -2
  32. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-globals.html +4 -4
  33. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-member_ordering.html +8 -8
  34. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-nested_modules.html +2 -2
  35. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-nesting.html +12 -12
  36. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-nesting_recursive.html +36 -36
  37. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-object_types.html +16 -16
  38. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-relative_resolve.html +2 -2
  39. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-settings-no-recursion.html +2 -2
  40. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-settings-simple.html +4 -4
  41. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/doc-annotations.html +4 -4
  42. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/doc-directives.html +48 -48
  43. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/doc-inherited.html +2 -2
  44. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/doc-refs.html +4 -4
  45. sphinx_lua_ls-3.8.0/test/test_versions.py +42 -0
  46. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/.github/dependabot.yml +0 -0
  47. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/.gitignore +0 -0
  48. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/.pre-commit-config.yaml +0 -0
  49. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/.readthedocs.yaml +0 -0
  50. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/LICENSE +0 -0
  51. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/README.md +0 -0
  52. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/conftest.py +0 -0
  53. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/Makefile +0 -0
  54. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/make.bat +0 -0
  55. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/_extra/robots.txt +0 -0
  56. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/apidoc.rst +0 -0
  57. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/autodoc.rst +0 -0
  58. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/directives.rst +0 -0
  59. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/example/logging.lua +0 -0
  60. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/example.rst +0 -0
  61. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/index.rst +0 -0
  62. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/installation.rst +0 -0
  63. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/quickstart.rst +0 -0
  64. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/docs/source/roles.rst +0 -0
  65. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/setup.cfg +0 -0
  66. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/apidoc.py +0 -0
  67. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/autodoc.py +0 -0
  68. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/autoindex.py +0 -0
  69. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/inherited.py +0 -0
  70. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/intersphinx.py +0 -0
  71. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/objtree.py +0 -0
  72. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/py.typed +0 -0
  73. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/pygments.py +0 -0
  74. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/static/lua.css +0 -0
  75. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls/utils.py +0 -0
  76. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls.egg-info/dependency_links.txt +0 -0
  77. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/sphinx_lua_ls.egg-info/top_level.txt +0 -0
  78. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/conftest.py +0 -0
  79. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-apidoc/.gitignore +0 -0
  80. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-apidoc/Makefile +0 -0
  81. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-apidoc/conf.py +0 -0
  82. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-apidoc/index.rst +0 -0
  83. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-apidoc/lua/mod/inner.lua +0 -0
  84. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-apidoc/lua/mod.lua +0 -0
  85. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-apidoc/make.bat +0 -0
  86. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/Makefile +0 -0
  87. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/conf.py +0 -0
  88. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/index.rst +0 -0
  89. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/lua/annotations.lua +0 -0
  90. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/lua/globals.lua +0 -0
  91. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/lua/globals_2.lua +0 -0
  92. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/lua/member_ordering.lua +0 -0
  93. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/lua/module_title.lua +0 -0
  94. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/lua/nested_modules.lua +0 -0
  95. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/lua/nesting.lua +0 -0
  96. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/lua/object_types.lua +0 -0
  97. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/lua/relative_resolve.lua +0 -0
  98. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/make.bat +0 -0
  99. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/annotations.rst +0 -0
  100. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/autoindex.rst +0 -0
  101. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/globals.rst +0 -0
  102. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/member_ordering.rst +0 -0
  103. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/module_title.rst +0 -0
  104. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/nested_modules.rst +0 -0
  105. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/nesting.rst +0 -0
  106. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/nesting_recursive.rst +0 -0
  107. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/object_types.rst +0 -0
  108. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc/src/relative_resolve.rst +0 -0
  109. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/Makefile +0 -0
  110. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/conf.py +0 -0
  111. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/index.rst +0 -0
  112. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/.emmyrc.json +0 -0
  113. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/annotations.lua +0 -0
  114. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/doctype.lua +0 -0
  115. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/foo/x.lua +0 -0
  116. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/global_tables.lua +0 -0
  117. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/globals.lua +0 -0
  118. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/globals_2.lua +0 -0
  119. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/incongruent_export.lua +0 -0
  120. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/member_ordering.lua +0 -0
  121. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/module_function.lua +0 -0
  122. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/module_title.lua +0 -0
  123. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/nested_modules.lua +0 -0
  124. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/nesting.lua +0 -0
  125. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/object_types.lua +0 -0
  126. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/relative_resolve.lua +0 -0
  127. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/signatures.lua +0 -0
  128. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/lua/using.lua +0 -0
  129. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/make.bat +0 -0
  130. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/annotations.rst +0 -0
  131. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/autoindex.rst +0 -0
  132. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/doctype.rst +0 -0
  133. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/global_tables.rst +0 -0
  134. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/globals.rst +0 -0
  135. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/incongruent_export.rst +0 -0
  136. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/member_ordering.rst +0 -0
  137. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/module_function.rst +0 -0
  138. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/module_title.rst +0 -0
  139. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/nested_modules.rst +0 -0
  140. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/nesting.rst +0 -0
  141. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/nesting_recursive.rst +0 -0
  142. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/object_types.rst +0 -0
  143. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/relative_resolve.rst +0 -0
  144. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/require.rst +0 -0
  145. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/signatures.rst +0 -0
  146. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-emmylua/src/using.rst +0 -0
  147. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-roots/Makefile +0 -0
  148. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-roots/conf.py +0 -0
  149. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-roots/index.rst +0 -0
  150. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-roots/lua/root_1/autodoc.lua +0 -0
  151. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-roots/lua/root_2/autodoc.lua +0 -0
  152. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-roots/make.bat +0 -0
  153. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings/Makefile +0 -0
  154. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings/conf.py +0 -0
  155. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings/index.rst +0 -0
  156. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings/lua/autodoc.lua +0 -0
  157. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings/make.bat +0 -0
  158. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings-override/Makefile +0 -0
  159. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings-override/conf.py +0 -0
  160. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings-override/index.rst +0 -0
  161. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings-override/lua/autodoc.lua +0 -0
  162. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-autodoc-settings-override/make.bat +0 -0
  163. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/Makefile +0 -0
  164. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/conf.py +0 -0
  165. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/index.rst +0 -0
  166. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/make.bat +0 -0
  167. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/src/annotations.rst +0 -0
  168. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/src/autoindex.rst +0 -0
  169. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/src/directives.rst +0 -0
  170. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/src/inherited.rst +0 -0
  171. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/src/modules.rst +0 -0
  172. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-doc/src/refs.rst +0 -0
  173. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-intersphinx/Makefile +0 -0
  174. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-intersphinx/conf.py +0 -0
  175. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-intersphinx/index.rst +0 -0
  176. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/roots/test-intersphinx/make.bat +0 -0
  177. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_parse.py +0 -0
  178. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/apidoc-md-sep.yml +0 -0
  179. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/apidoc-md.yml +0 -0
  180. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/apidoc-rst-sep.yml +0 -0
  181. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/apidoc-rst.yml +0 -0
  182. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-autoindex.html +0 -0
  183. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-autoindex.html +0 -0
  184. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-index.html +0 -0
  185. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-module_function.html +0 -0
  186. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-module_title.html +0 -0
  187. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-emmylua-require.html +0 -0
  188. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-module_title.html +0 -0
  189. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-roots-default.html +0 -0
  190. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-roots-no-roots.html +0 -0
  191. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/autodoc-roots-single-root.html +0 -0
  192. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/doc-autoindex.html +0 -0
  193. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression/doc-modules.html +0 -0
  194. {sphinx_lua_ls-3.7.0 → sphinx_lua_ls-3.8.0}/test/test_regression.py +0 -0
@@ -1,5 +1,5 @@
1
1
  # yaml-language-server: $schema=https://cl-keeper.readthedocs.io/en/latest/schema.json
2
- version_format: python
2
+ version_format: python-semver
3
3
  ignore_missing_releases_before: "1.0.0"
4
4
  extra_change_categories_map:
5
5
  '(?i)migrating': "migrating"
@@ -26,11 +26,11 @@ jobs:
26
26
  - name: Install dependencies
27
27
  run: python -m pip install '.'
28
28
  - name: Download LuaLs for Linux
29
- run: python sphinx_lua_ls/lua_ls.py linux x86_64 --runtime luals ~/lua_ls_release/ubuntu-latest
29
+ run: python sphinx_lua_ls/lua_ls.py linux x86_64 --runtime luals --skip 3.16.0 ~/lua_ls_release/ubuntu-latest
30
30
  - name: Download LuaLs for Windows
31
- run: python sphinx_lua_ls/lua_ls.py win32 amd64 --runtime luals ~/lua_ls_release/windows-latest
31
+ run: python sphinx_lua_ls/lua_ls.py win32 amd64 --runtime luals --skip 3.16.0 ~/lua_ls_release/windows-latest
32
32
  - name: Download LuaLs for MacOs
33
- run: python sphinx_lua_ls/lua_ls.py darwin arm --runtime luals ~/lua_ls_release/macos-latest
33
+ run: python sphinx_lua_ls/lua_ls.py darwin arm --runtime luals --skip 3.16.0 ~/lua_ls_release/macos-latest
34
34
  - name: Download EmmyLua for Linux
35
35
  run: python sphinx_lua_ls/lua_ls.py linux x86_64 --runtime emmylua ~/lua_ls_release/ubuntu-latest
36
36
  - name: Download EmmyLua for Windows
@@ -79,7 +79,9 @@ jobs:
79
79
  # Tests
80
80
  - name: Install test dependencies
81
81
  if: ${{ matrix.type == 'test' }}
82
- run: python -m pip install . --group test
82
+ run: |
83
+ python -m pip install . --group test
84
+ python -m pip install -U sphinx
83
85
  - name: Download LuaLs
84
86
  if: ${{ matrix.type == 'test' }}
85
87
  uses: actions/download-artifact@v4
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [3.8.0] - 2025-12-03
6
+
7
+ - Added support Sphinx 9.
8
+
9
+ - Added `lua_ls_skip_versions` config option to selectively avoid certain language server
10
+ releases.
11
+
12
+ ## [3.7.0-post1] - 2025-11-14
13
+
14
+ - Minor documentation tweaks.
15
+
5
16
  ## [3.7.0] - 2025-11-14
6
17
 
7
18
  - Fixed parsing of `@see` annotations with LuaLs backend.
@@ -201,8 +212,6 @@ Make sure that you only use `!doctype module` on the top-level tables that can b
201
212
  via `require`. On other objects, use `!doctype table` instead, otherwise you'll get errors
202
213
  that modules are not allowed within other objects.
203
214
 
204
- ## [2.0.0b0] - 2025-03-16
205
-
206
215
  ## [1.1.0] - 2025-03-11
207
216
 
208
217
  - Added support for `!doc` and `!doctype` comments.
@@ -243,8 +252,7 @@ Initial release.
243
252
  [0.0.4]: https://github.com/sphinx-contrib/lua-ls/compare/v0.0.3...v0.0.4
244
253
  [1.0.0]: https://github.com/sphinx-contrib/lua-ls/compare/v0.0.4...v1.0.0
245
254
  [1.1.0]: https://github.com/sphinx-contrib/lua-ls/compare/v1.0.0...v1.1.0
246
- [2.0.0]: https://github.com/sphinx-contrib/lua-ls/compare/v2.0.0b0...v2.0.0
247
- [2.0.0b0]: https://github.com/sphinx-contrib/lua-ls/compare/v1.1.0...v2.0.0b0
255
+ [2.0.0]: https://github.com/sphinx-contrib/lua-ls/compare/v1.1.0...v2.0.0
248
256
  [2.0.1]: https://github.com/sphinx-contrib/lua-ls/compare/v2.0.0...v2.0.1
249
257
  [3.0.0]: https://github.com/sphinx-contrib/lua-ls/compare/v2.0.1...v3.0.0
250
258
  [3.1.0]: https://github.com/sphinx-contrib/lua-ls/compare/v3.0.0...v3.1.0
@@ -255,6 +263,8 @@ Initial release.
255
263
  [3.5.0-post1]: https://github.com/sphinx-contrib/lua-ls/compare/v3.5.0...v3.5.0-post1
256
264
  [3.6.0]: https://github.com/sphinx-contrib/lua-ls/compare/v3.5.0-post1...v3.6.0
257
265
  [3.7.0]: https://github.com/sphinx-contrib/lua-ls/compare/v3.6.0...v3.7.0
266
+ [3.7.0-post1]: https://github.com/sphinx-contrib/lua-ls/compare/v3.7.0...v3.7.0-post1
267
+ [3.8.0]: https://github.com/sphinx-contrib/lua-ls/compare/v3.7.0-post1...v3.8.0
258
268
  [@bkoropoff]: https://github.com/bkoropoff
259
269
  [emmylua]: https://github.com/EmmyLuaLs/emmylua-analyzer-rust/
260
- [unreleased]: https://github.com/sphinx-contrib/lua-ls/compare/v3.7.0...HEAD
270
+ [unreleased]: https://github.com/sphinx-contrib/lua-ls/compare/v3.8.0...HEAD
@@ -10,8 +10,12 @@
10
10
 
11
11
  ```shell
12
12
  pip install -e . --group dev
13
+ pip install -U sphinx
13
14
  ```
14
15
 
16
+ > *Note:* our tests run with Sphinx 9, but some dependencies are not yet updated
17
+ > for it; that's why you have to update Sphinx after installing it.
18
+
15
19
  4. Install pre-commit hooks:
16
20
 
17
21
  ```shell
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sphinx-lua-ls
3
- Version: 3.7.0
3
+ Version: 3.8.0
4
4
  Summary: Automatic documentation generation via EmmyLua/LuaLs
5
5
  Author-email: Tamika Nomara <taminomara@gmail.com>
6
6
  License-Expression: MIT
@@ -24,7 +24,7 @@ Classifier: Typing :: Typed
24
24
  Requires-Python: >=3.12
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
- Requires-Dist: sphinx<9.0,>=8.0
27
+ Requires-Dist: sphinx<10.0,>=8.0
28
28
  Requires-Dist: PyGithub<3.0,>=1.59
29
29
  Requires-Dist: requests~=2.31
30
30
  Dynamic: license-file
@@ -26,6 +26,9 @@ default_role = "lua:obj"
26
26
 
27
27
  lua_ls_project_root = "example"
28
28
  lua_ls_backend = "emmylua"
29
+ lua_ls_class_default_function_name = "__init"
30
+ lua_ls_class_default_force_non_colon = True
31
+ lua_ls_class_default_force_return_self = True
29
32
 
30
33
  intersphinx_mapping = {
31
34
  "python": ("https://docs.python.org/3", None),
@@ -7,12 +7,7 @@
7
7
  "requireLikeFunction": [],
8
8
  "frameworkVersions": [],
9
9
  "extensions": [],
10
- "requirePattern": [],
11
- "classDefaultCall": {
12
- "functionName": "__init",
13
- "forceNonColon": true,
14
- "forceReturnSelf": true
15
- }
10
+ "requirePattern": []
16
11
  },
17
12
  "doc": {
18
13
  "knownTags": ["doctype", "doc"]
@@ -52,6 +52,17 @@ Settings
52
52
  For LuaLs, default value is ``4.0.0``, for EmmyLua it's ``2.0.0``.
53
53
  Use ``None`` to allow any version.
54
54
 
55
+ .. py:data:: lua_ls_skip_versions
56
+ :type: list[str] | None
57
+
58
+ List of lua analyzer versions that shouldn't be used.
59
+
60
+ For example, if ``lua_ls_skip_versions = ["3.16"]``, language server release
61
+ ``3.16`` (including all ``3.16.x`` releases) will not be used.
62
+
63
+ This setting can be used to avoid broken releases without limiting max version
64
+ of the lua analyzer.
65
+
55
66
  .. py:data:: lua_ls_default_options
56
67
  :type: dict[str, str]
57
68
 
@@ -99,12 +110,12 @@ Settings
99
110
  and :rst:dir:`lua:autoobject:class-signature` options.
100
111
 
101
112
  .. py:data:: lua_ls_class_default_force_non_colon
102
- :type:
113
+ :type: bool
103
114
 
104
115
  If ``True``, Sphinx-LuaLs will remove ``self`` from class constructor's signature.
105
116
 
106
117
  .. py:data:: lua_ls_class_default_force_return_self
107
- :type:
118
+ :type: bool
108
119
 
109
120
  If ``True``, Sphinx-LuaLs will replace class constructor's return type with ``self``.
110
121
 
@@ -22,7 +22,7 @@ classifiers = [
22
22
  "Typing :: Typed",
23
23
  ]
24
24
  dependencies = [
25
- "sphinx>=8.0,<9.0",
25
+ "sphinx>=8.0,<10.0",
26
26
  "PyGithub>=1.59,<3.0",
27
27
  "requests~=2.31",
28
28
  ]
@@ -37,14 +37,14 @@ dev = [
37
37
  lint = [
38
38
  "black==25.11.0",
39
39
  "isort==7.0.0",
40
- "pre-commit==4.4.0",
40
+ "pre-commit==4.5.0",
41
41
  ]
42
42
  test = [
43
43
  "pyright==1.1.407",
44
44
  "pytest==9.0.1",
45
45
  "sybil==9.2.0",
46
46
  "pytest-regressions==2.8.3",
47
- "beautifulsoup4==4.14.2",
47
+ "beautifulsoup4==4.14.3",
48
48
  "myst-parser==4.0.1"
49
49
  ]
50
50
  doc = [
@@ -70,6 +70,7 @@ def run_lua_ls(app: sphinx.application.Sphinx):
70
70
  max_version = "4.0.0"
71
71
  else:
72
72
  max_version = "2.0.0"
73
+ skip_versions = domain.config.skip_versions
73
74
 
74
75
  cwd = pathlib.Path.cwd()
75
76
  try:
@@ -77,6 +78,7 @@ def run_lua_ls(app: sphinx.application.Sphinx):
77
78
  backend=domain.config.backend,
78
79
  min_version=min_version,
79
80
  max_version=max_version,
81
+ skip_versions=skip_versions or [],
80
82
  cwd=root_dir,
81
83
  reporter=sphinx_lua_ls.lua_ls.SphinxProgressReporter(app.verbosity),
82
84
  install=domain.config.auto_install,
@@ -195,6 +197,7 @@ def setup(app: sphinx.application.Sphinx):
195
197
  app.add_config_value("lua_ls_auto_install_location", None, rebuild="")
196
198
  app.add_config_value("lua_ls_min_version", None, rebuild="env")
197
199
  app.add_config_value("lua_ls_max_version", "__auto__", rebuild="env")
200
+ app.add_config_value("lua_ls_skip_versions", None, rebuild="env")
198
201
  app.add_config_value("lua_ls_lua_version", None, rebuild="html")
199
202
  app.add_config_value("lua_ls_default_options", None, rebuild="env")
200
203
  app.add_config_value("lua_ls_apidoc_roots", None, rebuild="")
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '3.7.0'
32
- __version_tuple__ = version_tuple = (3, 7, 0)
31
+ __version__ = version = '3.8.0'
32
+ __version_tuple__ = version_tuple = (3, 8, 0)
33
33
 
34
- __commit_id__ = commit_id = 'ge31f54a0d'
34
+ __commit_id__ = commit_id = 'g871de2611'
@@ -14,6 +14,7 @@ import sphinx_lua_ls.domain
14
14
  _logger = logging.getLogger("sphinx_lua_ls")
15
15
 
16
16
  T = _t.TypeVar("T")
17
+ A = _t.ParamSpec("A")
17
18
 
18
19
 
19
20
  @dataclass
@@ -25,6 +26,7 @@ class LuaDomainConfig:
25
26
  auto_install_location: pathlib.Path | None = None
26
27
  min_version: str | None = None
27
28
  max_version: str | None = None
29
+ skip_versions: list[str] | None = None
28
30
  lua_version: str | None = None
29
31
  default_options: dict[str, _t.Any] = dataclasses.field(default_factory=dict)
30
32
  apidoc_default_options: dict[str, _t.Any] = dataclasses.field(default_factory=dict)
@@ -73,11 +75,17 @@ def _path(name: str, value, root: str | pathlib.Path) -> pathlib.Path:
73
75
  raise ConfigError(f"incorrect lua_ls_project_root: {e}") from None
74
76
 
75
77
 
76
- def _paths(name: str, value, root: str | pathlib.Path) -> list[pathlib.Path]:
78
+ def _list(
79
+ name: str,
80
+ value,
81
+ checker: _t.Callable[_t.Concatenate[str, object, A], T],
82
+ *args: A.args,
83
+ **kwargs: A.kwargs,
84
+ ) -> list[T]:
77
85
  if value is None:
78
86
  value = []
79
87
  _type(name, value, list)
80
- return [_path(f"{name}[{i}]", v, root) for i, v in enumerate(value)]
88
+ return [checker(f"{name}[{i}]", v, *args, **kwargs) for i, v in enumerate(value)]
81
89
 
82
90
 
83
91
  def _options(name: str, value) -> dict[str, _t.Any]:
@@ -193,9 +201,10 @@ def set_options(app: sphinx.application.Sphinx):
193
201
  )
194
202
 
195
203
  if config["lua_ls_project_directories"] is not None:
196
- domain_config.project_directories = _paths(
204
+ domain_config.project_directories = _list(
197
205
  "lua_ls_project_directories",
198
206
  config["lua_ls_project_directories"],
207
+ _path,
199
208
  domain_config.project_root,
200
209
  )
201
210
 
@@ -221,6 +230,10 @@ def set_options(app: sphinx.application.Sphinx):
221
230
  if config["lua_ls_max_version"] != "__auto__"
222
231
  else "__auto__"
223
232
  )
233
+ if config["lua_ls_skip_versions"] is not None:
234
+ domain_config.skip_versions = _list(
235
+ "lua_ls_skip_versions", config["lua_ls_skip_versions"], _version
236
+ )
224
237
 
225
238
  if config["lua_ls_lua_version"]:
226
239
  domain_config.lua_version = _str_choices(
@@ -1153,7 +1153,7 @@ class LuaDomain(Domain):
1153
1153
 
1154
1154
  name = "lua"
1155
1155
  label = "Lua"
1156
- object_types: dict[str, ObjType] = {
1156
+ object_types = {
1157
1157
  "function": ObjType(_("function"), "func", "obj", "lua", "_auto"),
1158
1158
  "data": ObjType(_("data"), "data", "obj", "lua", "_auto"),
1159
1159
  "const": ObjType(_("const"), "attr", "const", "obj", "lua", "_auto"),
@@ -1225,7 +1225,7 @@ class LuaDomain(Domain):
1225
1225
  base_lookup_classname: str | None = None
1226
1226
  base_lookup_using: list[str] | None = None
1227
1227
 
1228
- initial_data: dict[str, dict[str, tuple[Any]]] = {
1228
+ initial_data = {
1229
1229
  "objects": {}, # fullname -> ObjectEntry
1230
1230
  "globals": {}, # modname -> GlobalEntry
1231
1231
  "members": {}, # modname -> MemberEntry
@@ -309,6 +309,7 @@ def resolve(
309
309
  backend: _t.Literal["emmylua", "luals"],
310
310
  min_version: str,
311
311
  max_version: str | None,
312
+ skip_versions: list[str],
312
313
  cache_path: _PathLike | None = None,
313
314
  quiet: bool = True,
314
315
  env: dict[str, str] | None = None,
@@ -332,6 +333,8 @@ def resolve(
332
333
  minimal LuaLs version required.
333
334
  :param max_version:
334
335
  maximal LuaLs version required. Version is not limited is `None`.
336
+ :param skip_versions:
337
+ list of known broken versions.
335
338
  :param quiet:
336
339
  if true (default), any output from the LuaLs binary is hidden.
337
340
  :param env:
@@ -374,6 +377,7 @@ def resolve(
374
377
  backend,
375
378
  min_version,
376
379
  max_version,
380
+ skip_versions,
377
381
  cache_path,
378
382
  _get_path(env),
379
383
  install,
@@ -423,9 +427,15 @@ def _get_path(env: dict[str, str] | None) -> str:
423
427
 
424
428
 
425
429
  def _check_version(
426
- min_version: str, max_version: str | None, bin_path: _PathLike
430
+ min_version: str,
431
+ max_version: str | None,
432
+ skip_versions: list[str],
433
+ bin_path: _PathLike,
427
434
  ) -> _t.Tuple[bool, _t.Optional[str]]:
428
435
  min_version_tuple = tuple(int(c) for c in min_version.split("."))
436
+ skip_version_tuples = [
437
+ tuple(int(c) for c in version.split(".")) for version in skip_versions
438
+ ]
429
439
  if max_version:
430
440
  max_version_tuple = tuple(int(c) for c in max_version.split("."))
431
441
  if max_version_tuple <= min_version_tuple:
@@ -442,15 +452,19 @@ def _check_version(
442
452
  if match := re.search(r"(\d+\.\d+\.\d+)", system_version_text):
443
453
  system_version = match.group(1)
444
454
  system_version_tuple = tuple(int(c) for c in system_version.split("."))
445
- if min_version_tuple <= system_version_tuple < max_version_tuple:
455
+ if (
456
+ min_version_tuple <= system_version_tuple < max_version_tuple
457
+ and not _should_skip(system_version_tuple, skip_version_tuples)
458
+ ):
446
459
  return True, system_version
447
460
  else:
448
461
  _logger.debug(
449
- "%s is outdated (got %s, required %s..%s)",
462
+ "%s is outdated (got %s, required %s..%s, skip=%r)",
450
463
  bin_path,
451
464
  system_version,
452
465
  min_version,
453
466
  max_version,
467
+ skip_versions,
454
468
  type="lua-ls",
455
469
  )
456
470
  return False, system_version
@@ -474,6 +488,7 @@ def _check_and_install(
474
488
  backend: _t.Literal["emmylua", "luals"],
475
489
  min_version: str,
476
490
  max_version: str | None,
491
+ skip_versions: list[str],
477
492
  cache_path: pathlib.Path,
478
493
  path: str,
479
494
  install: bool,
@@ -485,6 +500,7 @@ def _check_and_install(
485
500
  min_version = min_version[1:]
486
501
  if max_version and max_version.startswith("v"):
487
502
  max_version = max_version[1:]
503
+ skip_versions = [version.removeprefix("v") for version in skip_versions]
488
504
 
489
505
  if backend == "emmylua":
490
506
  bin_name = "emmylua_doc_cli"
@@ -495,7 +511,7 @@ def _check_and_install(
495
511
  system_version = None
496
512
  if system_bin_path:
497
513
  can_use_system_lua_ls, system_version = _check_version(
498
- min_version, max_version, system_bin_path
514
+ min_version, max_version, skip_versions, system_bin_path
499
515
  )
500
516
  if can_use_system_lua_ls:
501
517
  _logger.debug(
@@ -526,6 +542,7 @@ def _check_and_install(
526
542
  return _install_emmylua(
527
543
  min_version,
528
544
  max_version,
545
+ skip_versions,
529
546
  cache_path,
530
547
  path,
531
548
  install,
@@ -541,6 +558,7 @@ def _check_and_install(
541
558
  return _install_lua_ls(
542
559
  min_version,
543
560
  max_version,
561
+ skip_versions,
544
562
  cache_path,
545
563
  path,
546
564
  install,
@@ -554,16 +572,22 @@ def _check_and_install(
554
572
  )
555
573
 
556
574
 
557
- def _make_version_message(min_version: str, max_version: str | None) -> str:
575
+ def _make_version_message(
576
+ min_version: str, max_version: str | None, skip_versions: list[str]
577
+ ) -> str:
558
578
  if max_version:
559
- return f"a version between {min_version} and {max_version}"
579
+ msg = f"a version between {min_version} and {max_version}"
560
580
  else:
561
- return f"version {min_version} or newer"
581
+ msg = f"version {min_version} or newer"
582
+ if skip_versions:
583
+ msg += ", and not " + ", ".join(skip_versions)
584
+ return msg
562
585
 
563
586
 
564
587
  def _install_lua_ls(
565
588
  min_version: str,
566
589
  max_version: str | None,
590
+ skip_versions: list[str],
567
591
  cache_path: pathlib.Path,
568
592
  path: str,
569
593
  install: bool,
@@ -589,7 +613,7 @@ def _install_lua_ls(
589
613
  release_name = release_names.get((platform, machine), None)
590
614
  if not install or not release_name:
591
615
  if system_bin_path:
592
- version = _make_version_message(min_version, max_version)
616
+ version = _make_version_message(min_version, max_version, skip_versions)
593
617
  raise LuaLsError(
594
618
  f"you have lua-language-server {system_version}, "
595
619
  f"but {version} is required; "
@@ -613,7 +637,9 @@ def _install_lua_ls(
613
637
  bin_path = cache_path / "bin/lua-language-server"
614
638
  if bin_path.exists():
615
639
  bin_path.chmod(bin_path.stat().st_mode | stat.S_IEXEC)
616
- can_use_cached_binary, _ = _check_version(min_version, max_version, bin_path)
640
+ can_use_cached_binary, _ = _check_version(
641
+ min_version, max_version, skip_versions, bin_path
642
+ )
617
643
  if can_use_cached_binary:
618
644
  _logger.debug("using cached lua-language-server", type="lua-ls")
619
645
  return bin_path, path
@@ -631,6 +657,7 @@ def _install_lua_ls(
631
657
  tmp_file = _download_release(
632
658
  min_version,
633
659
  max_version,
660
+ skip_versions,
634
661
  api,
635
662
  timeout,
636
663
  retry,
@@ -663,15 +690,20 @@ def _install_lua_ls(
663
690
 
664
691
  if verify:
665
692
  can_use_cached_lua_ls, cached_version = _check_version(
666
- min_version, max_version, bin_path
693
+ min_version, max_version, skip_versions, bin_path
667
694
  )
668
695
  if not can_use_cached_lua_ls:
669
- version = _make_version_message(min_version, max_version)
670
- raise LuaLsError(
671
- f"downloaded lua-language-server printed version {cached_version}, "
672
- f"but {version} is required; are you sure lua_ls_min_version "
673
- f"and lua_ls_max_version are correct?",
674
- )
696
+ if cached_version is not None:
697
+ version = _make_version_message(min_version, max_version, skip_versions)
698
+ raise LuaLsError(
699
+ f"downloaded lua-language-server printed version {cached_version}, "
700
+ f"but {version} is required; are you sure lua_ls_min_version "
701
+ f"and lua_ls_max_version are correct?",
702
+ )
703
+ else:
704
+ raise LuaLsError(
705
+ "downloaded lua-language-server failed to print its version"
706
+ )
675
707
  elif not bin_path.exists():
676
708
  raise LuaLsError(
677
709
  f"downloaded latest lua-language-server is broken: "
@@ -684,6 +716,7 @@ def _install_lua_ls(
684
716
  def _install_emmylua(
685
717
  min_version: str,
686
718
  max_version: str | None,
719
+ skip_versions: list[str],
687
720
  cache_path: pathlib.Path,
688
721
  path: str,
689
722
  install: bool,
@@ -707,7 +740,7 @@ def _install_emmylua(
707
740
  release_name = release_names.get((platform, machine), None)
708
741
  if not install or not release_name:
709
742
  if system_bin_path:
710
- version = _make_version_message(min_version, max_version)
743
+ version = _make_version_message(min_version, max_version, skip_versions)
711
744
  raise LuaLsError(
712
745
  f"you have emmylua_doc_cli {system_version}, but {version} is required; "
713
746
  f"see upgrade instructions "
@@ -730,7 +763,9 @@ def _install_emmylua(
730
763
  bin_path = cache_path / "emmylua_doc_cli"
731
764
  if bin_path.exists():
732
765
  bin_path.chmod(bin_path.stat().st_mode | stat.S_IEXEC)
733
- can_use_cached_binary, _ = _check_version(min_version, max_version, bin_path)
766
+ can_use_cached_binary, _ = _check_version(
767
+ min_version, max_version, skip_versions, bin_path
768
+ )
734
769
  if can_use_cached_binary:
735
770
  _logger.debug("using cached emmylua_doc_cli", type="lua-ls")
736
771
  return bin_path, path
@@ -750,6 +785,7 @@ def _install_emmylua(
750
785
  tmp_file = _download_release(
751
786
  min_version,
752
787
  max_version,
788
+ skip_versions,
753
789
  api,
754
790
  timeout,
755
791
  retry,
@@ -782,15 +818,20 @@ def _install_emmylua(
782
818
 
783
819
  if verify:
784
820
  can_use_cached_lua_ls, cached_version = _check_version(
785
- min_version, max_version, bin_path
821
+ min_version, max_version, skip_versions, bin_path
786
822
  )
787
823
  if not can_use_cached_lua_ls:
788
- version = _make_version_message(min_version, max_version)
789
- raise LuaLsError(
790
- f"downloaded emmylua_doc_cli printed version {cached_version}, "
791
- f"but {version} is required; are you sure lua_ls_min_version "
792
- f"and lua_ls_max_version are correct?",
793
- )
824
+ if cached_version is not None:
825
+ version = _make_version_message(min_version, max_version, skip_versions)
826
+ raise LuaLsError(
827
+ f"downloaded emmylua_doc_cli printed version {cached_version}, "
828
+ f"but {version} is required; are you sure lua_ls_min_version "
829
+ f"and lua_ls_max_version are correct?",
830
+ )
831
+ else:
832
+ raise LuaLsError(
833
+ "downloaded emmylua_doc_cli failed to print its version"
834
+ )
794
835
  elif not bin_path.exists():
795
836
  raise LuaLsError(
796
837
  f"downloaded latest emmylua_doc_cli is broken: " f"can't find {bin_path}",
@@ -802,6 +843,7 @@ def _install_emmylua(
802
843
  def _download_release(
803
844
  min_version: str,
804
845
  max_version: str | None,
846
+ skip_versions: list[str],
805
847
  api: github.Github,
806
848
  timeout: int,
807
849
  retry: urllib3.Retry,
@@ -814,6 +856,9 @@ def _download_release(
814
856
  machine: str,
815
857
  ):
816
858
  min_version_tuple = tuple(int(c) for c in min_version.split("."))
859
+ skip_version_tuples = [
860
+ tuple(int(c) for c in version.split(".")) for version in skip_versions
861
+ ]
817
862
  if max_version:
818
863
  max_version_tuple = tuple(int(c) for c in max_version.split("."))
819
864
  else:
@@ -832,7 +877,10 @@ def _download_release(
832
877
  if match := re.search(r"(\d+\.\d+\.\d+)", release.tag_name):
833
878
  release_version = match.group(1)
834
879
  release_version_tuple = tuple(int(c) for c in release_version.split("."))
835
- if not (min_version_tuple <= release_version_tuple < max_version_tuple):
880
+ if not (
881
+ min_version_tuple <= release_version_tuple < max_version_tuple
882
+ and not _should_skip(release_version_tuple, skip_version_tuples)
883
+ ):
836
884
  _logger.debug(
837
885
  "release is outside of allowed version range", type="lua-ls"
838
886
  )
@@ -853,7 +901,7 @@ def _download_release(
853
901
 
854
902
  break
855
903
  else:
856
- version = _make_version_message(min_version, max_version)
904
+ version = _make_version_message(min_version, max_version, skip_versions)
857
905
  raise LuaLsError(f"unable to find {name} release for {version}")
858
906
 
859
907
  _logger.debug("downloading %s from %s", name, browser_download_url, type="lua-ls")
@@ -892,6 +940,15 @@ def _download_release(
892
940
  return dest / basename
893
941
 
894
942
 
943
+ def _should_skip(version: tuple[int, ...], skip_versions: list[tuple[int, ...]]):
944
+ for skip_version in skip_versions:
945
+ if len(version) < len(skip_version):
946
+ version += (0,) * (len(skip_version) - len(version))
947
+ if skip_version == version[: len(skip_version)]:
948
+ return True
949
+ return False
950
+
951
+
895
952
  if __name__ == "__main__":
896
953
 
897
954
  def main():
@@ -903,6 +960,7 @@ if __name__ == "__main__":
903
960
  parser.add_argument("machine")
904
961
  parser.add_argument("--min", default="0.0.0")
905
962
  parser.add_argument("--max", default=None)
963
+ parser.add_argument("--skip", action="append", default=[])
906
964
  parser.add_argument("path", type=pathlib.Path)
907
965
 
908
966
  _logger.setLevel("DEBUG")
@@ -917,6 +975,7 @@ if __name__ == "__main__":
917
975
  _install_lua_ls(
918
976
  args.min,
919
977
  args.max,
978
+ args.skip,
920
979
  args.path,
921
980
  _get_path(None),
922
981
  True,
@@ -933,6 +992,7 @@ if __name__ == "__main__":
933
992
  _install_emmylua(
934
993
  args.min,
935
994
  args.max,
995
+ args.skip,
936
996
  args.path,
937
997
  _get_path(None),
938
998
  True,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sphinx-lua-ls
3
- Version: 3.7.0
3
+ Version: 3.8.0
4
4
  Summary: Automatic documentation generation via EmmyLua/LuaLs
5
5
  Author-email: Tamika Nomara <taminomara@gmail.com>
6
6
  License-Expression: MIT
@@ -24,7 +24,7 @@ Classifier: Typing :: Typed
24
24
  Requires-Python: >=3.12
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
- Requires-Dist: sphinx<9.0,>=8.0
27
+ Requires-Dist: sphinx<10.0,>=8.0
28
28
  Requires-Dist: PyGithub<3.0,>=1.59
29
29
  Requires-Dist: requests~=2.31
30
30
  Dynamic: license-file
@@ -48,6 +48,7 @@ sphinx_lua_ls/static/lua.css
48
48
  test/conftest.py
49
49
  test/test_parse.py
50
50
  test/test_regression.py
51
+ test/test_versions.py
51
52
  test/roots/test-apidoc/.gitignore
52
53
  test/roots/test-apidoc/Makefile
53
54
  test/roots/test-apidoc/conf.py
@@ -1,3 +1,3 @@
1
- sphinx<9.0,>=8.0
1
+ sphinx<10.0,>=8.0
2
2
  PyGithub<3.0,>=1.59
3
3
  requests~=2.31