sphinx-lua-ls 3.7.0.post1__tar.gz → 3.8.1__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.post1 → sphinx_lua_ls-3.8.1}/.github/workflows/ci.yaml +9 -7
  2. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/CHANGELOG.md +15 -1
  3. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/CONTRIBUTING.md +4 -0
  4. {sphinx_lua_ls-3.7.0.post1/sphinx_lua_ls.egg-info → sphinx_lua_ls-3.8.1}/PKG-INFO +2 -2
  5. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/settings.rst +17 -2
  6. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/pyproject.toml +3 -3
  7. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/__init__.py +4 -15
  8. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/_version.py +3 -3
  9. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/config.py +16 -3
  10. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/domain.py +2 -2
  11. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/lua_ls.py +115 -28
  12. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1/sphinx_lua_ls.egg-info}/PKG-INFO +2 -2
  13. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls.egg-info/SOURCES.txt +1 -0
  14. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls.egg-info/requires.txt +1 -1
  15. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-annotations.html +8 -8
  16. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-annotations.html +8 -8
  17. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-doctype.html +2 -2
  18. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-global_tables.html +2 -2
  19. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-globals.html +4 -4
  20. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-incongruent_export.html +4 -4
  21. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-member_ordering.html +8 -8
  22. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-nested_modules.html +2 -2
  23. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-nesting.html +12 -12
  24. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-nesting_recursive.html +36 -36
  25. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-object_types.html +16 -16
  26. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-relative_resolve.html +2 -2
  27. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-signatures.html +46 -46
  28. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-using.html +2 -2
  29. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-globals.html +4 -4
  30. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-member_ordering.html +8 -8
  31. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-nested_modules.html +2 -2
  32. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-nesting.html +12 -12
  33. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-nesting_recursive.html +36 -36
  34. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-object_types.html +16 -16
  35. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-relative_resolve.html +2 -2
  36. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-settings-no-recursion.html +2 -2
  37. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-settings-simple.html +4 -4
  38. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/doc-annotations.html +4 -4
  39. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/doc-directives.html +48 -48
  40. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/doc-inherited.html +2 -2
  41. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/doc-refs.html +4 -4
  42. sphinx_lua_ls-3.8.1/test/test_versions.py +42 -0
  43. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/.cl-keeper.yaml +0 -0
  44. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/.github/dependabot.yml +0 -0
  45. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/.gitignore +0 -0
  46. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/.pre-commit-config.yaml +0 -0
  47. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/.readthedocs.yaml +0 -0
  48. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/LICENSE +0 -0
  49. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/README.md +0 -0
  50. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/conftest.py +0 -0
  51. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/Makefile +0 -0
  52. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/make.bat +0 -0
  53. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/_extra/robots.txt +0 -0
  54. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/apidoc.rst +0 -0
  55. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/autodoc.rst +0 -0
  56. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/conf.py +0 -0
  57. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/directives.rst +0 -0
  58. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/example/.emmyrc.json +0 -0
  59. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/example/logging.lua +0 -0
  60. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/example.rst +0 -0
  61. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/index.rst +0 -0
  62. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/installation.rst +0 -0
  63. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/quickstart.rst +0 -0
  64. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/docs/source/roles.rst +0 -0
  65. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/setup.cfg +0 -0
  66. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/apidoc.py +0 -0
  67. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/autodoc.py +0 -0
  68. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/autoindex.py +0 -0
  69. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/inherited.py +0 -0
  70. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/intersphinx.py +0 -0
  71. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/objtree.py +0 -0
  72. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/py.typed +0 -0
  73. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/pygments.py +0 -0
  74. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/static/lua.css +0 -0
  75. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls/utils.py +0 -0
  76. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls.egg-info/dependency_links.txt +0 -0
  77. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/sphinx_lua_ls.egg-info/top_level.txt +0 -0
  78. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/conftest.py +0 -0
  79. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-apidoc/.gitignore +0 -0
  80. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-apidoc/Makefile +0 -0
  81. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-apidoc/conf.py +0 -0
  82. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-apidoc/index.rst +0 -0
  83. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-apidoc/lua/mod/inner.lua +0 -0
  84. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-apidoc/lua/mod.lua +0 -0
  85. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-apidoc/make.bat +0 -0
  86. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/Makefile +0 -0
  87. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/conf.py +0 -0
  88. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/index.rst +0 -0
  89. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/lua/annotations.lua +0 -0
  90. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/lua/globals.lua +0 -0
  91. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/lua/globals_2.lua +0 -0
  92. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/lua/member_ordering.lua +0 -0
  93. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/lua/module_title.lua +0 -0
  94. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/lua/nested_modules.lua +0 -0
  95. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/lua/nesting.lua +0 -0
  96. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/lua/object_types.lua +0 -0
  97. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/lua/relative_resolve.lua +0 -0
  98. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/make.bat +0 -0
  99. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/annotations.rst +0 -0
  100. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/autoindex.rst +0 -0
  101. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/globals.rst +0 -0
  102. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/member_ordering.rst +0 -0
  103. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/module_title.rst +0 -0
  104. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/nested_modules.rst +0 -0
  105. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/nesting.rst +0 -0
  106. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/nesting_recursive.rst +0 -0
  107. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/object_types.rst +0 -0
  108. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc/src/relative_resolve.rst +0 -0
  109. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/Makefile +0 -0
  110. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/conf.py +0 -0
  111. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/index.rst +0 -0
  112. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/.emmyrc.json +0 -0
  113. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/annotations.lua +0 -0
  114. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/doctype.lua +0 -0
  115. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/foo/x.lua +0 -0
  116. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/global_tables.lua +0 -0
  117. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/globals.lua +0 -0
  118. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/globals_2.lua +0 -0
  119. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/incongruent_export.lua +0 -0
  120. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/member_ordering.lua +0 -0
  121. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/module_function.lua +0 -0
  122. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/module_title.lua +0 -0
  123. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/nested_modules.lua +0 -0
  124. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/nesting.lua +0 -0
  125. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/object_types.lua +0 -0
  126. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/relative_resolve.lua +0 -0
  127. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/signatures.lua +0 -0
  128. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/lua/using.lua +0 -0
  129. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/make.bat +0 -0
  130. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/annotations.rst +0 -0
  131. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/autoindex.rst +0 -0
  132. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/doctype.rst +0 -0
  133. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/global_tables.rst +0 -0
  134. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/globals.rst +0 -0
  135. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/incongruent_export.rst +0 -0
  136. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/member_ordering.rst +0 -0
  137. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/module_function.rst +0 -0
  138. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/module_title.rst +0 -0
  139. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/nested_modules.rst +0 -0
  140. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/nesting.rst +0 -0
  141. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/nesting_recursive.rst +0 -0
  142. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/object_types.rst +0 -0
  143. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/relative_resolve.rst +0 -0
  144. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/require.rst +0 -0
  145. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/signatures.rst +0 -0
  146. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-emmylua/src/using.rst +0 -0
  147. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-roots/Makefile +0 -0
  148. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-roots/conf.py +0 -0
  149. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-roots/index.rst +0 -0
  150. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-roots/lua/root_1/autodoc.lua +0 -0
  151. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-roots/lua/root_2/autodoc.lua +0 -0
  152. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-roots/make.bat +0 -0
  153. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings/Makefile +0 -0
  154. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings/conf.py +0 -0
  155. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings/index.rst +0 -0
  156. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings/lua/autodoc.lua +0 -0
  157. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings/make.bat +0 -0
  158. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings-override/Makefile +0 -0
  159. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings-override/conf.py +0 -0
  160. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings-override/index.rst +0 -0
  161. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings-override/lua/autodoc.lua +0 -0
  162. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-autodoc-settings-override/make.bat +0 -0
  163. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/Makefile +0 -0
  164. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/conf.py +0 -0
  165. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/index.rst +0 -0
  166. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/make.bat +0 -0
  167. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/src/annotations.rst +0 -0
  168. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/src/autoindex.rst +0 -0
  169. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/src/directives.rst +0 -0
  170. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/src/inherited.rst +0 -0
  171. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/src/modules.rst +0 -0
  172. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-doc/src/refs.rst +0 -0
  173. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-intersphinx/Makefile +0 -0
  174. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-intersphinx/conf.py +0 -0
  175. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-intersphinx/index.rst +0 -0
  176. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/roots/test-intersphinx/make.bat +0 -0
  177. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_parse.py +0 -0
  178. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/apidoc-md-sep.yml +0 -0
  179. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/apidoc-md.yml +0 -0
  180. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/apidoc-rst-sep.yml +0 -0
  181. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/apidoc-rst.yml +0 -0
  182. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-autoindex.html +0 -0
  183. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-autoindex.html +0 -0
  184. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-index.html +0 -0
  185. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-module_function.html +0 -0
  186. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-module_title.html +0 -0
  187. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-emmylua-require.html +0 -0
  188. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-module_title.html +0 -0
  189. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-roots-default.html +0 -0
  190. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-roots-no-roots.html +0 -0
  191. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/autodoc-roots-single-root.html +0 -0
  192. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/doc-autoindex.html +0 -0
  193. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression/doc-modules.html +0 -0
  194. {sphinx_lua_ls-3.7.0.post1 → sphinx_lua_ls-3.8.1}/test/test_regression.py +0 -0
@@ -26,17 +26,17 @@ 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 -m sphinx_lua_ls.lua_ls linux x86_64 --runtime luals ~/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 -m sphinx_lua_ls.lua_ls win32 amd64 --runtime luals ~/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 -m sphinx_lua_ls.lua_ls darwin arm --runtime luals ~/lua_ls_release/macos-latest
34
34
  - name: Download EmmyLua for Linux
35
- run: python sphinx_lua_ls/lua_ls.py linux x86_64 --runtime emmylua ~/lua_ls_release/ubuntu-latest
35
+ run: python -m sphinx_lua_ls.lua_ls linux x86_64 --runtime emmylua ~/lua_ls_release/ubuntu-latest
36
36
  - name: Download EmmyLua for Windows
37
- run: python sphinx_lua_ls/lua_ls.py win32 amd64 --runtime emmylua ~/lua_ls_release/windows-latest
37
+ run: python -m sphinx_lua_ls.lua_ls win32 amd64 --runtime emmylua ~/lua_ls_release/windows-latest
38
38
  - name: Download EmmyLua for MacOs
39
- run: python sphinx_lua_ls/lua_ls.py darwin arm --runtime emmylua ~/lua_ls_release/macos-latest
39
+ run: python -m sphinx_lua_ls.lua_ls darwin arm --runtime emmylua ~/lua_ls_release/macos-latest
40
40
  - name: Upload artifact
41
41
  uses: actions/upload-artifact@v4
42
42
  with:
@@ -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.1] - 2025-12-08
6
+
7
+ - Added LuaLs 3.16.0 to the list of known broken releases ([LuaLS#3301]).
8
+
9
+ ## [3.8.0] - 2025-12-03
10
+
11
+ - Added support for Sphinx 9.
12
+
13
+ - Added `lua_ls_skip_versions` config option to selectively avoid certain language server
14
+ releases.
15
+
5
16
  ## [3.7.0-post1] - 2025-11-14
6
17
 
7
18
  - Minor documentation tweaks.
@@ -257,6 +268,9 @@ Initial release.
257
268
  [3.6.0]: https://github.com/sphinx-contrib/lua-ls/compare/v3.5.0-post1...v3.6.0
258
269
  [3.7.0]: https://github.com/sphinx-contrib/lua-ls/compare/v3.6.0...v3.7.0
259
270
  [3.7.0-post1]: https://github.com/sphinx-contrib/lua-ls/compare/v3.7.0...v3.7.0-post1
271
+ [3.8.0]: https://github.com/sphinx-contrib/lua-ls/compare/v3.7.0-post1...v3.8.0
272
+ [3.8.1]: https://github.com/sphinx-contrib/lua-ls/compare/v3.8.0...v3.8.1
260
273
  [@bkoropoff]: https://github.com/bkoropoff
261
274
  [emmylua]: https://github.com/EmmyLuaLs/emmylua-analyzer-rust/
262
- [unreleased]: https://github.com/sphinx-contrib/lua-ls/compare/v3.7.0-post1...HEAD
275
+ [luals#3301]: https://github.com/LuaLS/lua-language-server/issues/3301
276
+ [unreleased]: https://github.com/sphinx-contrib/lua-ls/compare/v3.8.1...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.post1
3
+ Version: 3.8.1
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
@@ -52,6 +52,21 @@ 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
+
66
+ Default is to avoid known broken releases:
67
+
68
+ - LuaLs ``3.16.0`` — broken on Linux, fixed in ``3.16.1``.
69
+
55
70
  .. py:data:: lua_ls_default_options
56
71
  :type: dict[str, str]
57
72
 
@@ -99,12 +114,12 @@ Settings
99
114
  and :rst:dir:`lua:autoobject:class-signature` options.
100
115
 
101
116
  .. py:data:: lua_ls_class_default_force_non_colon
102
- :type:
117
+ :type: bool
103
118
 
104
119
  If ``True``, Sphinx-LuaLs will remove ``self`` from class constructor's signature.
105
120
 
106
121
  .. py:data:: lua_ls_class_default_force_return_self
107
- :type:
122
+ :type: bool
108
123
 
109
124
  If ``True``, Sphinx-LuaLs will replace class constructor's return type with ``self``.
110
125
 
@@ -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 = [
@@ -58,25 +58,13 @@ def run_lua_ls(app: sphinx.application.Sphinx):
58
58
  if not modified:
59
59
  return
60
60
 
61
- min_version = domain.config.min_version
62
- if min_version is None:
63
- if domain.config.backend == "luals":
64
- min_version = "3.0.0"
65
- else:
66
- min_version = "0.11.0"
67
- max_version = domain.config.max_version
68
- if max_version == "__auto__":
69
- if domain.config.backend == "luals":
70
- max_version = "4.0.0"
71
- else:
72
- max_version = "2.0.0"
73
-
74
61
  cwd = pathlib.Path.cwd()
75
62
  try:
76
63
  runner = sphinx_lua_ls.lua_ls.resolve(
77
64
  backend=domain.config.backend,
78
- min_version=min_version,
79
- max_version=max_version,
65
+ min_version=domain.config.min_version,
66
+ max_version=domain.config.max_version,
67
+ skip_versions=domain.config.skip_versions,
80
68
  cwd=root_dir,
81
69
  reporter=sphinx_lua_ls.lua_ls.SphinxProgressReporter(app.verbosity),
82
70
  install=domain.config.auto_install,
@@ -195,6 +183,7 @@ def setup(app: sphinx.application.Sphinx):
195
183
  app.add_config_value("lua_ls_auto_install_location", None, rebuild="")
196
184
  app.add_config_value("lua_ls_min_version", None, rebuild="env")
197
185
  app.add_config_value("lua_ls_max_version", "__auto__", rebuild="env")
186
+ app.add_config_value("lua_ls_skip_versions", None, rebuild="env")
198
187
  app.add_config_value("lua_ls_lua_version", None, rebuild="html")
199
188
  app.add_config_value("lua_ls_default_options", None, rebuild="env")
200
189
  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.post1'
32
- __version_tuple__ = version_tuple = (3, 7, 0, 'post1')
31
+ __version__ = version = '3.8.1'
32
+ __version_tuple__ = version_tuple = (3, 8, 1)
33
33
 
34
- __commit_id__ = commit_id = 'g7fbbe95bc'
34
+ __commit_id__ = commit_id = 'g03b365db2'
@@ -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
@@ -26,6 +26,10 @@ from sphinx.errors import SphinxError
26
26
  from sphinx.util import logging
27
27
  from sphinx.util.console import bold, red # type: ignore
28
28
 
29
+ KNOWN_BROKEN_LUA_LS_RELEASES = ["3.16.0"]
30
+ KNOWN_BROKEN_EMMYLUA_RELEASES = []
31
+
32
+
29
33
  _PathLike: _t.TypeAlias = str | os.PathLike[str]
30
34
 
31
35
 
@@ -307,8 +311,9 @@ class SphinxProgressReporter(DefaultProgressReporter):
307
311
  def resolve(
308
312
  *,
309
313
  backend: _t.Literal["emmylua", "luals"],
310
- min_version: str,
314
+ min_version: str | None,
311
315
  max_version: str | None,
316
+ skip_versions: list[str] | None,
312
317
  cache_path: _PathLike | None = None,
313
318
  quiet: bool = True,
314
319
  env: dict[str, str] | None = None,
@@ -332,6 +337,8 @@ def resolve(
332
337
  minimal LuaLs version required.
333
338
  :param max_version:
334
339
  maximal LuaLs version required. Version is not limited is `None`.
340
+ :param skip_versions:
341
+ list of known broken versions.
335
342
  :param quiet:
336
343
  if true (default), any output from the LuaLs binary is hidden.
337
344
  :param env:
@@ -368,12 +375,30 @@ def resolve(
368
375
  if retry is None:
369
376
  retry = urllib3.Retry(10, backoff_factor=0.1)
370
377
 
378
+ print(min_version, max_version, skip_versions)
379
+ if min_version is None:
380
+ if backend == "luals":
381
+ min_version = "3.0.0"
382
+ else:
383
+ min_version = "0.11.0"
384
+ if max_version == "__auto__":
385
+ if backend == "luals":
386
+ max_version = "4.0.0"
387
+ else:
388
+ max_version = "2.0.0"
389
+ if skip_versions is None:
390
+ if backend == "luals":
391
+ skip_versions = KNOWN_BROKEN_LUA_LS_RELEASES
392
+ else:
393
+ skip_versions = KNOWN_BROKEN_EMMYLUA_RELEASES
394
+
371
395
  reporter.start()
372
396
  try:
373
397
  bin_path, path = _check_and_install(
374
398
  backend,
375
399
  min_version,
376
400
  max_version,
401
+ skip_versions,
377
402
  cache_path,
378
403
  _get_path(env),
379
404
  install,
@@ -423,9 +448,15 @@ def _get_path(env: dict[str, str] | None) -> str:
423
448
 
424
449
 
425
450
  def _check_version(
426
- min_version: str, max_version: str | None, bin_path: _PathLike
451
+ min_version: str,
452
+ max_version: str | None,
453
+ skip_versions: list[str],
454
+ bin_path: _PathLike,
427
455
  ) -> _t.Tuple[bool, _t.Optional[str]]:
428
456
  min_version_tuple = tuple(int(c) for c in min_version.split("."))
457
+ skip_version_tuples = [
458
+ tuple(int(c) for c in version.split(".")) for version in skip_versions
459
+ ]
429
460
  if max_version:
430
461
  max_version_tuple = tuple(int(c) for c in max_version.split("."))
431
462
  if max_version_tuple <= min_version_tuple:
@@ -442,15 +473,19 @@ def _check_version(
442
473
  if match := re.search(r"(\d+\.\d+\.\d+)", system_version_text):
443
474
  system_version = match.group(1)
444
475
  system_version_tuple = tuple(int(c) for c in system_version.split("."))
445
- if min_version_tuple <= system_version_tuple < max_version_tuple:
476
+ if (
477
+ min_version_tuple <= system_version_tuple < max_version_tuple
478
+ and not _should_skip(system_version_tuple, skip_version_tuples)
479
+ ):
446
480
  return True, system_version
447
481
  else:
448
482
  _logger.debug(
449
- "%s is outdated (got %s, required %s..%s)",
483
+ "%s is outdated (got %s, required %s..%s, skip=%r)",
450
484
  bin_path,
451
485
  system_version,
452
486
  min_version,
453
487
  max_version,
488
+ skip_versions,
454
489
  type="lua-ls",
455
490
  )
456
491
  return False, system_version
@@ -474,6 +509,7 @@ def _check_and_install(
474
509
  backend: _t.Literal["emmylua", "luals"],
475
510
  min_version: str,
476
511
  max_version: str | None,
512
+ skip_versions: list[str],
477
513
  cache_path: pathlib.Path,
478
514
  path: str,
479
515
  install: bool,
@@ -485,6 +521,7 @@ def _check_and_install(
485
521
  min_version = min_version[1:]
486
522
  if max_version and max_version.startswith("v"):
487
523
  max_version = max_version[1:]
524
+ skip_versions = [version.removeprefix("v") for version in skip_versions]
488
525
 
489
526
  if backend == "emmylua":
490
527
  bin_name = "emmylua_doc_cli"
@@ -495,7 +532,7 @@ def _check_and_install(
495
532
  system_version = None
496
533
  if system_bin_path:
497
534
  can_use_system_lua_ls, system_version = _check_version(
498
- min_version, max_version, system_bin_path
535
+ min_version, max_version, skip_versions, system_bin_path
499
536
  )
500
537
  if can_use_system_lua_ls:
501
538
  _logger.debug(
@@ -526,6 +563,7 @@ def _check_and_install(
526
563
  return _install_emmylua(
527
564
  min_version,
528
565
  max_version,
566
+ skip_versions,
529
567
  cache_path,
530
568
  path,
531
569
  install,
@@ -541,6 +579,7 @@ def _check_and_install(
541
579
  return _install_lua_ls(
542
580
  min_version,
543
581
  max_version,
582
+ skip_versions,
544
583
  cache_path,
545
584
  path,
546
585
  install,
@@ -554,16 +593,22 @@ def _check_and_install(
554
593
  )
555
594
 
556
595
 
557
- def _make_version_message(min_version: str, max_version: str | None) -> str:
596
+ def _make_version_message(
597
+ min_version: str, max_version: str | None, skip_versions: list[str]
598
+ ) -> str:
558
599
  if max_version:
559
- return f"a version between {min_version} and {max_version}"
600
+ msg = f"a version between {min_version} and {max_version}"
560
601
  else:
561
- return f"version {min_version} or newer"
602
+ msg = f"version {min_version} or newer"
603
+ if skip_versions:
604
+ msg += ", and not " + ", ".join(skip_versions)
605
+ return msg
562
606
 
563
607
 
564
608
  def _install_lua_ls(
565
609
  min_version: str,
566
610
  max_version: str | None,
611
+ skip_versions: list[str],
567
612
  cache_path: pathlib.Path,
568
613
  path: str,
569
614
  install: bool,
@@ -589,7 +634,7 @@ def _install_lua_ls(
589
634
  release_name = release_names.get((platform, machine), None)
590
635
  if not install or not release_name:
591
636
  if system_bin_path:
592
- version = _make_version_message(min_version, max_version)
637
+ version = _make_version_message(min_version, max_version, skip_versions)
593
638
  raise LuaLsError(
594
639
  f"you have lua-language-server {system_version}, "
595
640
  f"but {version} is required; "
@@ -613,7 +658,9 @@ def _install_lua_ls(
613
658
  bin_path = cache_path / "bin/lua-language-server"
614
659
  if bin_path.exists():
615
660
  bin_path.chmod(bin_path.stat().st_mode | stat.S_IEXEC)
616
- can_use_cached_binary, _ = _check_version(min_version, max_version, bin_path)
661
+ can_use_cached_binary, _ = _check_version(
662
+ min_version, max_version, skip_versions, bin_path
663
+ )
617
664
  if can_use_cached_binary:
618
665
  _logger.debug("using cached lua-language-server", type="lua-ls")
619
666
  return bin_path, path
@@ -631,6 +678,7 @@ def _install_lua_ls(
631
678
  tmp_file = _download_release(
632
679
  min_version,
633
680
  max_version,
681
+ skip_versions,
634
682
  api,
635
683
  timeout,
636
684
  retry,
@@ -663,15 +711,20 @@ def _install_lua_ls(
663
711
 
664
712
  if verify:
665
713
  can_use_cached_lua_ls, cached_version = _check_version(
666
- min_version, max_version, bin_path
714
+ min_version, max_version, skip_versions, bin_path
667
715
  )
668
716
  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
- )
717
+ if cached_version is not None:
718
+ version = _make_version_message(min_version, max_version, skip_versions)
719
+ raise LuaLsError(
720
+ f"downloaded lua-language-server printed version {cached_version}, "
721
+ f"but {version} is required; are you sure lua_ls_min_version "
722
+ f"and lua_ls_max_version are correct?",
723
+ )
724
+ else:
725
+ raise LuaLsError(
726
+ "downloaded lua-language-server failed to print its version"
727
+ )
675
728
  elif not bin_path.exists():
676
729
  raise LuaLsError(
677
730
  f"downloaded latest lua-language-server is broken: "
@@ -684,6 +737,7 @@ def _install_lua_ls(
684
737
  def _install_emmylua(
685
738
  min_version: str,
686
739
  max_version: str | None,
740
+ skip_versions: list[str],
687
741
  cache_path: pathlib.Path,
688
742
  path: str,
689
743
  install: bool,
@@ -707,7 +761,7 @@ def _install_emmylua(
707
761
  release_name = release_names.get((platform, machine), None)
708
762
  if not install or not release_name:
709
763
  if system_bin_path:
710
- version = _make_version_message(min_version, max_version)
764
+ version = _make_version_message(min_version, max_version, skip_versions)
711
765
  raise LuaLsError(
712
766
  f"you have emmylua_doc_cli {system_version}, but {version} is required; "
713
767
  f"see upgrade instructions "
@@ -730,7 +784,9 @@ def _install_emmylua(
730
784
  bin_path = cache_path / "emmylua_doc_cli"
731
785
  if bin_path.exists():
732
786
  bin_path.chmod(bin_path.stat().st_mode | stat.S_IEXEC)
733
- can_use_cached_binary, _ = _check_version(min_version, max_version, bin_path)
787
+ can_use_cached_binary, _ = _check_version(
788
+ min_version, max_version, skip_versions, bin_path
789
+ )
734
790
  if can_use_cached_binary:
735
791
  _logger.debug("using cached emmylua_doc_cli", type="lua-ls")
736
792
  return bin_path, path
@@ -750,6 +806,7 @@ def _install_emmylua(
750
806
  tmp_file = _download_release(
751
807
  min_version,
752
808
  max_version,
809
+ skip_versions,
753
810
  api,
754
811
  timeout,
755
812
  retry,
@@ -782,15 +839,20 @@ def _install_emmylua(
782
839
 
783
840
  if verify:
784
841
  can_use_cached_lua_ls, cached_version = _check_version(
785
- min_version, max_version, bin_path
842
+ min_version, max_version, skip_versions, bin_path
786
843
  )
787
844
  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
- )
845
+ if cached_version is not None:
846
+ version = _make_version_message(min_version, max_version, skip_versions)
847
+ raise LuaLsError(
848
+ f"downloaded emmylua_doc_cli printed version {cached_version}, "
849
+ f"but {version} is required; are you sure lua_ls_min_version "
850
+ f"and lua_ls_max_version are correct?",
851
+ )
852
+ else:
853
+ raise LuaLsError(
854
+ "downloaded emmylua_doc_cli failed to print its version"
855
+ )
794
856
  elif not bin_path.exists():
795
857
  raise LuaLsError(
796
858
  f"downloaded latest emmylua_doc_cli is broken: " f"can't find {bin_path}",
@@ -802,6 +864,7 @@ def _install_emmylua(
802
864
  def _download_release(
803
865
  min_version: str,
804
866
  max_version: str | None,
867
+ skip_versions: list[str],
805
868
  api: github.Github,
806
869
  timeout: int,
807
870
  retry: urllib3.Retry,
@@ -814,6 +877,9 @@ def _download_release(
814
877
  machine: str,
815
878
  ):
816
879
  min_version_tuple = tuple(int(c) for c in min_version.split("."))
880
+ skip_version_tuples = [
881
+ tuple(int(c) for c in version.split(".")) for version in skip_versions
882
+ ]
817
883
  if max_version:
818
884
  max_version_tuple = tuple(int(c) for c in max_version.split("."))
819
885
  else:
@@ -832,7 +898,10 @@ def _download_release(
832
898
  if match := re.search(r"(\d+\.\d+\.\d+)", release.tag_name):
833
899
  release_version = match.group(1)
834
900
  release_version_tuple = tuple(int(c) for c in release_version.split("."))
835
- if not (min_version_tuple <= release_version_tuple < max_version_tuple):
901
+ if not (
902
+ min_version_tuple <= release_version_tuple < max_version_tuple
903
+ and not _should_skip(release_version_tuple, skip_version_tuples)
904
+ ):
836
905
  _logger.debug(
837
906
  "release is outside of allowed version range", type="lua-ls"
838
907
  )
@@ -853,7 +922,7 @@ def _download_release(
853
922
 
854
923
  break
855
924
  else:
856
- version = _make_version_message(min_version, max_version)
925
+ version = _make_version_message(min_version, max_version, skip_versions)
857
926
  raise LuaLsError(f"unable to find {name} release for {version}")
858
927
 
859
928
  _logger.debug("downloading %s from %s", name, browser_download_url, type="lua-ls")
@@ -892,6 +961,15 @@ def _download_release(
892
961
  return dest / basename
893
962
 
894
963
 
964
+ def _should_skip(version: tuple[int, ...], skip_versions: list[tuple[int, ...]]):
965
+ for skip_version in skip_versions:
966
+ if len(version) < len(skip_version):
967
+ version += (0,) * (len(skip_version) - len(version))
968
+ if skip_version == version[: len(skip_version)]:
969
+ return True
970
+ return False
971
+
972
+
895
973
  if __name__ == "__main__":
896
974
 
897
975
  def main():
@@ -903,6 +981,7 @@ if __name__ == "__main__":
903
981
  parser.add_argument("machine")
904
982
  parser.add_argument("--min", default="0.0.0")
905
983
  parser.add_argument("--max", default=None)
984
+ parser.add_argument("--skip", action="append", default=None)
906
985
  parser.add_argument("path", type=pathlib.Path)
907
986
 
908
987
  _logger.setLevel("DEBUG")
@@ -912,11 +991,18 @@ if __name__ == "__main__":
912
991
 
913
992
  args = parser.parse_args()
914
993
 
994
+ if args.skip is None:
995
+ if args.runtime == "luals":
996
+ args.skip = KNOWN_BROKEN_LUA_LS_RELEASES
997
+ else:
998
+ args.skip = KNOWN_BROKEN_EMMYLUA_RELEASES
999
+
915
1000
  match args.runtime:
916
1001
  case "luals":
917
1002
  _install_lua_ls(
918
1003
  args.min,
919
1004
  args.max,
1005
+ args.skip,
920
1006
  args.path,
921
1007
  _get_path(None),
922
1008
  True,
@@ -933,6 +1019,7 @@ if __name__ == "__main__":
933
1019
  _install_emmylua(
934
1020
  args.min,
935
1021
  args.max,
1022
+ args.skip,
936
1023
  args.path,
937
1024
  _get_path(None),
938
1025
  True,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sphinx-lua-ls
3
- Version: 3.7.0.post1
3
+ Version: 3.8.1
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