omdev 0.0.0.dev285__tar.gz → 0.0.0.dev286__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 (273) hide show
  1. {omdev-0.0.0.dev285/omdev.egg-info → omdev-0.0.0.dev286}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/.manifests.json +14 -2
  3. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/attrdocs.py +34 -15
  4. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/findimports.py +2 -0
  5. omdev-0.0.0.dev286/omdev/py/srcheaders.py +98 -0
  6. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/scripts/ci.py +16 -0
  7. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/scripts/interp.py +16 -0
  8. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/scripts/pyproject.py +16 -0
  9. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tokens/all.py +1 -0
  10. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tokens/tokenizert.py +9 -8
  11. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286/omdev.egg-info}/PKG-INFO +2 -2
  12. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev.egg-info/SOURCES.txt +1 -0
  13. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev.egg-info/requires.txt +1 -1
  14. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/pyproject.toml +2 -2
  15. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/LICENSE +0 -0
  16. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/MANIFEST.in +0 -0
  17. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/README.rst +0 -0
  18. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/__about__.py +0 -0
  19. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/__init__.py +0 -0
  20. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/__init__.py +0 -0
  21. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/__main__.py +0 -0
  22. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/gen.py +0 -0
  23. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/imports.py +0 -0
  24. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/main.py +0 -0
  25. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/manifests.py +0 -0
  26. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/resources.py +0 -0
  27. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/srcfiles.py +0 -0
  28. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/strip.py +0 -0
  29. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/types.py +0 -0
  30. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/amalg/typing.py +0 -0
  31. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/antlr/__init__.py +0 -0
  32. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/antlr/consts.py +0 -0
  33. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/antlr/gen.py +0 -0
  34. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/__init__.py +0 -0
  35. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/compute/__init__.py +0 -0
  36. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/compute/cache.py +0 -0
  37. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/compute/contexts.py +0 -0
  38. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/compute/currents.py +0 -0
  39. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/compute/fns.py +0 -0
  40. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/compute/resolvers.py +0 -0
  41. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/compute/storage.py +0 -0
  42. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/compute/types.py +0 -0
  43. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/data/__init__.py +0 -0
  44. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/data/actions.py +0 -0
  45. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/data/cache.py +0 -0
  46. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/data/consts.py +0 -0
  47. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/data/defaults.py +0 -0
  48. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/data/manifests.py +0 -0
  49. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cache/data/specs.py +0 -0
  50. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cc/__init__.py +0 -0
  51. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cc/__main__.py +0 -0
  52. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cc/cdeps.py +0 -0
  53. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cc/cdeps.toml +0 -0
  54. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cc/cli.py +0 -0
  55. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/__init__.py +0 -0
  56. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_boilerplate.cc +0 -0
  57. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/LICENSE +0 -0
  58. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/__init__.py +0 -0
  59. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/build_ext.py +0 -0
  60. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  61. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  62. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/compilers/options.py +0 -0
  63. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  64. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/dir_util.py +0 -0
  65. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/errors.py +0 -0
  66. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/extension.py +0 -0
  67. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/file_util.py +0 -0
  68. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/modified.py +0 -0
  69. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/spawn.py +0 -0
  70. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/sysconfig.py +0 -0
  71. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/util.py +0 -0
  72. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/_distutils/version.py +0 -0
  73. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/build.py +0 -0
  74. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/cmake.py +0 -0
  75. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/importhook.py +0 -0
  76. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/magic.py +0 -0
  77. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cexts/scan.py +0 -0
  78. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/__init__.py +0 -0
  79. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/__main__.py +0 -0
  80. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/cache.py +0 -0
  81. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/ci.py +0 -0
  82. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/cli.py +0 -0
  83. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/compose.py +0 -0
  84. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/consts.py +0 -0
  85. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/__init__.py +0 -0
  86. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/buildcaching.py +0 -0
  87. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/cache.py +0 -0
  88. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  89. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/cacheserved/cache.py +0 -0
  90. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  91. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/cmds.py +0 -0
  92. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/dataserver.py +0 -0
  93. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/imagepulling.py +0 -0
  94. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/inject.py +0 -0
  95. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/packing.py +0 -0
  96. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/repositories.py +0 -0
  97. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/docker/utils.py +0 -0
  98. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/github/__init__.py +0 -0
  99. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/github/api.py +0 -0
  100. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/github/bootstrap.py +0 -0
  101. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/github/cache.py +0 -0
  102. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/github/cli.py +0 -0
  103. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/github/client.py +0 -0
  104. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/github/env.py +0 -0
  105. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/github/inject.py +0 -0
  106. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/inject.py +0 -0
  107. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/requirements.py +0 -0
  108. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/shell.py +0 -0
  109. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ci/utils.py +0 -0
  110. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cli/__init__.py +0 -0
  111. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cli/__main__.py +0 -0
  112. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cli/_pathhack.py +0 -0
  113. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cli/clicli.py +0 -0
  114. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cli/install.py +0 -0
  115. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cli/main.py +0 -0
  116. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cli/managers.py +0 -0
  117. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cli/types.py +0 -0
  118. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/clipboard/__init__.py +0 -0
  119. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/clipboard/clipboard.py +0 -0
  120. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/clipboard/darwin_cf.py +0 -0
  121. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/clipboard/linux_x11.py +0 -0
  122. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/cmake.py +0 -0
  123. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/dataserver/__init__.py +0 -0
  124. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/dataserver/handlers.py +0 -0
  125. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/dataserver/http.py +0 -0
  126. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/dataserver/routes.py +0 -0
  127. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/dataserver/server.py +0 -0
  128. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/dataserver/targets.py +0 -0
  129. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/git/__init__.py +0 -0
  130. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/git/magic.py +0 -0
  131. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/git/revisions.py +0 -0
  132. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/git/shallow.py +0 -0
  133. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/git/status.py +0 -0
  134. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/home/__init__.py +0 -0
  135. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/home/paths.py +0 -0
  136. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/home/secrets.py +0 -0
  137. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/home/shadow.py +0 -0
  138. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/imgur.py +0 -0
  139. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/__init__.py +0 -0
  140. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/__main__.py +0 -0
  141. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/cli.py +0 -0
  142. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/default.py +0 -0
  143. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/inject.py +0 -0
  144. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/inspect.py +0 -0
  145. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/providers/__init__.py +0 -0
  146. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/providers/base.py +0 -0
  147. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/providers/inject.py +0 -0
  148. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/providers/running.py +0 -0
  149. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/providers/standalone.py +0 -0
  150. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/providers/system.py +0 -0
  151. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/pyenv/__init__.py +0 -0
  152. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/pyenv/inject.py +0 -0
  153. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/pyenv/install.py +0 -0
  154. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/pyenv/provider.py +0 -0
  155. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/pyenv/pyenv.py +0 -0
  156. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/resolvers.py +0 -0
  157. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/types.py +0 -0
  158. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/uv/__init__.py +0 -0
  159. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/uv/inject.py +0 -0
  160. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/uv/provider.py +0 -0
  161. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/uv/uv.py +0 -0
  162. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/interp/venvs.py +0 -0
  163. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/magic/__init__.py +0 -0
  164. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/magic/__main__.py +0 -0
  165. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/magic/cli.py +0 -0
  166. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/magic/find.py +0 -0
  167. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/magic/magic.py +0 -0
  168. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/magic/prepare.py +0 -0
  169. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/magic/styles.py +0 -0
  170. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/manifests/__init__.py +0 -0
  171. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/manifests/__main__.py +0 -0
  172. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/manifests/build.py +0 -0
  173. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/manifests/dumping.py +0 -0
  174. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/manifests/main.py +0 -0
  175. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/mypy/__init__.py +0 -0
  176. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/mypy/debug.py +0 -0
  177. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/__init__.py +0 -0
  178. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/building.py +0 -0
  179. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/compression.py +0 -0
  180. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/data.py +0 -0
  181. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/datarefs.py +0 -0
  182. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/dataserver.py +0 -0
  183. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/loading.py +0 -0
  184. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/media.py +0 -0
  185. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/pack/__init__.py +0 -0
  186. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/pack/packing.py +0 -0
  187. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/pack/repositories.py +0 -0
  188. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/pack/unpacking.py +0 -0
  189. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/repositories.py +0 -0
  190. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/oci/tars.py +0 -0
  191. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/packaging/__init__.py +0 -0
  192. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/packaging/marshal.py +0 -0
  193. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/packaging/names.py +0 -0
  194. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/packaging/requires.py +0 -0
  195. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/packaging/revisions.py +0 -0
  196. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/packaging/specifiers.py +0 -0
  197. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/packaging/versions.py +0 -0
  198. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/packaging/wheelfile.py +0 -0
  199. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pip.py +0 -0
  200. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/precheck/__init__.py +0 -0
  201. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/precheck/__main__.py +0 -0
  202. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/precheck/base.py +0 -0
  203. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/precheck/git.py +0 -0
  204. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/precheck/lite.py +0 -0
  205. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/precheck/main.py +0 -0
  206. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/precheck/manifests.py +0 -0
  207. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/precheck/scripts.py +0 -0
  208. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ptk/__init__.py +0 -0
  209. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ptk/apps/__init__.py +0 -0
  210. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/ptk/apps/ncdu.py +0 -0
  211. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/__init__.py +0 -0
  212. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/bracepy.py +0 -0
  213. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/classdot.py +0 -0
  214. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/scripts/__init__.py +0 -0
  215. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/scripts/bumpversion.py +0 -0
  216. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/scripts/execrss.py +0 -0
  217. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/scripts/exectime.py +0 -0
  218. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/scripts/importtrace.py +0 -0
  219. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/tools/__init__.py +0 -0
  220. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/tools/importscan.py +0 -0
  221. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/py/tools/mkrelimp.py +0 -0
  222. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/__init__.py +0 -0
  223. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/__main__.py +0 -0
  224. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/cexts.py +0 -0
  225. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/cli.py +0 -0
  226. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/configs.py +0 -0
  227. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/inject.py +0 -0
  228. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/pkg.py +0 -0
  229. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/reqs.py +0 -0
  230. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/resources/__init__.py +0 -0
  231. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/resources/docker-dev.sh +0 -0
  232. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/resources/python.sh +0 -0
  233. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/pyproject/venvs.py +0 -0
  234. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/scripts/__init__.py +0 -0
  235. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/scripts/slowcat.py +0 -0
  236. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/scripts/tmpexec.py +0 -0
  237. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tagstrings.py +0 -0
  238. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tokens/__init__.py +0 -0
  239. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tokens/utils.py +0 -0
  240. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/__init__.py +0 -0
  241. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/cloc.py +0 -0
  242. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/diff.py +0 -0
  243. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/doc.py +0 -0
  244. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/docker.py +0 -0
  245. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/git/__init__.py +0 -0
  246. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/git/__main__.py +0 -0
  247. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/git/cli.py +0 -0
  248. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/git/consts.py +0 -0
  249. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/git/messages.py +0 -0
  250. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/intellij.py +0 -0
  251. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/json/__init__.py +0 -0
  252. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/json/__main__.py +0 -0
  253. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/json/cli.py +0 -0
  254. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/json/formats.py +0 -0
  255. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/json/io.py +0 -0
  256. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/json/parsing.py +0 -0
  257. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/json/processing.py +0 -0
  258. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/json/rendering.py +0 -0
  259. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/linehisto.py +0 -0
  260. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/mkenv.py +0 -0
  261. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/notebook.py +0 -0
  262. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/pawk/__init__.py +0 -0
  263. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/pawk/__main__.py +0 -0
  264. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/pawk/pawk.py +0 -0
  265. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/pip.py +0 -0
  266. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/prof.py +0 -0
  267. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/qr.py +0 -0
  268. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/shadow.py +0 -0
  269. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev/tools/sqlrepl.py +0 -0
  270. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev.egg-info/dependency_links.txt +0 -0
  271. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev.egg-info/entry_points.txt +0 -0
  272. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/omdev.egg-info/top_level.txt +0 -0
  273. {omdev-0.0.0.dev285 → omdev-0.0.0.dev286}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev285
3
+ Version: 0.0.0.dev286
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev285
15
+ Requires-Dist: omlish==0.0.0.dev286
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -123,7 +123,7 @@
123
123
  "module": ".py.attrdocs",
124
124
  "attr": "_CLI_MODULE",
125
125
  "file": "omdev/py/attrdocs.py",
126
- "line": 146,
126
+ "line": 155,
127
127
  "value": {
128
128
  "$.cli.types.CliModule": {
129
129
  "cmd_name": "py/attrdocs",
@@ -159,7 +159,7 @@
159
159
  "module": ".py.findimports",
160
160
  "attr": "_CLI_MODULE",
161
161
  "file": "omdev/py/findimports.py",
162
- "line": 87,
162
+ "line": 89,
163
163
  "value": {
164
164
  "$.cli.types.CliModule": {
165
165
  "cmd_name": "py/findimports",
@@ -203,6 +203,18 @@
203
203
  }
204
204
  }
205
205
  },
206
+ {
207
+ "module": ".py.srcheaders",
208
+ "attr": "_CLI_MODULE",
209
+ "file": "omdev/py/srcheaders.py",
210
+ "line": 65,
211
+ "value": {
212
+ "$.cli.types.CliModule": {
213
+ "cmd_name": "py/srcheaders",
214
+ "mod_name": "omdev.py.srcheaders"
215
+ }
216
+ }
217
+ },
206
218
  {
207
219
  "module": ".py.tools.importscan",
208
220
  "attr": "_CLI_MODULE",
@@ -44,7 +44,8 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
44
44
  self._tok_lines = tok_lines
45
45
 
46
46
  self._attr_docs: dict[str, AttrDoc] = {}
47
- self._target: str | None = None
47
+ self._class_stack: list[str] = []
48
+ self._attr_target: str | None = None
48
49
  self._prev_node_type: type[ast.AST] | None = None
49
50
 
50
51
  @property
@@ -63,6 +64,13 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
63
64
 
64
65
  #
65
66
 
67
+ def visit_ClassDef(self, node: ast.ClassDef) -> ta.Any:
68
+ self._class_stack.append(node.name)
69
+ self.generic_visit(node)
70
+ check.equal(self._class_stack.pop(), node.name)
71
+
72
+ #
73
+
66
74
  @staticmethod
67
75
  def _comment_tok_src(tok: tks.Token) -> str:
68
76
  check.state(tok.name == 'COMMENT')
@@ -70,8 +78,8 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
70
78
  check.state(tc[0] == '#')
71
79
  return tc[1:].lstrip()
72
80
 
73
- def _set_target(self, node: ast.Name) -> None:
74
- self._target = node.id
81
+ def _set_attr_target(self, node: ast.Name) -> None:
82
+ self._attr_target = '.'.join([*self._class_stack, node.id])
75
83
 
76
84
  ad = _EMPTY_ATTR_DOC
77
85
 
@@ -97,15 +105,15 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
97
105
  ad = dc.replace(ad, preceding_comment='\n'.join(reversed(pll)))
98
106
 
99
107
  if ad is not _EMPTY_ATTR_DOC:
100
- self._attr_docs[node.id] = ad
108
+ self._attr_docs[self._attr_target] = ad
101
109
 
102
110
  def visit_AnnAssign(self, node: ast.AnnAssign) -> ta.Any:
103
111
  if isinstance(target := node.target, ast.Name):
104
- self._set_target(target)
112
+ self._set_attr_target(target)
105
113
 
106
114
  def visit_Assign(self, node: ast.Assign) -> ta.Any:
107
115
  if len(node.targets) == 1 and isinstance(target := node.targets[0], ast.Name):
108
- self._set_target(target) # noqa
116
+ self._set_attr_target(target) # noqa
109
117
 
110
118
  #
111
119
 
@@ -115,12 +123,13 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
115
123
  isinstance(node.value.value, str) and
116
124
  self._prev_node_type in (ast.Assign, ast.AnnAssign)
117
125
  ):
118
- docstring = inspect.cleandoc(node.value.value)
119
- if self._target:
120
- ex = self._attr_docs.get(self._target, _EMPTY_ATTR_DOC)
126
+ if self._attr_target:
127
+ docstring = inspect.cleandoc(node.value.value)
128
+ ex = self._attr_docs.get(self._attr_target, _EMPTY_ATTR_DOC)
121
129
  check.none(ex.docstring)
122
- self._attr_docs[self._target] = dc.replace(ex, docstring=docstring)
123
- self._target = None
130
+ self._attr_docs[self._attr_target] = dc.replace(ex, docstring=docstring)
131
+
132
+ self._attr_target = None
124
133
 
125
134
 
126
135
  def extract_attr_docs(src: str) -> ta.Mapping[str, AttrDoc]:
@@ -163,15 +172,25 @@ if __name__ == '__main__':
163
172
  with open(args.file) as f:
164
173
  src = f.read()
165
174
 
175
+ #
176
+
166
177
  attr_docs = extract_attr_docs(src)
167
178
 
168
179
  #
169
180
 
181
+ nested_attr_docs: dict = {}
182
+ for k, v in attr_docs.items():
183
+ cur = nested_attr_docs
184
+ *kps, ekp = [f'.{kp}' for kp in k.split('.')]
185
+ for kp in kps:
186
+ cur = cur.setdefault(kp, {})
187
+ check.not_in(ekp, cur)
188
+ cur[ekp] = {k: v for k, v in dc.asdict(v).items() if v}
189
+
190
+ #
191
+
170
192
  import json
171
193
 
172
- print(json.dumps({
173
- a: {k: v for k, v in dc.asdict(ad).items() if v}
174
- for a, ad in sorted(attr_docs.items(), key=lambda t: t[0])
175
- }))
194
+ print(json.dumps(nested_attr_docs, indent=2))
176
195
 
177
196
  _main()
@@ -2,8 +2,10 @@
2
2
  # @omlish-script
3
3
  """
4
4
  TODO:
5
+ - !! FIX: from omlish import lang - try lang as a subpackage
5
6
  - multiple commands:
6
7
  - dumb cmp (a = set(sys.modules); import ...; print(set(sys.modules) - a)
8
+ - graphviz
7
9
  """
8
10
  import ast
9
11
  import importlib.machinery
@@ -0,0 +1,98 @@
1
+ import ast
2
+ import dataclasses as dc
3
+ import typing as ta
4
+
5
+ from omlish.lite.check import check
6
+
7
+ from ..tokens import all as tks
8
+
9
+
10
+ ##
11
+
12
+
13
+ @dc.dataclass(frozen=True)
14
+ class PyHeaderLine:
15
+ kind: ta.Literal['comment', 'string']
16
+ src: str
17
+ content: str
18
+ line: int
19
+ col: int
20
+
21
+
22
+ def get_py_header_lines(src: str) -> list[PyHeaderLine]:
23
+ ret: list[PyHeaderLine] = []
24
+
25
+ src_toks = tks.iter_src_to_tokens(src)
26
+ hdr_toks = (
27
+ tok
28
+ for tok in src_toks
29
+ if tok.name == 'COMMENT' or
30
+ (tok.name not in tks.WS_NAMES and tok.name != 'NL')
31
+ )
32
+
33
+ for tok in hdr_toks:
34
+ if tok.name == 'COMMENT':
35
+ cs = tok.src.lstrip()
36
+ check.state(cs.startswith('#'))
37
+ cs = cs[1:].lstrip()
38
+ ret.append(PyHeaderLine(
39
+ kind='comment',
40
+ src=tok.src,
41
+ content=cs,
42
+ line=check.isinstance(tok.line, int),
43
+ col=check.isinstance(tok.utf8_byte_offset, int),
44
+ ))
45
+
46
+ elif tok.name == 'STRING':
47
+ ss = ast.literal_eval(tok.src)
48
+ ret.append(PyHeaderLine(
49
+ kind='string',
50
+ src=tok.src,
51
+ content=ss,
52
+ line=check.isinstance(tok.line, int),
53
+ col=check.isinstance(tok.utf8_byte_offset, int),
54
+ ))
55
+
56
+ else:
57
+ break
58
+
59
+ return ret
60
+
61
+
62
+ ##
63
+
64
+
65
+ # @omlish-manifest
66
+ _CLI_MODULE = {'$omdev.cli.types.CliModule': {
67
+ 'cmd_name': 'py/srcheaders',
68
+ 'mod_name': __name__,
69
+ }}
70
+
71
+
72
+ if __name__ == '__main__':
73
+ def _main() -> None:
74
+ import argparse
75
+
76
+ parser = argparse.ArgumentParser()
77
+ parser.add_argument('file')
78
+ args = parser.parse_args()
79
+
80
+ #
81
+
82
+ with open(args.file) as f:
83
+ src = f.read()
84
+
85
+ #
86
+
87
+ hls = get_py_header_lines(src)
88
+
89
+ #
90
+
91
+ import json
92
+
93
+ print(json.dumps(
94
+ [dc.asdict(hl) for hl in hls],
95
+ indent=2,
96
+ ))
97
+
98
+ _main()
@@ -1096,6 +1096,9 @@ log = logging.getLogger(__name__)
1096
1096
  # ../../../omlish/lite/maybes.py
1097
1097
 
1098
1098
 
1099
+ ##
1100
+
1101
+
1099
1102
  class Maybe(ta.Generic[T]):
1100
1103
  @property
1101
1104
  @abc.abstractmethod
@@ -1136,6 +1139,19 @@ class _Maybe(Maybe[T], tuple):
1136
1139
  Maybe._empty = tuple.__new__(_Maybe, ()) # noqa
1137
1140
 
1138
1141
 
1142
+ ##
1143
+
1144
+
1145
+ @functools.singledispatch
1146
+ def as_maybe(obj: ta.Any) -> Maybe:
1147
+ raise TypeError(obj)
1148
+
1149
+
1150
+ @as_maybe.register
1151
+ def _(obj: Maybe) -> Maybe:
1152
+ return obj
1153
+
1154
+
1139
1155
  ########################################
1140
1156
  # ../../../omlish/lite/reflect.py
1141
1157
 
@@ -1069,6 +1069,9 @@ json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON
1069
1069
  # ../../../omlish/lite/maybes.py
1070
1070
 
1071
1071
 
1072
+ ##
1073
+
1074
+
1072
1075
  class Maybe(ta.Generic[T]):
1073
1076
  @property
1074
1077
  @abc.abstractmethod
@@ -1109,6 +1112,19 @@ class _Maybe(Maybe[T], tuple):
1109
1112
  Maybe._empty = tuple.__new__(_Maybe, ()) # noqa
1110
1113
 
1111
1114
 
1115
+ ##
1116
+
1117
+
1118
+ @functools.singledispatch
1119
+ def as_maybe(obj: ta.Any) -> Maybe:
1120
+ raise TypeError(obj)
1121
+
1122
+
1123
+ @as_maybe.register
1124
+ def _(obj: Maybe) -> Maybe:
1125
+ return obj
1126
+
1127
+
1112
1128
  ########################################
1113
1129
  # ../../../omlish/lite/reflect.py
1114
1130
 
@@ -2376,6 +2376,9 @@ log = logging.getLogger(__name__)
2376
2376
  # ../../../omlish/lite/maybes.py
2377
2377
 
2378
2378
 
2379
+ ##
2380
+
2381
+
2379
2382
  class Maybe(ta.Generic[T]):
2380
2383
  @property
2381
2384
  @abc.abstractmethod
@@ -2416,6 +2419,19 @@ class _Maybe(Maybe[T], tuple):
2416
2419
  Maybe._empty = tuple.__new__(_Maybe, ()) # noqa
2417
2420
 
2418
2421
 
2422
+ ##
2423
+
2424
+
2425
+ @functools.singledispatch
2426
+ def as_maybe(obj: ta.Any) -> Maybe:
2427
+ raise TypeError(obj)
2428
+
2429
+
2430
+ @as_maybe.register
2431
+ def _(obj: Maybe) -> Maybe:
2432
+ return obj
2433
+
2434
+
2419
2435
  ########################################
2420
2436
  # ../../../omlish/lite/reflect.py
2421
2437
 
@@ -30,6 +30,7 @@ UNIMPORTANT_WS = TokenNames.UNIMPORTANT_WS # noqa
30
30
  NON_CODING_TOKENS = TokenNames.NON_CODING_TOKENS # noqa
31
31
 
32
32
  curly_escape = Tokenization.curly_escape # noqa
33
+ iter_src_to_tokens = Tokenization.iter_src_to_tokens # noqa
33
34
  src_to_tokens = Tokenization.src_to_tokens # noqa
34
35
  parse_string_literal = Tokenization.parse_string_literal # noqa
35
36
  tokens_to_src = Tokenization.tokens_to_src # noqa
@@ -82,13 +82,12 @@ class Tokenization:
82
82
  return (s, '', '')
83
83
 
84
84
  @classmethod
85
- def src_to_tokens(cls, src: str) -> ta.List[Token]:
85
+ def iter_src_to_tokens(cls, src: str) -> ta.Iterator[Token]:
86
86
  tokenize_target = io.StringIO(src)
87
87
  lines = ('', *tokenize_target)
88
88
 
89
89
  tokenize_target.seek(0)
90
90
 
91
- tokens = []
92
91
  last_line = 1
93
92
  last_col = 0
94
93
  end_offset = 0
@@ -106,20 +105,20 @@ class Tokenization:
106
105
  while cls._ESCAPED_NL_RE.search(newtok):
107
106
  ws, nl, newtok = cls._re_partition(cls._ESCAPED_NL_RE, newtok)
108
107
  if ws:
109
- tokens.append(Token(TokenNames.UNIMPORTANT_WS, ws, last_line, end_offset))
108
+ yield Token(TokenNames.UNIMPORTANT_WS, ws, last_line, end_offset)
110
109
  end_offset += len(ws.encode())
111
- tokens.append(Token(TokenNames.ESCAPED_NL, nl, last_line, end_offset))
110
+ yield Token(TokenNames.ESCAPED_NL, nl, last_line, end_offset)
112
111
  end_offset = 0
113
112
  last_line += 1
114
113
  if newtok:
115
- tokens.append(Token(TokenNames.UNIMPORTANT_WS, newtok, sline, 0))
114
+ yield Token(TokenNames.UNIMPORTANT_WS, newtok, sline, 0)
116
115
  end_offset = len(newtok.encode())
117
116
  else:
118
117
  end_offset = 0
119
118
 
120
119
  elif scol > last_col:
121
120
  newtok = line[last_col:scol]
122
- tokens.append(Token(TokenNames.UNIMPORTANT_WS, newtok, sline, end_offset))
121
+ yield Token(TokenNames.UNIMPORTANT_WS, newtok, sline, end_offset)
123
122
  end_offset += len(newtok.encode())
124
123
 
125
124
  tok_name = tokenize.tok_name[tok_type]
@@ -130,14 +129,16 @@ class Tokenization:
130
129
  ecol += len(new_tok_text) - len(tok_text)
131
130
  tok_text = new_tok_text
132
131
 
133
- tokens.append(Token(tok_name, tok_text, sline, end_offset))
132
+ yield Token(tok_name, tok_text, sline, end_offset)
134
133
  last_line, last_col = eline, ecol
135
134
  if sline != eline:
136
135
  end_offset = len(lines[last_line][:last_col].encode())
137
136
  else:
138
137
  end_offset += len(tok_text.encode())
139
138
 
140
- return tokens
139
+ @classmethod
140
+ def src_to_tokens(cls, src: str) -> ta.List[Token]:
141
+ return list(cls.iter_src_to_tokens(src))
141
142
 
142
143
  @classmethod
143
144
  def parse_string_literal(cls, src: str) -> ta.Tuple[str, str]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev285
3
+ Version: 0.0.0.dev286
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev285
15
+ Requires-Dist: omlish==0.0.0.dev286
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -208,6 +208,7 @@ omdev/py/attrdocs.py
208
208
  omdev/py/bracepy.py
209
209
  omdev/py/classdot.py
210
210
  omdev/py/findimports.py
211
+ omdev/py/srcheaders.py
211
212
  omdev/py/scripts/__init__.py
212
213
  omdev/py/scripts/bumpversion.py
213
214
  omdev/py/scripts/execrss.py
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev285
1
+ omlish==0.0.0.dev286
2
2
 
3
3
  [all]
4
4
  black~=25.1
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '>=3.12'
15
- version = '0.0.0.dev285'
15
+ version = '0.0.0.dev286'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omdev'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev285',
25
+ 'omlish == 0.0.0.dev286',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes