@eagleoutice/flowr 1.5.2 → 2.0.1

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 (570) hide show
  1. package/abstract-interpretation/handler/binop/binop.d.ts +3 -4
  2. package/abstract-interpretation/handler/binop/binop.js +4 -2
  3. package/abstract-interpretation/handler/binop/operators.d.ts +2 -2
  4. package/abstract-interpretation/handler/binop/operators.js +14 -28
  5. package/abstract-interpretation/processor.d.ts +3 -2
  6. package/abstract-interpretation/processor.js +2 -2
  7. package/benchmark/slicer.d.ts +101 -0
  8. package/benchmark/slicer.js +214 -0
  9. package/benchmark/stats/print.d.ts +7 -0
  10. package/benchmark/stats/print.js +151 -0
  11. package/benchmark/stats/stats.d.ts +42 -0
  12. package/benchmark/stats/stats.js +6 -0
  13. package/benchmark/stopwatch.d.ts +35 -0
  14. package/benchmark/stopwatch.js +79 -0
  15. package/benchmark/summarizer/data.d.ts +54 -0
  16. package/benchmark/summarizer/first-phase/input.d.ts +3 -0
  17. package/benchmark/summarizer/first-phase/input.js +76 -0
  18. package/benchmark/summarizer/first-phase/process.d.ts +11 -0
  19. package/benchmark/summarizer/first-phase/process.js +205 -0
  20. package/benchmark/summarizer/second-phase/graph.d.ts +2 -0
  21. package/benchmark/summarizer/second-phase/graph.js +54 -0
  22. package/benchmark/summarizer/second-phase/process.d.ts +6 -0
  23. package/benchmark/summarizer/second-phase/process.js +127 -0
  24. package/benchmark/summarizer/summarizer.d.ts +31 -0
  25. package/benchmark/summarizer/summarizer.js +58 -0
  26. package/cli/benchmark-app.d.ts +10 -0
  27. package/cli/benchmark-app.js +67 -0
  28. package/cli/benchmark-helper-app.d.ts +9 -0
  29. package/cli/benchmark-helper-app.js +69 -0
  30. package/cli/common/features.d.ts +3 -0
  31. package/cli/common/features.js +30 -0
  32. package/cli/common/options.d.ts +20 -0
  33. package/cli/common/options.js +85 -0
  34. package/cli/common/script.d.ts +21 -0
  35. package/cli/common/script.js +61 -0
  36. package/cli/common/scripts-info.d.ts +25 -0
  37. package/cli/common/scripts-info.js +83 -0
  38. package/cli/export-quads-app.d.ts +7 -0
  39. package/cli/export-quads-app.js +43 -0
  40. package/cli/flowr.d.ts +29 -0
  41. package/cli/flowr.js +141 -0
  42. package/cli/repl/commands/cfg.d.ts +3 -0
  43. package/cli/repl/commands/cfg.js +37 -0
  44. package/cli/repl/commands/commands.d.ts +13 -0
  45. package/cli/repl/commands/commands.js +142 -0
  46. package/cli/repl/commands/dataflow.d.ts +3 -0
  47. package/cli/repl/commands/dataflow.js +34 -0
  48. package/cli/repl/commands/execute.d.ts +4 -0
  49. package/cli/repl/commands/execute.js +27 -0
  50. package/cli/repl/commands/main.d.ts +39 -0
  51. package/cli/repl/commands/main.js +14 -0
  52. package/cli/repl/commands/normalize.d.ts +3 -0
  53. package/cli/repl/commands/normalize.js +34 -0
  54. package/cli/repl/commands/parse.d.ts +2 -0
  55. package/cli/repl/commands/parse.js +110 -0
  56. package/cli/repl/commands/quit.d.ts +2 -0
  57. package/cli/repl/commands/quit.js +15 -0
  58. package/cli/repl/commands/version.d.ts +16 -0
  59. package/cli/repl/commands/version.js +28 -0
  60. package/cli/repl/core.d.ts +36 -0
  61. package/cli/repl/core.js +174 -0
  62. package/cli/repl/execute.d.ts +28 -0
  63. package/cli/repl/execute.js +79 -0
  64. package/cli/repl/print-version.d.ts +2 -0
  65. package/cli/repl/print-version.js +10 -0
  66. package/cli/repl/prompt.d.ts +2 -0
  67. package/cli/repl/prompt.js +9 -0
  68. package/cli/repl/server/connection.d.ts +21 -0
  69. package/cli/repl/server/connection.js +218 -0
  70. package/cli/repl/server/messages/analysis.d.ts +72 -0
  71. package/cli/repl/server/messages/analysis.js +21 -0
  72. package/cli/repl/server/messages/error.d.ts +11 -0
  73. package/{core/input.js → cli/repl/server/messages/error.js} +1 -1
  74. package/cli/repl/server/messages/hello.d.ts +20 -0
  75. package/{core/output.js → cli/repl/server/messages/hello.js} +1 -1
  76. package/cli/repl/server/messages/messages.d.ts +35 -0
  77. package/cli/repl/server/messages/messages.js +40 -0
  78. package/cli/repl/server/messages/repl.d.ts +33 -0
  79. package/cli/repl/server/messages/repl.js +37 -0
  80. package/cli/repl/server/messages/slice.d.ts +26 -0
  81. package/cli/repl/server/messages/slice.js +37 -0
  82. package/cli/repl/server/net.d.ts +49 -0
  83. package/cli/repl/server/net.js +63 -0
  84. package/cli/repl/server/send.d.ts +4 -0
  85. package/cli/repl/server/send.js +18 -0
  86. package/cli/repl/server/server.d.ts +20 -0
  87. package/cli/repl/server/server.js +66 -0
  88. package/cli/repl/server/validate.d.ts +15 -0
  89. package/cli/repl/server/validate.js +34 -0
  90. package/cli/slicer-app.d.ts +11 -0
  91. package/cli/slicer-app.js +83 -0
  92. package/cli/statistics-app.d.ts +11 -0
  93. package/cli/statistics-app.js +99 -0
  94. package/cli/statistics-helper-app.d.ts +11 -0
  95. package/cli/statistics-helper-app.js +87 -0
  96. package/cli/summarizer-app.d.ts +18 -0
  97. package/cli/summarizer-app.js +66 -0
  98. package/core/pipeline-executor.d.ts +154 -0
  99. package/core/pipeline-executor.js +221 -0
  100. package/core/print/dataflow-printer.d.ts +3 -4
  101. package/core/print/dataflow-printer.js +5 -5
  102. package/core/print/normalize-printer.d.ts +1 -1
  103. package/core/print/normalize-printer.js +3 -3
  104. package/core/print/parse-printer.js +3 -3
  105. package/core/print/print.d.ts +13 -4
  106. package/core/print/print.js +13 -2
  107. package/core/print/slice-diff-ansi.d.ts +3 -2
  108. package/core/print/slice-diff-ansi.js +4 -4
  109. package/core/steps/all/core/00-parse.d.ts +28 -0
  110. package/core/steps/all/core/00-parse.js +24 -0
  111. package/core/steps/all/core/10-normalize.d.ts +29 -0
  112. package/core/steps/all/core/10-normalize.js +26 -0
  113. package/core/steps/all/core/20-dataflow.d.ts +27 -0
  114. package/core/steps/all/core/20-dataflow.js +29 -0
  115. package/core/steps/all/static-slicing/00-slice.d.ts +28 -0
  116. package/core/steps/all/static-slicing/00-slice.js +21 -0
  117. package/core/steps/all/static-slicing/10-reconstruct.d.ts +25 -0
  118. package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
  119. package/core/steps/pipeline/create-pipeline.d.ts +6 -0
  120. package/core/steps/pipeline/create-pipeline.js +130 -0
  121. package/core/steps/pipeline/default-pipelines.d.ts +251 -0
  122. package/core/steps/pipeline/default-pipelines.js +18 -0
  123. package/core/steps/pipeline/invalid-pipeline-error.d.ts +6 -0
  124. package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
  125. package/core/steps/pipeline/pipeline.d.ts +60 -0
  126. package/core/steps/pipeline/pipeline.js +28 -0
  127. package/core/steps/pipeline-step.d.ts +85 -0
  128. package/core/steps/pipeline-step.js +8 -0
  129. package/dataflow/environments/append.d.ts +4 -4
  130. package/dataflow/environments/append.js +4 -4
  131. package/dataflow/environments/built-in.d.ts +25 -0
  132. package/dataflow/environments/built-in.js +123 -0
  133. package/dataflow/environments/clone.d.ts +2 -0
  134. package/dataflow/environments/clone.js +23 -0
  135. package/dataflow/environments/{register.d.ts → define.d.ts} +3 -3
  136. package/dataflow/environments/define.js +51 -0
  137. package/dataflow/environments/diff.d.ts +6 -0
  138. package/dataflow/environments/diff.js +85 -0
  139. package/dataflow/environments/environment.d.ts +10 -43
  140. package/dataflow/environments/environment.js +32 -138
  141. package/dataflow/environments/identifier.d.ts +31 -0
  142. package/dataflow/environments/identifier.js +3 -0
  143. package/dataflow/environments/overwrite.d.ts +4 -4
  144. package/dataflow/environments/overwrite.js +9 -22
  145. package/dataflow/environments/resolve-by-name.d.ts +7 -6
  146. package/dataflow/environments/resolve-by-name.js +35 -19
  147. package/dataflow/environments/scoping.js +1 -4
  148. package/dataflow/extractor.d.ts +6 -6
  149. package/dataflow/extractor.js +47 -57
  150. package/dataflow/graph/diff.d.ts +24 -7
  151. package/dataflow/graph/diff.js +114 -74
  152. package/dataflow/graph/edge.d.ts +66 -20
  153. package/dataflow/graph/edge.js +73 -27
  154. package/dataflow/graph/graph.d.ts +53 -29
  155. package/dataflow/graph/graph.js +84 -89
  156. package/dataflow/graph/quads.js +2 -2
  157. package/dataflow/graph/vertex.d.ts +37 -34
  158. package/dataflow/info.d.ts +49 -0
  159. package/dataflow/info.js +29 -0
  160. package/dataflow/internal/linker.d.ts +11 -10
  161. package/dataflow/internal/linker.js +64 -90
  162. package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
  163. package/dataflow/internal/process/functions/call/argument/make-argument.js +31 -0
  164. package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +3 -0
  165. package/dataflow/internal/process/functions/call/argument/unpack-argument.js +18 -0
  166. package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +9 -0
  167. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +82 -0
  168. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +29 -0
  169. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +167 -0
  170. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +11 -0
  171. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +165 -0
  172. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +7 -0
  173. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +97 -0
  174. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +7 -0
  175. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +165 -0
  176. package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +7 -0
  177. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +36 -0
  178. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +7 -0
  179. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +100 -0
  180. package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +7 -0
  181. package/dataflow/internal/process/functions/call/built-in/built-in-library.js +32 -0
  182. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.d.ts +9 -0
  183. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.js +35 -0
  184. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +7 -0
  185. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +35 -0
  186. package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +9 -0
  187. package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +29 -0
  188. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +7 -0
  189. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +32 -0
  190. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +12 -0
  191. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +45 -0
  192. package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +11 -0
  193. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +72 -0
  194. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +7 -0
  195. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +61 -0
  196. package/dataflow/internal/process/functions/call/common.d.ts +35 -0
  197. package/dataflow/internal/process/functions/call/common.js +70 -0
  198. package/dataflow/internal/process/functions/call/default-call-handling.d.ts +5 -0
  199. package/dataflow/internal/process/functions/call/default-call-handling.js +15 -0
  200. package/dataflow/internal/process/functions/call/known-call-handling.d.ts +26 -0
  201. package/dataflow/internal/process/functions/call/known-call-handling.js +62 -0
  202. package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -0
  203. package/dataflow/internal/process/functions/call/named-call-handling.js +53 -0
  204. package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +6 -0
  205. package/dataflow/internal/process/functions/call/unnamed-call-handling.js +58 -0
  206. package/dataflow/internal/process/functions/process-argument.d.ts +9 -0
  207. package/dataflow/internal/process/functions/{argument.js → process-argument.js} +25 -20
  208. package/dataflow/internal/process/functions/{parameter.d.ts → process-parameter.d.ts} +3 -2
  209. package/dataflow/internal/process/functions/{parameter.js → process-parameter.js} +10 -13
  210. package/dataflow/internal/process/process-named-call.d.ts +6 -0
  211. package/dataflow/internal/process/process-named-call.js +17 -0
  212. package/dataflow/internal/process/process-symbol.d.ts +5 -0
  213. package/dataflow/internal/process/process-symbol.js +26 -0
  214. package/dataflow/internal/process/process-uninteresting-leaf.d.ts +4 -0
  215. package/dataflow/internal/process/process-uninteresting-leaf.js +9 -0
  216. package/dataflow/internal/process/process-value.d.ts +4 -0
  217. package/dataflow/internal/process/process-value.js +22 -0
  218. package/dataflow/logger.d.ts +1 -0
  219. package/dataflow/logger.js +6 -0
  220. package/dataflow/processor.d.ts +18 -13
  221. package/dataflow/processor.js +1 -1
  222. package/package.json +48 -85
  223. package/r-bridge/data/data.d.ts +603 -0
  224. package/r-bridge/data/data.js +753 -0
  225. package/r-bridge/data/get.d.ts +19 -0
  226. package/r-bridge/data/get.js +51 -0
  227. package/r-bridge/data/print.d.ts +1 -0
  228. package/r-bridge/data/print.js +58 -0
  229. package/r-bridge/data/types.d.ts +33 -0
  230. package/r-bridge/data/types.js +3 -0
  231. package/r-bridge/init.d.ts +3 -0
  232. package/r-bridge/init.js +22 -0
  233. package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
  234. package/r-bridge/lang-4.x/ast/model/collect.js +2 -2
  235. package/r-bridge/lang-4.x/ast/model/model.d.ts +26 -5
  236. package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +4 -3
  237. package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +4 -0
  238. package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +0 -17
  239. package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +3 -1
  240. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +6 -4
  241. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +2 -0
  242. package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +2 -3
  243. package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +1 -1
  244. package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +1 -1
  245. package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +2 -2
  246. package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +0 -11
  247. package/r-bridge/lang-4.x/ast/model/operators.d.ts +6 -18
  248. package/r-bridge/lang-4.x/ast/model/operators.js +36 -48
  249. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +19 -15
  250. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +59 -54
  251. package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +8 -0
  252. package/r-bridge/lang-4.x/ast/model/processing/node-id.js +18 -0
  253. package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +2 -2
  254. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +28 -17
  255. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +7 -34
  256. package/r-bridge/lang-4.x/ast/model/processing/visitor.js +5 -2
  257. package/r-bridge/lang-4.x/ast/model/type.js +13 -6
  258. package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +4 -1
  259. package/r-bridge/lang-4.x/ast/parser/json/format.js +9 -2
  260. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +5 -5
  261. package/r-bridge/lang-4.x/ast/parser/json/parser.js +22 -27
  262. package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +10 -7
  263. package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +19 -11
  264. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.d.ts → normalize-if-then-else.d.ts} +3 -3
  265. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.js → normalize-if-then-else.js} +10 -13
  266. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.d.ts → normalize-if-then.d.ts} +3 -3
  267. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.js → normalize-if-then.js} +9 -12
  268. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.d.ts +10 -0
  269. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.js +64 -0
  270. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.d.ts → normalize-argument.d.ts} +4 -4
  271. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.js → normalize-argument.js} +13 -17
  272. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.d.ts → normalize-call.d.ts} +6 -4
  273. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.js → normalize-call.js} +24 -29
  274. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/normalize-definition.d.ts +12 -0
  275. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{definition.js → normalize-definition.js} +14 -19
  276. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.d.ts → normalize-parameter.d.ts} +4 -4
  277. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.js → normalize-parameter.js} +12 -16
  278. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-break.d.ts +4 -0
  279. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{break.js → normalize-break.js} +6 -8
  280. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-for.d.ts +4 -0
  281. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{for.js → normalize-for.js} +18 -20
  282. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-next.d.ts +4 -0
  283. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{next.js → normalize-next.js} +6 -8
  284. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-repeat.d.ts +13 -0
  285. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{repeat.js → normalize-repeat.js} +13 -16
  286. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-while.d.ts +4 -0
  287. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{while.js → normalize-while.js} +10 -12
  288. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.d.ts → normalize-access.d.ts} +4 -4
  289. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.js → normalize-access.js} +44 -45
  290. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.d.ts → normalize-binary.d.ts} +3 -3
  291. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.js → normalize-binary.js} +23 -73
  292. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.d.ts +13 -0
  293. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.js +47 -0
  294. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-comment.d.ts +11 -0
  295. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{comment.js → normalize-comment.js} +5 -10
  296. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-line-directive.d.ts +13 -0
  297. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{line-directive.js → normalize-line-directive.js} +7 -12
  298. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.d.ts +3 -0
  299. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.js +15 -0
  300. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.d.ts +10 -0
  301. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.js +182 -0
  302. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.d.ts +4 -0
  303. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.js +34 -0
  304. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.d.ts +13 -0
  305. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.js +59 -0
  306. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-number.d.ts +16 -0
  307. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{number.js → normalize-number.js} +12 -18
  308. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-string.d.ts +11 -0
  309. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{string.js → normalize-string.js} +7 -12
  310. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.d.ts → normalize-symbol.d.ts} +4 -4
  311. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.js → normalize-symbol.js} +12 -15
  312. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.d.ts → normalize-meta.d.ts} +5 -3
  313. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.js → normalize-meta.js} +8 -8
  314. package/r-bridge/lang-4.x/ast/parser/xml/{data.d.ts → normalizer-data.d.ts} +1 -5
  315. package/r-bridge/lang-4.x/ast/parser/xml/normalizer-data.js +3 -0
  316. package/r-bridge/lang-4.x/{values.d.ts → convert-values.d.ts} +2 -2
  317. package/r-bridge/lang-4.x/{values.js → convert-values.js} +5 -5
  318. package/r-bridge/retriever.d.ts +5 -5
  319. package/r-bridge/retriever.js +11 -24
  320. package/r-bridge/shell-executor.d.ts +0 -1
  321. package/r-bridge/shell-executor.js +7 -12
  322. package/r-bridge/shell.d.ts +14 -12
  323. package/r-bridge/shell.js +50 -45
  324. package/reconstruct/reconstruct.d.ts +4 -2
  325. package/reconstruct/reconstruct.js +193 -185
  326. package/slicing/criterion/collect-all.d.ts +4 -3
  327. package/slicing/criterion/collect-all.js +5 -1
  328. package/slicing/criterion/filters/all-variables.js +14 -22
  329. package/slicing/criterion/parse.d.ts +4 -2
  330. package/slicing/criterion/parse.js +13 -11
  331. package/slicing/static/fingerprint.d.ts +5 -0
  332. package/slicing/static/fingerprint.js +17 -0
  333. package/slicing/static/slice-call.d.ts +10 -0
  334. package/slicing/static/slice-call.js +86 -0
  335. package/slicing/static/slicer-types.d.ts +33 -0
  336. package/slicing/static/slicer-types.js +3 -0
  337. package/slicing/static/static-slicer.d.ts +6 -24
  338. package/slicing/static/static-slicer.js +54 -155
  339. package/slicing/static/visiting-queue.d.ts +23 -0
  340. package/slicing/static/visiting-queue.js +53 -0
  341. package/statistics/features/common-syntax-probability.d.ts +29 -0
  342. package/statistics/features/common-syntax-probability.js +159 -0
  343. package/statistics/features/feature.d.ts +182 -0
  344. package/statistics/features/feature.js +39 -0
  345. package/statistics/features/post-processing.d.ts +12 -0
  346. package/statistics/features/post-processing.js +21 -0
  347. package/statistics/features/supported/assignments/assignments.d.ts +12 -0
  348. package/statistics/features/supported/assignments/assignments.js +55 -0
  349. package/statistics/features/supported/assignments/post-process.d.ts +3 -0
  350. package/statistics/features/supported/assignments/post-process.js +124 -0
  351. package/statistics/features/supported/comments/comments.d.ts +18 -0
  352. package/statistics/features/supported/comments/comments.js +133 -0
  353. package/statistics/features/supported/comments/post-process.d.ts +3 -0
  354. package/statistics/features/supported/comments/post-process.js +49 -0
  355. package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
  356. package/statistics/features/supported/control-flow/control-flow.js +68 -0
  357. package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
  358. package/statistics/features/supported/control-flow/post-process.js +64 -0
  359. package/statistics/features/supported/data-access/data-access.d.ts +15 -0
  360. package/statistics/features/supported/data-access/data-access.js +120 -0
  361. package/statistics/features/supported/data-access/post-process.d.ts +3 -0
  362. package/statistics/features/supported/data-access/post-process.js +106 -0
  363. package/statistics/features/supported/defined-functions/defined-functions.d.ts +34 -0
  364. package/statistics/features/supported/defined-functions/defined-functions.js +142 -0
  365. package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
  366. package/statistics/features/supported/defined-functions/post-process.js +169 -0
  367. package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
  368. package/statistics/features/supported/expression-list/expression-list.js +36 -0
  369. package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
  370. package/statistics/features/supported/expression-list/post-process.js +43 -0
  371. package/statistics/features/supported/loops/loops.d.ts +20 -0
  372. package/statistics/features/supported/loops/loops.js +79 -0
  373. package/statistics/features/supported/loops/post-process.d.ts +3 -0
  374. package/statistics/features/supported/loops/post-process.js +71 -0
  375. package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
  376. package/statistics/features/supported/used-functions/post-process.js +178 -0
  377. package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
  378. package/statistics/features/supported/used-functions/used-functions.js +97 -0
  379. package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
  380. package/statistics/features/supported/used-packages/post-process.js +120 -0
  381. package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
  382. package/statistics/features/supported/used-packages/used-packages.js +130 -0
  383. package/statistics/features/supported/values/post-process.d.ts +3 -0
  384. package/statistics/features/supported/values/post-process.js +71 -0
  385. package/statistics/features/supported/values/values.d.ts +14 -0
  386. package/statistics/features/supported/values/values.js +101 -0
  387. package/statistics/features/supported/variables/post-process.d.ts +9 -0
  388. package/statistics/features/supported/variables/post-process.js +121 -0
  389. package/statistics/features/supported/variables/variables.d.ts +15 -0
  390. package/statistics/features/supported/variables/variables.js +60 -0
  391. package/statistics/meta-statistics.d.ts +33 -0
  392. package/statistics/meta-statistics.js +17 -0
  393. package/statistics/output/file-provider.d.ts +37 -0
  394. package/statistics/output/file-provider.js +97 -0
  395. package/statistics/output/print-stats.d.ts +17 -0
  396. package/statistics/output/print-stats.js +69 -0
  397. package/statistics/output/statistics-file.d.ts +37 -0
  398. package/statistics/output/statistics-file.js +69 -0
  399. package/statistics/statistics.d.ts +28 -0
  400. package/statistics/statistics.js +108 -0
  401. package/statistics/summarizer/auto-detect.d.ts +2 -0
  402. package/statistics/summarizer/auto-detect.js +32 -0
  403. package/statistics/summarizer/first-phase/process.d.ts +6 -0
  404. package/statistics/summarizer/first-phase/process.js +81 -0
  405. package/statistics/summarizer/post-process/clusterer.d.ts +26 -0
  406. package/statistics/summarizer/post-process/clusterer.js +43 -0
  407. package/statistics/summarizer/post-process/file-based-count.d.ts +17 -0
  408. package/statistics/summarizer/post-process/file-based-count.js +49 -0
  409. package/statistics/summarizer/post-process/histogram.d.ts +59 -0
  410. package/statistics/summarizer/post-process/histogram.js +128 -0
  411. package/statistics/summarizer/post-process/post-process-output.d.ts +16 -0
  412. package/statistics/summarizer/post-process/post-process-output.js +105 -0
  413. package/statistics/summarizer/second-phase/process.d.ts +11 -0
  414. package/statistics/summarizer/second-phase/process.js +116 -0
  415. package/statistics/summarizer/summarizer.d.ts +35 -0
  416. package/statistics/summarizer/summarizer.js +135 -0
  417. package/util/ansi.d.ts +2 -2
  418. package/util/ansi.js +2 -2
  419. package/util/arrays.d.ts +11 -1
  420. package/util/arrays.js +34 -1
  421. package/util/assert.d.ts +1 -0
  422. package/util/assert.js +5 -1
  423. package/util/cfg/cfg.d.ts +3 -2
  424. package/util/cfg/cfg.js +17 -28
  425. package/util/cfg/visitor.d.ts +1 -1
  426. package/util/defaultmap.d.ts +1 -1
  427. package/util/defaultmap.js +1 -1
  428. package/util/diff.d.ts +4 -4
  429. package/util/files.d.ts +2 -2
  430. package/util/files.js +1 -1
  431. package/util/log.d.ts +1 -0
  432. package/util/log.js +7 -1
  433. package/util/logic.d.ts +1 -0
  434. package/util/logic.js +3 -0
  435. package/util/mermaid/ast.d.ts +1 -1
  436. package/util/mermaid/ast.js +2 -2
  437. package/util/mermaid/cfg.d.ts +1 -1
  438. package/util/mermaid/dfg.d.ts +34 -8
  439. package/util/mermaid/dfg.js +99 -70
  440. package/util/mermaid/mermaid.d.ts +1 -1
  441. package/util/mermaid/mermaid.js +6 -7
  442. package/util/objects.js +4 -0
  443. package/util/quads.d.ts +3 -3
  444. package/util/quads.js +0 -1
  445. package/util/range.d.ts +27 -14
  446. package/util/range.js +31 -27
  447. package/util/version.js +1 -1
  448. package/core/index.d.ts +0 -4
  449. package/core/index.js +0 -23
  450. package/core/input.d.ts +0 -42
  451. package/core/output.d.ts +0 -15
  452. package/core/slicer.d.ts +0 -124
  453. package/core/slicer.js +0 -227
  454. package/core/steps.d.ts +0 -508
  455. package/core/steps.js +0 -100
  456. package/dataflow/environments/index.d.ts +0 -7
  457. package/dataflow/environments/index.js +0 -23
  458. package/dataflow/environments/register.js +0 -40
  459. package/dataflow/environments/scopes.d.ts +0 -6
  460. package/dataflow/environments/scopes.js +0 -6
  461. package/dataflow/graph/index.d.ts +0 -4
  462. package/dataflow/graph/index.js +0 -21
  463. package/dataflow/index.d.ts +0 -5
  464. package/dataflow/index.js +0 -24
  465. package/dataflow/internal/info.d.ts +0 -21
  466. package/dataflow/internal/info.js +0 -16
  467. package/dataflow/internal/process/access.d.ts +0 -4
  468. package/dataflow/internal/process/access.js +0 -53
  469. package/dataflow/internal/process/expression-list.d.ts +0 -8
  470. package/dataflow/internal/process/expression-list.js +0 -144
  471. package/dataflow/internal/process/functions/argument.d.ts +0 -8
  472. package/dataflow/internal/process/functions/exit-points.d.ts +0 -2
  473. package/dataflow/internal/process/functions/exit-points.js +0 -121
  474. package/dataflow/internal/process/functions/function-call.d.ts +0 -5
  475. package/dataflow/internal/process/functions/function-call.js +0 -105
  476. package/dataflow/internal/process/functions/function-definition.d.ts +0 -4
  477. package/dataflow/internal/process/functions/function-definition.js +0 -176
  478. package/dataflow/internal/process/functions/source.d.ts +0 -8
  479. package/dataflow/internal/process/functions/source.js +0 -81
  480. package/dataflow/internal/process/if-then-else.d.ts +0 -4
  481. package/dataflow/internal/process/if-then-else.js +0 -56
  482. package/dataflow/internal/process/loops/for-loop.d.ts +0 -4
  483. package/dataflow/internal/process/loops/for-loop.js +0 -54
  484. package/dataflow/internal/process/loops/repeat-loop.d.ts +0 -4
  485. package/dataflow/internal/process/loops/repeat-loop.js +0 -21
  486. package/dataflow/internal/process/loops/while-loop.d.ts +0 -4
  487. package/dataflow/internal/process/loops/while-loop.js +0 -31
  488. package/dataflow/internal/process/operators/assignment.d.ts +0 -4
  489. package/dataflow/internal/process/operators/assignment.js +0 -129
  490. package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +0 -4
  491. package/dataflow/internal/process/operators/non-assignment-binary-op.js +0 -25
  492. package/dataflow/internal/process/operators/pipe.d.ts +0 -4
  493. package/dataflow/internal/process/operators/pipe.js +0 -46
  494. package/dataflow/internal/process/operators/unary-op.d.ts +0 -4
  495. package/dataflow/internal/process/operators/unary-op.js +0 -10
  496. package/dataflow/internal/process/symbol.d.ts +0 -4
  497. package/dataflow/internal/process/symbol.js +0 -21
  498. package/dataflow/internal/process/uninteresting-leaf.d.ts +0 -3
  499. package/dataflow/internal/process/uninteresting-leaf.js +0 -9
  500. package/index.d.ts +0 -4
  501. package/index.js +0 -21
  502. package/r-bridge/index.d.ts +0 -11
  503. package/r-bridge/index.js +0 -28
  504. package/r-bridge/lang-4.x/ast/index.d.ts +0 -3
  505. package/r-bridge/lang-4.x/ast/index.js +0 -22
  506. package/r-bridge/lang-4.x/ast/model/index.d.ts +0 -6
  507. package/r-bridge/lang-4.x/ast/model/index.js +0 -23
  508. package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +0 -21
  509. package/r-bridge/lang-4.x/ast/model/nodes/index.js +0 -38
  510. package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +0 -13
  511. package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +0 -27
  512. package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +0 -5
  513. package/r-bridge/lang-4.x/ast/model/processing/index.js +0 -22
  514. package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +0 -292
  515. package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +0 -136
  516. package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -3
  517. package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -20
  518. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +0 -2
  519. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +0 -19
  520. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +0 -10
  521. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +0 -65
  522. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +0 -1
  523. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +0 -18
  524. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +0 -12
  525. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +0 -2
  526. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +0 -20
  527. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -9
  528. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -26
  529. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +0 -4
  530. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +0 -4
  531. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +0 -5
  532. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +0 -22
  533. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +0 -4
  534. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +0 -13
  535. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +0 -4
  536. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +0 -3
  537. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +0 -20
  538. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +0 -6
  539. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +0 -24
  540. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +0 -13
  541. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +0 -59
  542. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +0 -11
  543. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +0 -1
  544. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +0 -18
  545. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +0 -12
  546. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +0 -10
  547. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +0 -159
  548. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +0 -3
  549. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +0 -20
  550. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +0 -4
  551. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +0 -33
  552. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +0 -13
  553. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +0 -64
  554. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +0 -3
  555. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +0 -20
  556. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +0 -13
  557. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +0 -11
  558. package/r-bridge/lang-4.x/index.d.ts +0 -2
  559. package/r-bridge/lang-4.x/index.js +0 -19
  560. package/slicing/criterion/filters/index.d.ts +0 -1
  561. package/slicing/criterion/filters/index.js +0 -18
  562. package/slicing/criterion/index.d.ts +0 -3
  563. package/slicing/criterion/index.js +0 -20
  564. package/slicing/index.d.ts +0 -3
  565. package/slicing/index.js +0 -20
  566. package/slicing/static/index.d.ts +0 -1
  567. package/slicing/static/index.js +0 -18
  568. package/util/mermaid/index.d.ts +0 -3
  569. package/util/mermaid/index.js +0 -20
  570. /package/{r-bridge/lang-4.x/ast/parser/xml → benchmark/summarizer}/data.js +0 -0
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.values = void 0;
27
+ const xpath = __importStar(require("xpath-ts2"));
28
+ const post_process_1 = require("./post-process");
29
+ const assert_1 = require("../../../../util/assert");
30
+ const convert_values_1 = require("../../../../r-bridge/lang-4.x/convert-values");
31
+ const statistics_file_1 = require("../../../output/statistics-file");
32
+ const initialValueInfo = {
33
+ allNumerics: 0,
34
+ imaginaryNumbers: 0,
35
+ integers: 0,
36
+ floatHex: 0,
37
+ logical: 0,
38
+ specialConstants: 0,
39
+ strings: 0
40
+ };
41
+ const numericConstantQuery = xpath.parse('//NUM_CONST');
42
+ const stringConstantQuery = xpath.parse('//STR_CONST');
43
+ const specialConstantsQuery = xpath.parse('//NULL_CONST');
44
+ const shortLogicalSymbolQuery = xpath.parse('//SYMBOL[text() = \'T\' or text() = \'F\']');
45
+ function classifyNumericConstants(numeric, existing) {
46
+ if (numeric === convert_values_1.RTrue || numeric === convert_values_1.RFalse) {
47
+ return 'logical';
48
+ }
49
+ if (numeric === convert_values_1.RNa || numeric === 'NaN' || numeric === convert_values_1.RNull || numeric === 'Inf' || numeric === '-Inf') {
50
+ return 'special-constants';
51
+ }
52
+ if (numeric.includes('i')) {
53
+ existing.imaginaryNumbers++;
54
+ }
55
+ else if (numeric.endsWith('L')) {
56
+ existing.integers++;
57
+ }
58
+ else if (convert_values_1.RNumHexFloatRegex.test(numeric)) {
59
+ existing.floatHex++;
60
+ }
61
+ return 'allNumerics';
62
+ }
63
+ exports.values = {
64
+ name: 'Values',
65
+ description: 'All values used (as constants etc.)',
66
+ process(existing, input) {
67
+ const strings = stringConstantQuery.select({ node: input.parsedRAst });
68
+ const numerics = numericConstantQuery.select({ node: input.parsedRAst });
69
+ const specialConstants = specialConstantsQuery.select({ node: input.parsedRAst });
70
+ const specialLogicalSymbols = shortLogicalSymbolQuery.select({ node: input.parsedRAst });
71
+ const numbers = [];
72
+ numerics.map(n => [n, classifyNumericConstants(n.textContent ?? '<unknown>', existing)])
73
+ .forEach(([n, type]) => {
74
+ switch (type) {
75
+ case 'allNumerics':
76
+ numbers.push(n);
77
+ break;
78
+ case 'logical':
79
+ specialLogicalSymbols.push(n);
80
+ break;
81
+ case 'special-constants':
82
+ specialConstants.push(n);
83
+ break;
84
+ default:
85
+ (0, assert_1.assertUnreachable)(type);
86
+ }
87
+ });
88
+ existing.strings += strings.length;
89
+ existing.allNumerics += numerics.length;
90
+ existing.specialConstants += specialConstants.length;
91
+ existing.logical += specialLogicalSymbols.length;
92
+ (0, statistics_file_1.appendStatisticsFile)(this.name, 'numeric', numbers, input.filepath);
93
+ (0, statistics_file_1.appendStatisticsFile)(this.name, 'string', strings, input.filepath);
94
+ (0, statistics_file_1.appendStatisticsFile)(this.name, 'specialConstant', specialConstants, input.filepath);
95
+ (0, statistics_file_1.appendStatisticsFile)(this.name, 'logical', specialLogicalSymbols, input.filepath);
96
+ return existing;
97
+ },
98
+ initialValue: initialValueInfo,
99
+ postProcess: post_process_1.postProcess
100
+ };
101
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1,9 @@
1
+ import type { FeatureStatisticsWithMeta } from '../../feature';
2
+ import type { SummarizedWithProject } from '../../post-processing';
3
+ import type { StatisticsSummarizerConfiguration } from '../../../summarizer/summarizer';
4
+ export declare function postProcess(featureRoot: string, info: Map<string, FeatureStatisticsWithMeta>, outputPath: string, config: StatisticsSummarizerConfiguration): void;
5
+ type VariableInfoMap = Map<string, SummarizedWithProject & {
6
+ linePercentageInFile: number[][];
7
+ }>;
8
+ export declare function writeVariableInfoToCsv(outputPath: string, filename: `${string}.csv`, data: VariableInfoMap): void;
9
+ export {};
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.writeVariableInfoToCsv = exports.postProcess = void 0;
7
+ const post_processing_1 = require("../../post-processing");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const summarizer_1 = require("../../../../util/summarizer");
11
+ const files_1 = require("../../../../util/files");
12
+ function collectUsedVariables(featureRoot, info, config, outputPath) {
13
+ const used = collectVariableInfoFor(path_1.default.join(featureRoot, 'usedVariables.txt'), info, config);
14
+ writeVariableInfoToCsv(outputPath, 'used-variables.csv', used);
15
+ // we manually clear these maps to save memory
16
+ used.clear();
17
+ }
18
+ function collectDefinedVariables(featureRoot, info, config, outputPath) {
19
+ const defined = collectVariableInfoFor(path_1.default.join(featureRoot, 'definedVariables.txt'), info, config);
20
+ writeVariableInfoToCsv(outputPath, 'defined-variables.csv', defined);
21
+ defined.clear();
22
+ }
23
+ function collectRedefinedVariables(featureRoot, info, config, outputPath) {
24
+ const redefined = collectVariableInfoFor(path_1.default.join(featureRoot, 'redefinedVariables.txt'), info, config);
25
+ writeVariableInfoToCsv(outputPath, 'redefined-variables.csv', redefined);
26
+ redefined.clear();
27
+ }
28
+ function writeVariableCountsToCsv(outputPath, collected) {
29
+ const variablesOutStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'variable-counts.csv'));
30
+ variablesOutStream.write(`kind,unique-projects,unique-files,${(0, summarizer_1.summarizedMeasurement2CsvHeader)()}\n`);
31
+ for (const [key, val] of Object.entries(collected)) {
32
+ if (key === 'unknownVariables') {
33
+ // they are for function calls etc and in hindsight not a good idea
34
+ continue;
35
+ }
36
+ const data = val;
37
+ const sum = (0, summarizer_1.summarizeMeasurement)(data.count);
38
+ variablesOutStream.write(`${JSON.stringify(key)},${data.uniqueProjects.size},${data.uniqueFiles.size},${(0, summarizer_1.summarizedMeasurement2Csv)(sum)}\n`);
39
+ }
40
+ variablesOutStream.close();
41
+ }
42
+ function collectInformation(info, config) {
43
+ const collected = {};
44
+ for (const [filepath, data] of info.entries()) {
45
+ const value = data.variables;
46
+ for (const [key, val] of Object.entries(value)) {
47
+ let get = collected[key];
48
+ if (!get) {
49
+ get = (0, post_processing_1.emptySummarizedWithProject)();
50
+ collected[key] = get;
51
+ }
52
+ get.count.push(val);
53
+ if (val > 0) {
54
+ (0, post_processing_1.recordFilePath)(get, filepath, config);
55
+ }
56
+ }
57
+ }
58
+ return collected;
59
+ }
60
+ function postProcess(featureRoot, info, outputPath, config) {
61
+ const collected = collectInformation(info, config);
62
+ writeVariableCountsToCsv(outputPath, collected);
63
+ collectUsedVariables(featureRoot, info, config, outputPath);
64
+ collectDefinedVariables(featureRoot, info, config, outputPath);
65
+ collectRedefinedVariables(featureRoot, info, config, outputPath);
66
+ }
67
+ exports.postProcess = postProcess;
68
+ function writeVariableInfoToCsv(outputPath, filename, data) {
69
+ const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, filename));
70
+ out.write(`variable,unique-projects,unique-files,${(0, summarizer_1.summarizedMeasurement2CsvHeader)('count')},${(0, summarizer_1.summarizedMeasurement2CsvHeader)('line-frac')}\n`);
71
+ for (const [key, val] of data.entries()) {
72
+ const { count, uniqueProjects, uniqueFiles, linePercentageInFile } = val;
73
+ const counts = (0, summarizer_1.summarizeMeasurement)(count);
74
+ const lineFrac = (0, summarizer_1.summarizeMeasurement)(linePercentageInFile.flat());
75
+ out.write(`${JSON.stringify(key)},${uniqueProjects.size},${uniqueFiles.size},${(0, summarizer_1.summarizedMeasurement2Csv)(counts)},${(0, summarizer_1.summarizedMeasurement2Csv)(lineFrac)}\n`);
76
+ }
77
+ out.close();
78
+ }
79
+ exports.writeVariableInfoToCsv = writeVariableInfoToCsv;
80
+ function collectVariableInfoFor(filepath, info, config) {
81
+ // variable name to summary
82
+ const collected = new Map();
83
+ (0, files_1.readLineByLineSync)(filepath, (line, lineNumber) => {
84
+ if (line.length === 0) {
85
+ return;
86
+ }
87
+ if (lineNumber % 2_500 === 0) {
88
+ console.log(` Processed ${lineNumber} lines of ${filepath}`);
89
+ }
90
+ const [vars, context] = JSON.parse(line.toString());
91
+ const numberOfLines = info.get(context ?? '')?.stats.lines[0].length;
92
+ // first we have to collect what this file gives us
93
+ const perFile = new Map();
94
+ for (const [name, [line]] of vars) {
95
+ let get = perFile.get(name);
96
+ if (!get) {
97
+ get = { ...(0, post_processing_1.emptySummarizedWithProject)(), linePercentageInFile: [] };
98
+ perFile.set(name, get);
99
+ }
100
+ get.count.push(1);
101
+ if (numberOfLines) {
102
+ get.linePercentageInFile.push(line / numberOfLines);
103
+ }
104
+ }
105
+ // now we merge it into the global map (oh gosh this is so horrible
106
+ for (const [name, data] of perFile.entries()) {
107
+ let get = collected.get(name);
108
+ if (!get) {
109
+ get = { ...(0, post_processing_1.emptySummarizedWithProject)(), linePercentageInFile: [] };
110
+ collected.set(name, get);
111
+ }
112
+ get.count.push(data.count.length);
113
+ get.linePercentageInFile.push(data.linePercentageInFile);
114
+ if (data.count.length > 0) {
115
+ (0, post_processing_1.recordFilePath)(get, context, config);
116
+ }
117
+ }
118
+ });
119
+ return collected;
120
+ }
121
+ //# sourceMappingURL=post-process.js.map
@@ -0,0 +1,15 @@
1
+ import type { Feature } from '../../feature';
2
+ import type { Writable } from 'ts-essentials';
3
+ declare const initialVariableInfo: {
4
+ numberOfVariableUses: number;
5
+ numberOfDefinitions: number;
6
+ numberOfRedefinitions: number;
7
+ unknownVariables: number;
8
+ };
9
+ export type VariableInfo = Writable<typeof initialVariableInfo>;
10
+ export type DefinedVariableInformation = [
11
+ name: string,
12
+ location: [line: number, character: number]
13
+ ];
14
+ export declare const variables: Feature<VariableInfo>;
15
+ export {};
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.variables = void 0;
4
+ const post_process_1 = require("./post-process");
5
+ const range_1 = require("../../../../util/range");
6
+ const visitor_1 = require("../../../../r-bridge/lang-4.x/ast/model/processing/visitor");
7
+ const r_symbol_1 = require("../../../../r-bridge/lang-4.x/ast/model/nodes/r-symbol");
8
+ const statistics_file_1 = require("../../../output/statistics-file");
9
+ const initialVariableInfo = {
10
+ numberOfVariableUses: 0,
11
+ numberOfDefinitions: 0,
12
+ numberOfRedefinitions: 0,
13
+ // we failed to get the type/role, maybe for function call names etc.
14
+ unknownVariables: 0
15
+ };
16
+ function visitVariables(info, input) {
17
+ (0, visitor_1.visitAst)(input.normalizedRAst.ast, node => {
18
+ if (node.type !== "RSymbol" /* RType.Symbol */ || (0, r_symbol_1.isSpecialSymbol)(node)) {
19
+ return;
20
+ }
21
+ // search for the node in the DF graph
22
+ const mayNode = input.dataflow.graph.get(node.info.id);
23
+ if (mayNode === undefined) {
24
+ info.unknownVariables++;
25
+ (0, statistics_file_1.appendStatisticsFile)(exports.variables.name, 'unknown', [[
26
+ node.info.fullLexeme ?? node.lexeme,
27
+ (0, range_1.getRangeStart)(node.location)
28
+ ]], input.filepath);
29
+ return;
30
+ }
31
+ const [dfNode] = mayNode;
32
+ if (dfNode.tag === 'variable-definition') {
33
+ info.numberOfDefinitions++;
34
+ const lexeme = node.info.fullLexeme ?? node.lexeme;
35
+ (0, statistics_file_1.appendStatisticsFile)(exports.variables.name, 'definedVariables', [[
36
+ lexeme,
37
+ (0, range_1.getRangeStart)(node.location)
38
+ ]], input.filepath);
39
+ // checking for redefinitions is no longer possible in its current form!
40
+ }
41
+ else if (dfNode.tag === 'use') {
42
+ info.numberOfVariableUses++;
43
+ (0, statistics_file_1.appendStatisticsFile)(exports.variables.name, 'usedVariables', [[
44
+ node.info.fullLexeme ?? node.lexeme,
45
+ (0, range_1.getRangeStart)(node.location)
46
+ ]], input.filepath);
47
+ }
48
+ });
49
+ }
50
+ exports.variables = {
51
+ name: 'Variables',
52
+ description: 'Variable Usage, Assignments, and Redefinitions',
53
+ process(existing, input) {
54
+ visitVariables(existing, input);
55
+ return existing;
56
+ },
57
+ initialValue: initialVariableInfo,
58
+ postProcess: post_process_1.postProcess
59
+ };
60
+ //# sourceMappingURL=variables.js.map
@@ -0,0 +1,33 @@
1
+ import type { RParseRequestFromFile, RParseRequestFromText } from '../r-bridge/retriever';
2
+ /**
3
+ * Statistics on skipped files, the time required, and more.
4
+ *
5
+ * @see extractUsageStatistics
6
+ * @see initialMetaStatistics
7
+ */
8
+ export interface MetaStatistics {
9
+ /**
10
+ * The number of requests that were parsed successfully
11
+ */
12
+ successfulParsed: number;
13
+ /**
14
+ * The processing time for each request
15
+ */
16
+ processingTimeMs: number[];
17
+ /**
18
+ * All failed requests (e.g., if they can not be converted to XML)
19
+ */
20
+ failedRequests: (RParseRequestFromText | RParseRequestFromFile)[];
21
+ /**
22
+ * Number of lines with each individual line length consumed for each request
23
+ */
24
+ lines: number[][];
25
+ /**
26
+ * The number of nodes in the normalized AST
27
+ */
28
+ numberOfNormalizedNodes: number[];
29
+ }
30
+ /**
31
+ * Returns an initial {@link MetaStatistics} object, using neutral defaults (like the empty list).
32
+ */
33
+ export declare function initialMetaStatistics(): MetaStatistics;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initialMetaStatistics = void 0;
4
+ /**
5
+ * Returns an initial {@link MetaStatistics} object, using neutral defaults (like the empty list).
6
+ */
7
+ function initialMetaStatistics() {
8
+ return {
9
+ successfulParsed: 0,
10
+ numberOfNormalizedNodes: [],
11
+ processingTimeMs: [],
12
+ failedRequests: [],
13
+ lines: []
14
+ };
15
+ }
16
+ exports.initialMetaStatistics = initialMetaStatistics;
17
+ //# sourceMappingURL=meta-statistics.js.map
@@ -0,0 +1,37 @@
1
+ export type AppendFnType = string | number | symbol;
2
+ export interface StatisticAppendProvider {
3
+ append(name: string, fn: AppendFnType, content: string): void;
4
+ }
5
+ export type DummyAppendMemoryMap = Map<string, Map<AppendFnType, string[]>>;
6
+ export declare class DummyAppendProvider implements StatisticAppendProvider {
7
+ private readonly map;
8
+ /**
9
+ * If you pass a map the dummy will log all append calls to the map, using the feature name and the appendage type as keys
10
+ *
11
+ * @param map - The map to log to
12
+ */
13
+ constructor(map?: DummyAppendMemoryMap | undefined);
14
+ append(name: string, fn: AppendFnType, content: string): void;
15
+ }
16
+ export declare const defaultStatisticsFileSuffix = ".txt";
17
+ /**
18
+ * Provides cached open connections for all files to connect.
19
+ * allowing to append to the same file often.
20
+ * <p>
21
+ * While we could simply reopen these files, it is safer/more performant to keep the connection open.
22
+ */
23
+ export declare class StatisticFileProvider implements StatisticAppendProvider {
24
+ readonly statisticsDirectory: string;
25
+ private readonly connections;
26
+ constructor(statisticsDirectory: string | undefined);
27
+ /**
28
+ * @param name - the name of the feature {@link Feature#name}
29
+ * @param fn - the name of the feature-aspect to record
30
+ */
31
+ private statisticsFile;
32
+ /**
33
+ * Append the given content to the information for a feature of the given name and function.
34
+ */
35
+ append(name: string, fn: AppendFnType, content: string): void;
36
+ private getHandle;
37
+ }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StatisticFileProvider = exports.defaultStatisticsFileSuffix = exports.DummyAppendProvider = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const log_1 = require("../../util/log");
10
+ const assert_1 = require("../../util/assert");
11
+ class DummyAppendProvider {
12
+ map;
13
+ /**
14
+ * If you pass a map the dummy will log all append calls to the map, using the feature name and the appendage type as keys
15
+ *
16
+ * @param map - The map to log to
17
+ */
18
+ constructor(map = undefined) {
19
+ this.map = map;
20
+ }
21
+ append(name, fn, content) {
22
+ if (log_1.log.settings.minLevel >= 1 /* LogLevel.Trace */) {
23
+ log_1.log.trace(`DummyAppendProvider: ${name} ${String(fn)} ${content}`);
24
+ }
25
+ if (this.map) {
26
+ const fnMap = this.map.get(name);
27
+ const contentArr = content.split('\n');
28
+ if (fnMap) {
29
+ const contentList = fnMap.get(fn);
30
+ if (contentList) {
31
+ contentList.push(...contentArr);
32
+ }
33
+ else {
34
+ // just in case that the map already had some entries
35
+ fnMap.set(fn, contentArr);
36
+ }
37
+ }
38
+ else {
39
+ this.map.set(name, new Map([[fn, contentArr]]));
40
+ }
41
+ }
42
+ }
43
+ }
44
+ exports.DummyAppendProvider = DummyAppendProvider;
45
+ exports.defaultStatisticsFileSuffix = '.txt';
46
+ /**
47
+ * Provides cached open connections for all files to connect.
48
+ * allowing to append to the same file often.
49
+ * <p>
50
+ * While we could simply reopen these files, it is safer/more performant to keep the connection open.
51
+ */
52
+ class StatisticFileProvider {
53
+ statisticsDirectory;
54
+ connections = new Map();
55
+ constructor(statisticsDirectory) {
56
+ (0, assert_1.guard)(statisticsDirectory !== undefined, 'Please supply an output directory!');
57
+ this.statisticsDirectory = statisticsDirectory;
58
+ // just to make sure that they are closed
59
+ process.on('beforeExit', () => {
60
+ this.connections.forEach(fd => {
61
+ fs_1.default.closeSync(fd);
62
+ });
63
+ });
64
+ }
65
+ /**
66
+ * @param name - the name of the feature {@link Feature#name}
67
+ * @param fn - the name of the feature-aspect to record
68
+ */
69
+ statisticsFile(name, fn) {
70
+ return path_1.default.join(this.statisticsDirectory, name, `${fn}${exports.defaultStatisticsFileSuffix}`);
71
+ }
72
+ /**
73
+ * Append the given content to the information for a feature of the given name and function.
74
+ */
75
+ append(name, fn, content) {
76
+ const descriptor = this.getHandle(name, String(fn));
77
+ fs_1.default.appendFileSync(descriptor, content + '\n', 'utf8');
78
+ }
79
+ getHandle(name, fn) {
80
+ const key = `${name}-${fn}`;
81
+ const fileHandle = this.connections.get(key);
82
+ if (fileHandle) {
83
+ return fileHandle;
84
+ }
85
+ // open the connection and ensure the location
86
+ const filepath = this.statisticsFile(name, String(fn));
87
+ const dirpath = path_1.default.dirname(filepath);
88
+ if (!fs_1.default.existsSync(dirpath)) {
89
+ fs_1.default.mkdirSync(dirpath, { recursive: true });
90
+ }
91
+ const fileDescriptor = fs_1.default.openSync(filepath, 'a');
92
+ this.connections.set(key, fileDescriptor);
93
+ return fileDescriptor;
94
+ }
95
+ }
96
+ exports.StatisticFileProvider = StatisticFileProvider;
97
+ //# sourceMappingURL=file-provider.js.map
@@ -0,0 +1,17 @@
1
+ import type { MetaStatistics } from '../meta-statistics';
2
+ import type { FeatureKey, FeatureStatistics } from '../features/feature';
3
+ interface MinMaxAvgMedian {
4
+ sum: number;
5
+ min: number;
6
+ max: number;
7
+ avg: number;
8
+ median: number;
9
+ }
10
+ export declare function minMaxAvgAndMedian(data: number[]): MinMaxAvgMedian;
11
+ export declare function statsString(data: MinMaxAvgMedian, suffix?: string): string;
12
+ export declare function printFeatureStatistics(statistics: {
13
+ features: FeatureStatistics;
14
+ meta: MetaStatistics;
15
+ }, features?: 'all' | Set<FeatureKey>): void;
16
+ export declare function printFeatureStatisticsEntry(info: Record<string, unknown>): void;
17
+ export {};
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printFeatureStatisticsEntry = exports.printFeatureStatistics = exports.statsString = exports.minMaxAvgAndMedian = void 0;
4
+ const ansi_1 = require("../../util/ansi");
5
+ const json_1 = require("../../util/json");
6
+ const feature_1 = require("../features/feature");
7
+ function minMaxAvgAndMedian(data) {
8
+ data = data.sort((a, b) => a - b);
9
+ const sum = data.reduce((a, b) => a + b, 0);
10
+ return {
11
+ sum,
12
+ min: data[0],
13
+ max: data[data.length - 1],
14
+ avg: sum / data.length,
15
+ median: data[Math.floor(data.length / 2)]
16
+ };
17
+ }
18
+ exports.minMaxAvgAndMedian = minMaxAvgAndMedian;
19
+ function formatStatNumber(num) {
20
+ return num === undefined ? '<?>' : Number(num.toFixed(3)).toLocaleString();
21
+ }
22
+ function statsString(data, suffix = '') {
23
+ return `[${formatStatNumber(data.min)}${suffix} .. ${formatStatNumber(data.max)}${suffix}] (avg: ${formatStatNumber(data.avg)}${suffix}, median: ${formatStatNumber(data.median)}${suffix})`;
24
+ }
25
+ exports.statsString = statsString;
26
+ function printFeatureStatistics(statistics, features = 'all') {
27
+ for (const feature of Object.keys(statistics.features)) {
28
+ if (features !== 'all' && !features.has(feature)) {
29
+ continue;
30
+ }
31
+ const meta = feature_1.ALL_FEATURES[feature];
32
+ console.log(`\n\n-----${meta.name}-------------`);
33
+ console.log(ansi_1.formatter.format(meta.description, { color: 7 /* Colors.White */, effect: ansi_1.ColorEffect.Foreground }));
34
+ printFeatureStatisticsEntry(statistics.features[feature]);
35
+ console.log('\n\n');
36
+ }
37
+ const linesPerFile = minMaxAvgAndMedian(statistics.meta.lines.map(l => l.length));
38
+ const lineLengths = minMaxAvgAndMedian(statistics.meta.lines.flat());
39
+ const processingTimesPerFile = minMaxAvgAndMedian(statistics.meta.processingTimeMs);
40
+ console.log(`processed ${statistics.meta.successfulParsed} files (skipped ${statistics.meta.failedRequests.length} due to errors):
41
+ \ttotal processing time: ${processingTimesPerFile.sum} ms
42
+ \t\tprocessing time range: ${statsString(processingTimesPerFile, ' ms')}
43
+ \ttotal number of lines: ${lineLengths.sum}
44
+ \t\tline range: ${statsString(linesPerFile)}
45
+ \t\tline length range: ${statsString(lineLengths, ' chars')}
46
+ `);
47
+ }
48
+ exports.printFeatureStatistics = printFeatureStatistics;
49
+ const pad = 3;
50
+ function printFeatureStatisticsEntry(info) {
51
+ let longestKey = 0;
52
+ let longestValue = 0;
53
+ const out = new Map();
54
+ for (const [key, value] of Object.entries(info)) {
55
+ if (key.length > longestKey) {
56
+ longestKey = key.length;
57
+ }
58
+ const valueString = JSON.stringify(value, json_1.jsonReplacer);
59
+ out.set(key, valueString);
60
+ if (valueString.length > longestValue) {
61
+ longestValue = valueString.length;
62
+ }
63
+ }
64
+ for (const [key, value] of out.entries()) {
65
+ console.log(`${key.padEnd(longestKey + pad)} ${value.padStart(longestValue)}`);
66
+ }
67
+ }
68
+ exports.printFeatureStatisticsEntry = printFeatureStatisticsEntry;
69
+ //# sourceMappingURL=print-stats.js.map
@@ -0,0 +1,37 @@
1
+ import type { DummyAppendMemoryMap, StatisticAppendProvider } from './file-provider';
2
+ /**
3
+ * Requires source information to be attached on parsing!
4
+ * <p>
5
+ * Returns the content of the node (i.e., the text content excluding the children)
6
+ */
7
+ export declare function extractNodeContent(node: Node): string;
8
+ /** by default, we do not write to anything */
9
+ export declare let statisticsFileProvider: StatisticAppendProvider;
10
+ /**
11
+ * Make the statistics write to a given output directory.
12
+ */
13
+ export declare function initFileProvider(outputDirectory: string): void;
14
+ /**
15
+ * Either ignore the statistics or write them to a given map (e.g., for testing).
16
+ *
17
+ * @param map - The map to write to, will not persist calls if no map is given
18
+ */
19
+ export declare function initDummyFileProvider(map?: DummyAppendMemoryMap): void;
20
+ /**
21
+ * Format used to dump each entry of a feature during collection.
22
+ */
23
+ export type StatisticsOutputFormat<T = string> = [
24
+ /** the collected value (like the assignment operator lexeme, ...) */
25
+ value: T,
26
+ /** the context of the information retrieval (e.g. the name of the file that contained the R source code) */
27
+ context: string | undefined
28
+ ];
29
+ /**
30
+ * Append the content of all nodes to the storage file for the given feature
31
+ * @param name - The name of the feature {@link Feature#name}
32
+ * @param fn - The name of the feature-aspect to record
33
+ * @param nodes - The nodes to append, you may pass already transformed string contents
34
+ * @param context - The context of the information retrieval (e.g. the name of the file that contained the R source code)
35
+ * @param unique - Should duplicate entries be removed on addition
36
+ */
37
+ export declare function appendStatisticsFile<T>(name: string, fn: keyof T, nodes: string[] | Node[] | object[], context: string | undefined, unique?: boolean): void;