semantifold 0.1.1 → 0.3.0

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 (399) hide show
  1. package/README.md +42 -10
  2. package/build/index.d.ts +32 -3
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +99 -4
  5. package/build/src/acceptance.d.ts +32 -0
  6. package/build/src/acceptance.d.ts.map +1 -0
  7. package/build/src/acceptance.js +358 -0
  8. package/build/src/array.d.ts +7 -0
  9. package/build/src/array.d.ts.map +1 -0
  10. package/build/src/array.js +18 -0
  11. package/build/src/artifact-path.d.ts +13 -0
  12. package/build/src/artifact-path.d.ts.map +1 -0
  13. package/build/src/artifact-path.js +30 -0
  14. package/build/src/artifacts.d.ts +7 -0
  15. package/build/src/artifacts.d.ts.map +1 -0
  16. package/build/src/artifacts.js +389 -0
  17. package/build/src/backends/c-runtime.d.ts +3 -0
  18. package/build/src/backends/c-runtime.d.ts.map +1 -0
  19. package/build/src/backends/c-runtime.js +151 -0
  20. package/build/src/backends/c-validation.d.ts +12 -0
  21. package/build/src/backends/c-validation.d.ts.map +1 -0
  22. package/build/src/backends/c-validation.js +85 -0
  23. package/build/src/backends/c.d.ts +31 -0
  24. package/build/src/backends/c.d.ts.map +1 -0
  25. package/build/src/backends/c.js +308 -0
  26. package/build/src/backends/cpp-runtime.d.ts +3 -0
  27. package/build/src/backends/cpp-runtime.d.ts.map +1 -0
  28. package/build/src/backends/cpp-runtime.js +99 -0
  29. package/build/src/backends/cpp-validation.d.ts +9 -0
  30. package/build/src/backends/cpp-validation.d.ts.map +1 -0
  31. package/build/src/backends/cpp-validation.js +74 -0
  32. package/build/src/backends/cpp.d.ts +16 -0
  33. package/build/src/backends/cpp.d.ts.map +1 -0
  34. package/build/src/backends/cpp.js +285 -0
  35. package/build/src/backends/csharp.d.ts +20 -0
  36. package/build/src/backends/csharp.d.ts.map +1 -0
  37. package/build/src/backends/csharp.js +259 -0
  38. package/build/src/backends/go.d.ts +20 -0
  39. package/build/src/backends/go.d.ts.map +1 -0
  40. package/build/src/backends/go.js +374 -0
  41. package/build/src/backends/identifiers.d.ts +12 -0
  42. package/build/src/backends/identifiers.d.ts.map +1 -1
  43. package/build/src/backends/identifiers.js +79 -2
  44. package/build/src/backends/index.d.ts.map +1 -1
  45. package/build/src/backends/index.js +27 -37
  46. package/build/src/backends/native-validation.d.ts +9 -0
  47. package/build/src/backends/native-validation.d.ts.map +1 -0
  48. package/build/src/backends/native-validation.js +59 -0
  49. package/build/src/backends/ordered-expressions.d.ts +74 -0
  50. package/build/src/backends/ordered-expressions.d.ts.map +1 -0
  51. package/build/src/backends/ordered-expressions.js +159 -0
  52. package/build/src/backends/python.d.ts +8 -0
  53. package/build/src/backends/python.d.ts.map +1 -0
  54. package/build/src/backends/python.js +162 -0
  55. package/build/src/backends/scalars.d.ts.map +1 -1
  56. package/build/src/backends/scalars.js +8 -2
  57. package/build/src/backends/shared.d.ts.map +1 -1
  58. package/build/src/backends/shared.js +67 -19
  59. package/build/src/binary-mapping.d.ts +32 -0
  60. package/build/src/binary-mapping.d.ts.map +1 -0
  61. package/build/src/binary-mapping.js +285 -0
  62. package/build/src/diagnostic.d.ts +36 -4
  63. package/build/src/diagnostic.d.ts.map +1 -1
  64. package/build/src/diagnostic.js +42 -3
  65. package/build/src/frontends/c-parser.d.ts +20 -0
  66. package/build/src/frontends/c-parser.d.ts.map +1 -0
  67. package/build/src/frontends/c-parser.js +14 -0
  68. package/build/src/frontends/c.d.ts +220 -0
  69. package/build/src/frontends/c.d.ts.map +1 -0
  70. package/build/src/frontends/c.js +750 -0
  71. package/build/src/frontends/cpp-parser.d.ts +11 -0
  72. package/build/src/frontends/cpp-parser.d.ts.map +1 -0
  73. package/build/src/frontends/cpp-parser.js +15 -0
  74. package/build/src/frontends/cpp.d.ts +227 -0
  75. package/build/src/frontends/cpp.d.ts.map +1 -0
  76. package/build/src/frontends/cpp.js +784 -0
  77. package/build/src/frontends/csharp.d.ts +14 -0
  78. package/build/src/frontends/csharp.d.ts.map +1 -0
  79. package/build/src/frontends/csharp.js +708 -0
  80. package/build/src/frontends/go.d.ts +15 -0
  81. package/build/src/frontends/go.d.ts.map +1 -0
  82. package/build/src/frontends/go.js +712 -0
  83. package/build/src/frontends/index.d.ts.map +1 -1
  84. package/build/src/frontends/index.js +5 -23
  85. package/build/src/frontends/python.d.ts +14 -0
  86. package/build/src/frontends/python.d.ts.map +1 -0
  87. package/build/src/frontends/python.js +615 -0
  88. package/build/src/frontends/scalars.d.ts.map +1 -1
  89. package/build/src/frontends/scalars.js +21 -1
  90. package/build/src/language-registry.d.ts +113 -0
  91. package/build/src/language-registry.d.ts.map +1 -0
  92. package/build/src/language-registry.js +421 -0
  93. package/build/src/mapping.js +3 -2
  94. package/build/src/semantic/location.d.ts +7 -0
  95. package/build/src/semantic/location.d.ts.map +1 -1
  96. package/build/src/semantic/location.js +10 -1
  97. package/build/src/semantic/provenance.js +3 -3
  98. package/build/src/semantic/types.d.ts +399 -2
  99. package/build/src/semantic/types.d.ts.map +1 -1
  100. package/build/src/semantic/types.js +110 -2
  101. package/build/src/subprocess.d.ts +38 -0
  102. package/build/src/subprocess.d.ts.map +1 -0
  103. package/build/src/subprocess.js +233 -0
  104. package/build/src/timeout.d.ts +8 -0
  105. package/build/src/timeout.d.ts.map +1 -0
  106. package/build/src/timeout.js +11 -0
  107. package/build/src/toolchains.d.ts +107 -0
  108. package/build/src/toolchains.d.ts.map +1 -0
  109. package/build/src/toolchains.js +417 -0
  110. package/docs/architecture.md +23 -5
  111. package/docs/c.md +60 -0
  112. package/docs/cpp.md +61 -0
  113. package/docs/goals.md +4 -2
  114. package/docs/language-support.md +46 -6
  115. package/docs/parser-qualification.md +219 -0
  116. package/docs/plans/2026-09-05-standard-library-portability.md +46 -0
  117. package/docs/source-maps.md +38 -5
  118. package/docs/standard-library-portability.md +190 -0
  119. package/docs/testing.md +131 -3
  120. package/index.js +109 -4
  121. package/node_modules/node-addon-api/LICENSE.md +9 -0
  122. package/node_modules/node-addon-api/README.md +95 -0
  123. package/node_modules/node-addon-api/common.gypi +21 -0
  124. package/node_modules/node-addon-api/except.gypi +25 -0
  125. package/node_modules/node-addon-api/index.js +14 -0
  126. package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  127. package/node_modules/node-addon-api/napi-inl.h +7250 -0
  128. package/node_modules/node-addon-api/napi.h +3463 -0
  129. package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
  130. package/node_modules/node-addon-api/node_api.gyp +9 -0
  131. package/node_modules/node-addon-api/noexcept.gypi +26 -0
  132. package/node_modules/node-addon-api/nothing.c +0 -0
  133. package/node_modules/node-addon-api/package-support.json +21 -0
  134. package/node_modules/node-addon-api/package.json +481 -0
  135. package/node_modules/node-addon-api/tools/README.md +73 -0
  136. package/node_modules/node-addon-api/tools/check-napi.js +99 -0
  137. package/node_modules/node-addon-api/tools/clang-format.js +71 -0
  138. package/node_modules/node-addon-api/tools/conversion.js +301 -0
  139. package/node_modules/node-gyp-build/LICENSE +21 -0
  140. package/node_modules/node-gyp-build/README.md +58 -0
  141. package/node_modules/node-gyp-build/SECURITY.md +5 -0
  142. package/node_modules/node-gyp-build/bin.js +84 -0
  143. package/node_modules/node-gyp-build/build-test.js +19 -0
  144. package/node_modules/node-gyp-build/index.js +6 -0
  145. package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  146. package/node_modules/node-gyp-build/optional.js +7 -0
  147. package/node_modules/node-gyp-build/package.json +43 -0
  148. package/node_modules/semantifold-tree-sitter-legacy-internal/LICENSE +15 -0
  149. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +7 -0
  150. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/LICENSE +21 -0
  151. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/README.md +90 -0
  152. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/binding.gyp +79 -0
  153. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/index.js +895 -0
  154. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/package.json +62 -0
  155. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  156. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  157. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  158. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  159. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
  160. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/binding.cc +35 -0
  161. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
  162. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.h +22 -0
  163. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.cc +106 -0
  164. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.h +17 -0
  165. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.cc +70 -0
  166. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.h +19 -0
  167. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  168. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  169. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.cc +1056 -0
  170. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.h +30 -0
  171. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.cc +298 -0
  172. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.h +35 -0
  173. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.cc +383 -0
  174. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.h +39 -0
  175. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.cc +307 -0
  176. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.h +45 -0
  177. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  178. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  179. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/tree-sitter.d.ts +211 -0
  180. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1266 -0
  181. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  182. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  183. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +290 -0
  184. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  185. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  186. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  187. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
  188. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  189. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  190. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +221 -0
  191. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +299 -0
  192. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  193. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +419 -0
  194. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
  195. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +14 -0
  196. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +774 -0
  197. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2151 -0
  198. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +230 -0
  199. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
  200. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4134 -0
  201. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  202. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  203. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
  204. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  205. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1060 -0
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +382 -0
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +165 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +714 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +50 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +23 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1294 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1823 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/LICENSE +21 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/README.md +18 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/binding.gyp +29 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding.cc +20 -0
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding_test.js +9 -0
  231. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.d.ts +28 -0
  232. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.js +11 -0
  233. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/grammar.js +1470 -0
  234. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/package.json +60 -0
  235. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-arm64/tree-sitter-c.node +0 -0
  236. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-x64/tree-sitter-c.node +0 -0
  237. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-arm64/tree-sitter-c.node +0 -0
  238. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-x64/tree-sitter-c.node +0 -0
  239. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-arm64/tree-sitter-c.node +0 -0
  240. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-x64/tree-sitter-c.node +0 -0
  241. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/highlights.scm +81 -0
  242. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/tags.scm +9 -0
  243. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/grammar.json +9735 -0
  244. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/node-types.json +4614 -0
  245. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/parser.c +119615 -0
  246. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/alloc.h +54 -0
  247. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/array.h +290 -0
  248. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/parser.h +266 -0
  249. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter-c.wasm +0 -0
  250. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter.json +43 -0
  251. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/LICENSE +21 -0
  252. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/README.md +22 -0
  253. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/binding.gyp +30 -0
  254. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding.cc +20 -0
  255. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding_test.js +9 -0
  256. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.d.ts +28 -0
  257. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.js +11 -0
  258. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/grammar.js +1436 -0
  259. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/package.json +61 -0
  260. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-arm64/tree-sitter-cpp.node +0 -0
  261. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-x64/tree-sitter-cpp.node +0 -0
  262. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-arm64/tree-sitter-cpp.node +0 -0
  263. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-x64/tree-sitter-cpp.node +0 -0
  264. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-arm64/tree-sitter-cpp.node +0 -0
  265. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-x64/tree-sitter-cpp.node +0 -0
  266. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/highlights.scm +70 -0
  267. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/injections.scm +3 -0
  268. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/tags.scm +15 -0
  269. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/grammar.json +17084 -0
  270. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/node-types.json +7997 -0
  271. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/parser.c +530368 -0
  272. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/scanner.c +148 -0
  273. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/alloc.h +54 -0
  274. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/array.h +290 -0
  275. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/parser.h +266 -0
  276. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter-cpp.wasm +0 -0
  277. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter.json +55 -0
  278. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +22 -0
  279. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +152 -0
  280. package/node_modules/tree-sitter/LICENSE +21 -0
  281. package/node_modules/tree-sitter/README.md +128 -0
  282. package/node_modules/tree-sitter/binding.gyp +88 -0
  283. package/node_modules/tree-sitter/index.js +950 -0
  284. package/node_modules/tree-sitter/package.json +76 -0
  285. package/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  286. package/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  287. package/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
  288. package/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  289. package/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
  290. package/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  291. package/node_modules/tree-sitter/src/addon_data.h +47 -0
  292. package/node_modules/tree-sitter/src/binding.cc +35 -0
  293. package/node_modules/tree-sitter/src/conversions.cc +140 -0
  294. package/node_modules/tree-sitter/src/conversions.h +22 -0
  295. package/node_modules/tree-sitter/src/language.cc +105 -0
  296. package/node_modules/tree-sitter/src/language.h +17 -0
  297. package/node_modules/tree-sitter/src/logger.cc +70 -0
  298. package/node_modules/tree-sitter/src/logger.h +19 -0
  299. package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  300. package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  301. package/node_modules/tree-sitter/src/node.cc +1088 -0
  302. package/node_modules/tree-sitter/src/node.h +30 -0
  303. package/node_modules/tree-sitter/src/parser.cc +332 -0
  304. package/node_modules/tree-sitter/src/parser.h +35 -0
  305. package/node_modules/tree-sitter/src/query.cc +425 -0
  306. package/node_modules/tree-sitter/src/query.h +40 -0
  307. package/node_modules/tree-sitter/src/tree.cc +316 -0
  308. package/node_modules/tree-sitter/src/tree.h +45 -0
  309. package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  310. package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  311. package/node_modules/tree-sitter/tree-sitter.d.ts +1083 -0
  312. package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
  313. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  314. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  315. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
  316. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  317. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  318. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  319. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
  320. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  321. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  322. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
  323. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
  324. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  325. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
  326. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
  327. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
  328. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
  329. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2297 -0
  330. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
  331. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
  332. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +241 -0
  333. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4347 -0
  334. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  335. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  336. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +912 -0
  337. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  338. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
  339. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
  340. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
  341. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  342. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +716 -0
  343. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  344. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
  345. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  346. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  347. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  348. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  349. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  350. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  351. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  352. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  353. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  354. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
  355. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
  356. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +137 -0
  357. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
  358. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1937 -0
  359. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  360. package/package.json +24 -6
  361. package/src/acceptance.js +380 -0
  362. package/src/array.js +19 -0
  363. package/src/artifact-path.js +34 -0
  364. package/src/artifacts.js +420 -0
  365. package/src/backends/c-runtime.js +151 -0
  366. package/src/backends/c-validation.js +83 -0
  367. package/src/backends/c.js +308 -0
  368. package/src/backends/cpp-runtime.js +99 -0
  369. package/src/backends/cpp-validation.js +70 -0
  370. package/src/backends/cpp.js +285 -0
  371. package/src/backends/csharp.js +270 -0
  372. package/src/backends/go.js +383 -0
  373. package/src/backends/identifiers.js +80 -1
  374. package/src/backends/index.js +23 -32
  375. package/src/backends/native-validation.js +64 -0
  376. package/src/backends/ordered-expressions.js +161 -0
  377. package/src/backends/python.js +175 -0
  378. package/src/backends/scalars.js +8 -1
  379. package/src/backends/shared.js +64 -17
  380. package/src/binary-mapping.js +305 -0
  381. package/src/diagnostic.js +34 -2
  382. package/src/frontends/c-parser.js +17 -0
  383. package/src/frontends/c.js +780 -0
  384. package/src/frontends/cpp-parser.js +18 -0
  385. package/src/frontends/cpp.js +816 -0
  386. package/src/frontends/csharp.js +759 -0
  387. package/src/frontends/go.js +770 -0
  388. package/src/frontends/index.js +5 -20
  389. package/src/frontends/python.js +689 -0
  390. package/src/frontends/scalars.js +20 -0
  391. package/src/language-registry.js +454 -0
  392. package/src/mapping.js +2 -1
  393. package/src/semantic/location.js +10 -0
  394. package/src/semantic/provenance.js +2 -2
  395. package/src/semantic/types.js +124 -1
  396. package/src/subprocess.js +232 -0
  397. package/src/timeout.js +12 -0
  398. package/src/toolchains.js +448 -0
  399. package/tsconfig.json +1 -0
@@ -0,0 +1,307 @@
1
+ #include "./tree.h"
2
+ #include "./addon_data.h"
3
+ #include "./conversions.h"
4
+ #include "./node.h"
5
+
6
+ #include <napi.h>
7
+
8
+ using namespace Napi;
9
+
10
+ namespace node_tree_sitter {
11
+
12
+ /*
13
+ tstag() {
14
+ b2sum -l64 <(printf tree-sitter) <(printf "$1") | \
15
+ awk '{printf "0x" toupper($1) (NR == 1 ? ", " : "\n")}'
16
+ }
17
+ tstag tree # => 0x8AF2E5212AD58ABF, 0x7FA28BFC1966AC2D
18
+ */
19
+ const napi_type_tag TREE_TYPE_TAG = {
20
+ 0x8AF2E5212AD58ABF, 0x7FA28BFC1966AC2D
21
+ };
22
+
23
+ using node_methods::UnmarshalNodeId;
24
+
25
+ void Tree::Init(Napi::Env env, Napi::Object exports) {
26
+ auto *data = env.GetInstanceData<AddonData>();
27
+
28
+ Function ctor = DefineClass(env, "Tree", {
29
+ InstanceMethod("edit", &Tree::Edit, napi_default_method),
30
+ InstanceMethod("rootNode", &Tree::RootNode, napi_default_method),
31
+ InstanceMethod("rootNodeWithOffset", &Tree::RootNodeWithOffset, napi_default_method),
32
+ InstanceMethod("printDotGraph", &Tree::PrintDotGraph, napi_default_method),
33
+ InstanceMethod("getChangedRanges", &Tree::GetChangedRanges, napi_default_method),
34
+ InstanceMethod("getIncludedRanges", &Tree::GetIncludedRanges, napi_default_method),
35
+ InstanceMethod("getEditedRange", &Tree::GetEditedRange, napi_default_method),
36
+ InstanceMethod("_cacheNode", &Tree::CacheNode, napi_default_method),
37
+ InstanceMethod("_cacheNodes", &Tree::CacheNodes, napi_default_method),
38
+ });
39
+
40
+ data->tree_constructor = Napi::Persistent(ctor);
41
+ exports["Tree"] = ctor;
42
+ }
43
+
44
+ Tree::Tree(const Napi::CallbackInfo &info) : Napi::ObjectWrap<Tree>(info), tree_(nullptr) {
45
+ Value().TypeTag(&TREE_TYPE_TAG);
46
+ }
47
+
48
+ Tree::~Tree() {
49
+ ts_tree_delete(tree_);
50
+ for (auto &entry : cached_nodes_) {
51
+ entry.second->tree = nullptr;
52
+ }
53
+ }
54
+
55
+ Napi::Value Tree::NewInstance(Napi::Env env, TSTree *tree) {
56
+ auto *data = env.GetInstanceData<AddonData>();
57
+ if (tree != nullptr) {
58
+ Object self = data->tree_constructor.New({});
59
+ Tree::Unwrap(self)->tree_ = tree;
60
+ return self;
61
+ }
62
+
63
+ return env.Null();
64
+ }
65
+
66
+ const Tree *Tree::UnwrapTree(const Napi::Value &value) {
67
+ if (!value.IsObject()) {
68
+ return nullptr;
69
+ }
70
+ auto js_tree = value.As<Object>();
71
+ if (!js_tree.CheckTypeTag(&TREE_TYPE_TAG)) {
72
+ return nullptr;
73
+ }
74
+ return Tree::Unwrap(js_tree);
75
+ }
76
+
77
+ #define read_number_from_js(out, value, name) \
78
+ if (!(value).IsNumber()) { \
79
+ throw TypeError::New(env, name " must be an integer"); \
80
+ return env.Undefined(); \
81
+ } \
82
+ *(out) = (value).As<Number>().Uint32Value();
83
+
84
+ #define read_byte_count_from_js(out, value, name) \
85
+ read_number_from_js(out, value, name); \
86
+ (*(out)) *= 2
87
+
88
+ Napi::Value Tree::Edit(const Napi::CallbackInfo &info) {
89
+ Napi::Env env = info.Env();
90
+ TSInputEdit edit;
91
+ read_number_from_js(&edit.start_point.row, info[0], "startPosition.row");
92
+ read_byte_count_from_js(&edit.start_point.column, info[1], "startPosition.column");
93
+ read_number_from_js(&edit.old_end_point.row, info[2], "oldEndPosition.row");
94
+ read_byte_count_from_js(&edit.old_end_point.column, info[3], "oldEndPosition.column");
95
+ read_number_from_js(&edit.new_end_point.row, info[4], "newEndPosition.row");
96
+ read_byte_count_from_js(&edit.new_end_point.column, info[5], "newEndPosition.column");
97
+ read_byte_count_from_js(&edit.start_byte, info[6], "startIndex");
98
+ read_byte_count_from_js(&edit.old_end_byte, info[7], "oldEndIndex");
99
+ read_byte_count_from_js(&edit.new_end_byte, info[8], "newEndIndex");
100
+
101
+ ts_tree_edit(tree_, &edit);
102
+
103
+ for (auto &entry : cached_nodes_) {
104
+ Object js_node = entry.second->node.Value();
105
+ if (js_node.IsEmpty()) {
106
+ continue;
107
+ }
108
+ TSNode node;
109
+ node.id = entry.first;
110
+ for (unsigned i = 0; i < 4; i++) {
111
+ Napi::Value node_field = js_node[i + 2];
112
+ if (node_field.IsNumber()) {
113
+ node.context[i] = node_field.As<Number>().Uint32Value();
114
+ }
115
+ }
116
+
117
+ ts_node_edit(&node, &edit);
118
+
119
+ for (unsigned i = 0; i < 4; i++) {
120
+ js_node[i + 2U] = Number::New(env, node.context[i]);
121
+ }
122
+ }
123
+
124
+ return info.This();
125
+ }
126
+
127
+ Napi::Value Tree::RootNode(const Napi::CallbackInfo &info) {
128
+ return node_methods::MarshalNode(info, this, ts_tree_root_node(tree_));
129
+ }
130
+
131
+ Napi::Value Tree::RootNodeWithOffset(const Napi::CallbackInfo &info) {
132
+ Napi::Env env = info.Env();
133
+ uint32_t offset_bytes = 0;
134
+ TSPoint offset_extent = {0, UINT32_MAX};
135
+
136
+ read_byte_count_from_js(&offset_bytes, info[0], "offsetBytes");
137
+ read_number_from_js(&offset_extent.row, info[1], "offsetExtent.row");
138
+ read_byte_count_from_js(&offset_extent.column, info[2], "offsetExtent.column");
139
+
140
+ return node_methods::MarshalNode(info, this, ts_tree_root_node_with_offset(tree_, offset_bytes, offset_extent));
141
+ }
142
+
143
+ Napi::Value Tree::GetChangedRanges(const Napi::CallbackInfo &info) {
144
+ Napi::Env env = info.Env();
145
+ const Tree *other_tree = UnwrapTree(info[0]);
146
+ if (other_tree == nullptr) {
147
+ throw TypeError::New(env, "Argument must be a tree");
148
+ }
149
+
150
+ uint32_t range_count;
151
+ TSRange *ranges = ts_tree_get_changed_ranges(tree_, other_tree->tree_, &range_count);
152
+
153
+ Array result = Array::New(env);
154
+ for (size_t i = 0; i < range_count; i++) {
155
+ result[i] = RangeToJS(env, ranges[i]);
156
+ }
157
+
158
+ free(ranges);
159
+
160
+ return result;
161
+ }
162
+
163
+ Napi::Value Tree::GetIncludedRanges(const Napi::CallbackInfo &info) {
164
+ Napi::Env env = info.Env();
165
+ uint32_t range_count;
166
+ TSRange *ranges = ts_tree_included_ranges(tree_, &range_count);
167
+
168
+ Array result = Array::New(env);
169
+ for (size_t i = 0; i < range_count; i++) {
170
+ result[i] = RangeToJS(env, ranges[i]);
171
+ }
172
+
173
+ free(ranges);
174
+
175
+ return result;
176
+ }
177
+
178
+ Napi::Value Tree::GetEditedRange(const Napi::CallbackInfo &info) {
179
+ Napi::Env env = info.Env();
180
+ TSNode root = ts_tree_root_node(tree_);
181
+ if (!ts_node_has_changes(root)) {
182
+ return env.Undefined();
183
+ }
184
+ TSRange result = {
185
+ ts_node_start_point(root),
186
+ ts_node_end_point(root),
187
+ ts_node_start_byte(root),
188
+ ts_node_end_byte(root),
189
+ };
190
+
191
+ TSTreeCursor cursor = ts_tree_cursor_new(root);
192
+
193
+ while (true) {
194
+ if (!ts_tree_cursor_goto_first_child(&cursor)) {
195
+ break;
196
+ }
197
+ while (true) {
198
+ TSNode node = ts_tree_cursor_current_node(&cursor);
199
+ if (ts_node_has_changes(node)) {
200
+ result.start_byte = ts_node_start_byte(node);
201
+ result.start_point = ts_node_start_point(node);
202
+ break;
203
+ }
204
+ if (!ts_tree_cursor_goto_next_sibling(&cursor)) {
205
+ break;
206
+ }
207
+ }
208
+ }
209
+
210
+ while (ts_tree_cursor_goto_parent(&cursor)) {}
211
+
212
+ while (true) {
213
+ if (!ts_tree_cursor_goto_first_child(&cursor)) {
214
+ break;
215
+ }
216
+ while (true) {
217
+ TSNode node = ts_tree_cursor_current_node(&cursor);
218
+ if (ts_node_has_changes(node)) {
219
+ result.end_byte = ts_node_end_byte(node);
220
+ result.end_point = ts_node_end_point(node);
221
+ }
222
+
223
+ if (!ts_tree_cursor_goto_next_sibling(&cursor)) {
224
+ break;
225
+ }
226
+ }
227
+ }
228
+
229
+ ts_tree_cursor_delete(&cursor);
230
+ return RangeToJS(env, result);
231
+ }
232
+
233
+ Napi::Value Tree::PrintDotGraph(const Napi::CallbackInfo &info) {
234
+ ts_tree_print_dot_graph(tree_, fileno(stderr));
235
+ return info.This();
236
+ }
237
+
238
+ namespace {
239
+
240
+ void FinalizeNode(Napi::Env _env, Tree::NodeCacheEntry *cache_entry) {
241
+ assert(!cache_entry->node.IsEmpty());
242
+ cache_entry->node.Reset();
243
+ if (cache_entry->tree != nullptr) {
244
+ assert(cache_entry->tree->cached_nodes_.count(cache_entry->key));
245
+ cache_entry->tree->cached_nodes_.erase(cache_entry->key);
246
+ }
247
+ delete cache_entry;
248
+ }
249
+
250
+ void CacheNodeForTree(Tree *tree, Napi::Env _env, Object js_node) {
251
+ Value js_node_field1 = js_node[0U];
252
+ Value js_node_field2 = js_node[1U];
253
+ if (!js_node_field1.IsNumber() || !js_node_field2.IsNumber()) {
254
+ return;
255
+ }
256
+ uint32_t key_parts[2] = {
257
+ js_node_field1.As<Number>().Uint32Value(),
258
+ js_node_field2.As<Number>().Uint32Value(),
259
+ };
260
+ const void *key = UnmarshalNodeId(key_parts);
261
+
262
+ // A Node could have been garbage collected but the finalizer has not yet run to remove its cache entry
263
+ if (tree->cached_nodes_.count(key)) {
264
+ return;
265
+ }
266
+
267
+ auto *cache_entry = new Tree::NodeCacheEntry{tree, key, {}};
268
+ cache_entry->node = Napi::Weak(js_node);
269
+ js_node.AddFinalizer(&FinalizeNode, cache_entry);
270
+
271
+ tree->cached_nodes_[key] = cache_entry;
272
+ }
273
+
274
+ } // namespace
275
+
276
+ Napi::Value Tree::CacheNode(const Napi::CallbackInfo &info) {
277
+ Napi::Env env = info.Env();
278
+
279
+ if (!info[0].IsObject()) {
280
+ throw TypeError::New(env, "not an object");
281
+ }
282
+
283
+ CacheNodeForTree(this, env, info[0].As<Object>());
284
+ return env.Undefined();
285
+ }
286
+
287
+ Napi::Value Tree::CacheNodes(const Napi::CallbackInfo &info) {
288
+ Napi::Env env = info.Env();
289
+
290
+ if (!info[0].IsArray()) {
291
+ throw TypeError::New(env, "not an array");
292
+ }
293
+ auto js_nodes = info[0].As<Array>();
294
+ uint32_t length = js_nodes.Length();
295
+
296
+ for (uint32_t i = 0; i < length; ++i) {
297
+ Napi::Value js_node = js_nodes[i];
298
+ if (!js_node.IsObject()) {
299
+ throw TypeError::New(env, "not an object");
300
+ }
301
+ CacheNodeForTree(this, env, js_node.As<Object>());
302
+ }
303
+
304
+ return env.Undefined();
305
+ }
306
+
307
+ } // namespace node_tree_sitter
@@ -0,0 +1,45 @@
1
+ #ifndef NODE_TREE_SITTER_TREE_H_
2
+ #define NODE_TREE_SITTER_TREE_H_
3
+
4
+ #include "./addon_data.h"
5
+ #include "tree_sitter/api.h"
6
+
7
+ #include <napi.h>
8
+ #include <node_object_wrap.h>
9
+ #include <unordered_map>
10
+
11
+ namespace node_tree_sitter {
12
+
13
+ class Tree final : public Napi::ObjectWrap<Tree> {
14
+ public:
15
+ static void Init(Napi::Env env, Napi::Object exports);
16
+ static Napi::Value NewInstance(Napi::Env env, TSTree *tree);
17
+ static const Tree *UnwrapTree(const Napi::Value &value);
18
+
19
+ explicit Tree(const Napi::CallbackInfo &);
20
+ ~Tree() final;
21
+
22
+ struct NodeCacheEntry {
23
+ Tree *tree;
24
+ const void *key;
25
+ Napi::ObjectReference node;
26
+ };
27
+
28
+ TSTree *tree_;
29
+ std::unordered_map<const void *, NodeCacheEntry *> cached_nodes_;
30
+
31
+ private:
32
+ Napi::Value Edit(const Napi::CallbackInfo &info);
33
+ Napi::Value RootNode(const Napi::CallbackInfo &info);
34
+ Napi::Value RootNodeWithOffset(const Napi::CallbackInfo &info);
35
+ Napi::Value PrintDotGraph(const Napi::CallbackInfo &info);
36
+ Napi::Value GetEditedRange(const Napi::CallbackInfo &info);
37
+ Napi::Value GetChangedRanges(const Napi::CallbackInfo &info);
38
+ Napi::Value GetIncludedRanges(const Napi::CallbackInfo &info);
39
+ Napi::Value CacheNode(const Napi::CallbackInfo &info);
40
+ Napi::Value CacheNodes(const Napi::CallbackInfo &info);
41
+ };
42
+
43
+ } // namespace node_tree_sitter
44
+
45
+ #endif // NODE_TREE_SITTER_TREE_H_
@@ -0,0 +1,213 @@
1
+ #include "./conversions.h"
2
+ #include "./node.h"
3
+ #include "./tree.h"
4
+ #include "./tree_cursor.h"
5
+ #include "tree_sitter/api.h"
6
+
7
+ #include <napi.h>
8
+
9
+ using namespace Napi;
10
+
11
+ namespace node_tree_sitter {
12
+
13
+ void TreeCursor::Init(Napi::Env env, Napi::Object exports) {
14
+ auto *data = env.GetInstanceData<AddonData>();
15
+
16
+ Function ctor = DefineClass(env, "TreeCursor", {
17
+ InstanceAccessor("startIndex", &TreeCursor::StartIndex, nullptr, napi_default_method),
18
+ InstanceAccessor("endIndex", &TreeCursor::EndIndex, nullptr, napi_default_method),
19
+ InstanceAccessor("nodeType", &TreeCursor::NodeType, nullptr, napi_default_method),
20
+ InstanceAccessor("nodeTypeId", &TreeCursor::NodeTypeId, nullptr, napi_default_method),
21
+ InstanceAccessor("nodeStateId", &TreeCursor::NodeStateId, nullptr, napi_default_method),
22
+ InstanceAccessor("nodeIsNamed", &TreeCursor::NodeIsNamed, nullptr, napi_default_method),
23
+ InstanceAccessor("nodeIsMissing", &TreeCursor::NodeIsMissing, nullptr, napi_default_method),
24
+ InstanceAccessor("currentFieldId", &TreeCursor::CurrentFieldId, nullptr, napi_default_method),
25
+ InstanceAccessor("currentFieldName", &TreeCursor::CurrentFieldName, nullptr, napi_default_method),
26
+ InstanceAccessor("currentDepth", &TreeCursor::CurrentDepth, nullptr, napi_default_method),
27
+ InstanceAccessor("currentDescendantIndex", &TreeCursor::CurrentDescendantIndex, nullptr, napi_default_method),
28
+
29
+ InstanceMethod("gotoFirstChild", &TreeCursor::GotoFirstChild, napi_default_method),
30
+ InstanceMethod("gotoLastChild", &TreeCursor::GotoLastChild, napi_default_method),
31
+ InstanceMethod("gotoParent", &TreeCursor::GotoParent, napi_default_method),
32
+ InstanceMethod("gotoNextSibling", &TreeCursor::GotoNextSibling, napi_default_method),
33
+ InstanceMethod("gotoPreviousSibling", &TreeCursor::GotoPreviousSibling, napi_default_method),
34
+ InstanceMethod("gotoDescendant", &TreeCursor::GotoDescendant, napi_default_method),
35
+ InstanceMethod("gotoFirstChildForIndex", &TreeCursor::GotoFirstChildForIndex, napi_default_method),
36
+ InstanceMethod("gotoFirstChildForPosition", &TreeCursor::GotoFirstChildForPosition, napi_default_method),
37
+ InstanceMethod("startPosition", &TreeCursor::StartPosition, napi_default_method),
38
+ InstanceMethod("endPosition", &TreeCursor::EndPosition, napi_default_method),
39
+ InstanceMethod("currentNode", &TreeCursor::CurrentNode, napi_default_method),
40
+ InstanceMethod("reset", &TreeCursor::Reset, napi_default_method),
41
+ InstanceMethod("resetTo", &TreeCursor::ResetTo, napi_default_method),
42
+ });
43
+
44
+ exports["TreeCursor"] = ctor;
45
+ data->tree_cursor_constructor = Napi::Persistent(ctor);
46
+ }
47
+
48
+ Napi::Value TreeCursor::NewInstance(Napi::Env env, TSTreeCursor cursor) {
49
+ auto *data = env.GetInstanceData<AddonData>();
50
+
51
+ Object self = data->tree_cursor_constructor.New({});
52
+ TreeCursor::Unwrap(self)->cursor_ = cursor;
53
+ return self;
54
+ }
55
+
56
+ TreeCursor::TreeCursor(const Napi::CallbackInfo& info) : Napi::ObjectWrap<TreeCursor>(info), cursor_() {}
57
+
58
+ TreeCursor::~TreeCursor() { ts_tree_cursor_delete(&cursor_); }
59
+
60
+ Napi::Value TreeCursor::GotoFirstChild(const Napi::CallbackInfo &info) {
61
+ bool result = ts_tree_cursor_goto_first_child(&cursor_);
62
+ return Boolean::New(info.Env(), result);
63
+ }
64
+
65
+ Napi::Value TreeCursor::GotoLastChild(const Napi::CallbackInfo &info) {
66
+ bool result = ts_tree_cursor_goto_last_child(&cursor_);
67
+ return Boolean::New(info.Env(), result);
68
+ }
69
+
70
+ Napi::Value TreeCursor::GotoParent(const Napi::CallbackInfo &info) {
71
+ bool result = ts_tree_cursor_goto_parent(&cursor_);
72
+ return Boolean::New(info.Env(), result);
73
+ }
74
+
75
+ Napi::Value TreeCursor::GotoNextSibling(const Napi::CallbackInfo &info) {
76
+ bool result = ts_tree_cursor_goto_next_sibling(&cursor_);
77
+ return Boolean::New(info.Env(), result);
78
+ }
79
+
80
+ Napi::Value TreeCursor::GotoPreviousSibling(const Napi::CallbackInfo &info) {
81
+ bool result = ts_tree_cursor_goto_previous_sibling(&cursor_);
82
+ return Boolean::New(info.Env(), result);
83
+ }
84
+
85
+ Napi::Value TreeCursor::GotoDescendant(const Napi::CallbackInfo &info) {
86
+ Napi::Env env = info.Env();
87
+ if (!info[0].IsNumber()) {
88
+ throw TypeError::New(env, "First argument must be an integer");
89
+ }
90
+ int64_t goal_descendant_index = info[0].As<Number>().Uint32Value();
91
+ ts_tree_cursor_goto_descendant(&cursor_, goal_descendant_index);
92
+ return env.Undefined();
93
+ }
94
+
95
+ Napi::Value TreeCursor::GotoFirstChildForIndex(const Napi::CallbackInfo &info) {
96
+ Napi::Env env = info.Env();
97
+ if (!info[0].IsNumber()) {
98
+ throw TypeError::New(env, "First argument must be an integer");
99
+ }
100
+ auto index = info[0].As<Number>();
101
+ uint32_t goal_byte = index.Uint32Value() * 2;
102
+ int64_t child_index = ts_tree_cursor_goto_first_child_for_byte(&cursor_, goal_byte);
103
+ if (child_index < 0) {
104
+ return env.Null();
105
+ }
106
+ return Number::New(env, static_cast<double>(child_index));
107
+
108
+ }
109
+
110
+ Napi::Value TreeCursor::GotoFirstChildForPosition(const Napi::CallbackInfo &info) {
111
+ Napi::Env env = info.Env();
112
+ Napi::Maybe<TSPoint> goal_point = PointFromJS(info[0].As<Object>());
113
+ if (goal_point.IsNothing()) {
114
+ throw TypeError::New(env, "First argument must be a Point object");
115
+ }
116
+ int64_t child_index = ts_tree_cursor_goto_first_child_for_point(&cursor_, goal_point.Unwrap());
117
+ if (child_index < 0) {
118
+ return env.Null();
119
+ }
120
+ return Number::New(env, static_cast<double>(child_index));
121
+ }
122
+
123
+ Napi::Value TreeCursor::StartPosition(const Napi::CallbackInfo &info) {
124
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
125
+ TransferPoint(info.Env(), ts_node_start_point(node));
126
+ return info.Env().Undefined();
127
+ }
128
+
129
+ Napi::Value TreeCursor::EndPosition(const Napi::CallbackInfo &info) {
130
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
131
+ TransferPoint(info.Env(), ts_node_end_point(node));
132
+ return info.Env().Undefined();
133
+ }
134
+
135
+ Napi::Value TreeCursor::CurrentNode(const Napi::CallbackInfo &info) {
136
+ const Tree *tree = Tree::UnwrapTree(info.This().As<Object>()["tree"]);
137
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
138
+ return node_methods::MarshalNode(info, tree, node);
139
+ }
140
+
141
+ Napi::Value TreeCursor::Reset(const Napi::CallbackInfo &info) {
142
+ const Tree *tree = Tree::UnwrapTree(info.This().As<Object>()["tree"]);
143
+ TSNode node = node_methods::UnmarshalNode(info.Env(), tree);
144
+ ts_tree_cursor_reset(&cursor_, node);
145
+ return info.Env().Undefined();
146
+ }
147
+
148
+ Napi::Value TreeCursor::ResetTo(const Napi::CallbackInfo &info) {
149
+ TSTreeCursor other_cursor = TreeCursor::Unwrap(info[0].As<Object>())->cursor_;
150
+ ts_tree_cursor_reset_to(&cursor_, &other_cursor);
151
+ return info.Env().Undefined();
152
+ }
153
+
154
+ Napi::Value TreeCursor::NodeType(const Napi::CallbackInfo &info) {
155
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
156
+ return String::New(info.Env(), ts_node_type(node));;
157
+ }
158
+
159
+ Napi::Value TreeCursor::NodeTypeId(const Napi::CallbackInfo &info) {
160
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
161
+ return Number::New(info.Env(), static_cast<double>(ts_node_symbol(node)));
162
+ }
163
+
164
+ Napi::Value TreeCursor::NodeStateId(const Napi::CallbackInfo &info) {
165
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
166
+ return Number::New(info.Env(), static_cast<double>(ts_node_parse_state(node)));
167
+ }
168
+
169
+ Napi::Value TreeCursor::NodeIsNamed(const Napi::CallbackInfo &info) {
170
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
171
+ return Boolean::New(info.Env(), ts_node_is_named(node));
172
+ }
173
+
174
+ Napi::Value TreeCursor::NodeIsMissing(const Napi::CallbackInfo &info) {
175
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
176
+ return Boolean::New(info.Env(), ts_node_is_missing(node));
177
+ }
178
+
179
+ Napi::Value TreeCursor::CurrentFieldId(const Napi::CallbackInfo &info) {
180
+ TSFieldId field_id = ts_tree_cursor_current_field_id(&cursor_);
181
+ if (field_id != 0) {
182
+ return Number::New(info.Env(), static_cast<double>(field_id));
183
+ }
184
+ return info.Env().Undefined();
185
+ }
186
+
187
+ Napi::Value TreeCursor::CurrentFieldName(const Napi::CallbackInfo &info) {
188
+ const char *field_name = ts_tree_cursor_current_field_name(&cursor_);
189
+ if (field_name != nullptr) {
190
+ return String::New(info.Env(), field_name);
191
+ }
192
+ return info.Env().Undefined();
193
+ }
194
+
195
+ Napi::Value TreeCursor::CurrentDepth(const Napi::CallbackInfo &info) {
196
+ return Number::New(info.Env(), static_cast<double>(ts_tree_cursor_current_depth(&cursor_)));
197
+ }
198
+
199
+ Napi::Value TreeCursor::CurrentDescendantIndex(const Napi::CallbackInfo &info) {
200
+ return Number::New(info.Env(), static_cast<double>(ts_tree_cursor_current_descendant_index(&cursor_)));
201
+ }
202
+
203
+ Napi::Value TreeCursor::StartIndex(const Napi::CallbackInfo &info) {
204
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
205
+ return ByteCountToJS(info.Env(), ts_node_start_byte(node));
206
+ }
207
+
208
+ Napi::Value TreeCursor::EndIndex(const Napi::CallbackInfo &info) {
209
+ TSNode node = ts_tree_cursor_current_node(&cursor_);
210
+ return ByteCountToJS(info.Env(), ts_node_end_byte(node));
211
+ }
212
+
213
+ } // namespace node_tree_sitter
@@ -0,0 +1,52 @@
1
+ #ifndef NODE_TREE_SITTER_TREE_CURSOR_H_
2
+ #define NODE_TREE_SITTER_TREE_CURSOR_H_
3
+
4
+ #include "./addon_data.h"
5
+ #include "tree_sitter/api.h"
6
+
7
+ #include <napi.h>
8
+ #include <node_object_wrap.h>
9
+
10
+ namespace node_tree_sitter {
11
+
12
+ class TreeCursor final : public Napi::ObjectWrap<TreeCursor> {
13
+ public:
14
+ static void Init(Napi::Env env, Napi::Object exports);
15
+ static Napi::Value NewInstance(Napi::Env Env, TSTreeCursor);
16
+
17
+ explicit TreeCursor(const Napi::CallbackInfo &);
18
+ ~TreeCursor() final;
19
+
20
+ TSTreeCursor cursor_;
21
+
22
+ private:
23
+ Napi::Value GotoFirstChild(const Napi::CallbackInfo &);
24
+ Napi::Value GotoLastChild(const Napi::CallbackInfo &);
25
+ Napi::Value GotoParent(const Napi::CallbackInfo &);
26
+ Napi::Value GotoNextSibling(const Napi::CallbackInfo &);
27
+ Napi::Value GotoPreviousSibling(const Napi::CallbackInfo &);
28
+ Napi::Value GotoDescendant(const Napi::CallbackInfo &);
29
+ Napi::Value GotoFirstChildForIndex(const Napi::CallbackInfo &);
30
+ Napi::Value GotoFirstChildForPosition(const Napi::CallbackInfo &);
31
+ Napi::Value StartPosition(const Napi::CallbackInfo &);
32
+ Napi::Value EndPosition(const Napi::CallbackInfo &);
33
+ Napi::Value CurrentNode(const Napi::CallbackInfo &);
34
+ Napi::Value Reset(const Napi::CallbackInfo &);
35
+ Napi::Value ResetTo(const Napi::CallbackInfo &);
36
+
37
+ Napi::Value NodeType(const Napi::CallbackInfo &);
38
+ Napi::Value NodeTypeId(const Napi::CallbackInfo &);
39
+ Napi::Value NodeStateId(const Napi::CallbackInfo &);
40
+ Napi::Value NodeIsNamed(const Napi::CallbackInfo &);
41
+ Napi::Value NodeIsMissing(const Napi::CallbackInfo &);
42
+ Napi::Value CurrentFieldId(const Napi::CallbackInfo &);
43
+ Napi::Value CurrentFieldName(const Napi::CallbackInfo &);
44
+ Napi::Value CurrentDepth(const Napi::CallbackInfo &);
45
+ Napi::Value CurrentDescendantIndex(const Napi::CallbackInfo &);
46
+ Napi::Value StartIndex(const Napi::CallbackInfo &);
47
+ Napi::Value EndIndex(const Napi::CallbackInfo &);
48
+ };
49
+
50
+ } // namespace node_tree_sitter
51
+
52
+ #endif // NODE_TREE_SITTER_TREE_CURSOR_H_