konpeito 0.1.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 (180) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-version +1 -0
  3. data/CHANGELOG.md +75 -0
  4. data/CONTRIBUTING.md +123 -0
  5. data/LICENSE +21 -0
  6. data/README.md +257 -0
  7. data/Rakefile +11 -0
  8. data/bin/konpeito +6 -0
  9. data/konpeito.gemspec +43 -0
  10. data/lib/konpeito/ast/typed_ast.rb +620 -0
  11. data/lib/konpeito/ast/visitor.rb +78 -0
  12. data/lib/konpeito/cache/cache_manager.rb +230 -0
  13. data/lib/konpeito/cache/dependency_graph.rb +192 -0
  14. data/lib/konpeito/cache.rb +8 -0
  15. data/lib/konpeito/cli/base_command.rb +187 -0
  16. data/lib/konpeito/cli/build_command.rb +220 -0
  17. data/lib/konpeito/cli/check_command.rb +104 -0
  18. data/lib/konpeito/cli/config.rb +231 -0
  19. data/lib/konpeito/cli/deps_command.rb +128 -0
  20. data/lib/konpeito/cli/doctor_command.rb +340 -0
  21. data/lib/konpeito/cli/fmt_command.rb +199 -0
  22. data/lib/konpeito/cli/init_command.rb +312 -0
  23. data/lib/konpeito/cli/lsp_command.rb +40 -0
  24. data/lib/konpeito/cli/run_command.rb +150 -0
  25. data/lib/konpeito/cli/test_command.rb +248 -0
  26. data/lib/konpeito/cli/watch_command.rb +212 -0
  27. data/lib/konpeito/cli.rb +301 -0
  28. data/lib/konpeito/codegen/builtin_methods.rb +229 -0
  29. data/lib/konpeito/codegen/cruby_backend.rb +1090 -0
  30. data/lib/konpeito/codegen/debug_info.rb +352 -0
  31. data/lib/konpeito/codegen/inliner.rb +486 -0
  32. data/lib/konpeito/codegen/jvm_backend.rb +197 -0
  33. data/lib/konpeito/codegen/jvm_generator.rb +13412 -0
  34. data/lib/konpeito/codegen/llvm_generator.rb +13191 -0
  35. data/lib/konpeito/codegen/loop_optimizer.rb +363 -0
  36. data/lib/konpeito/codegen/monomorphizer.rb +359 -0
  37. data/lib/konpeito/codegen/profile_runtime.c +341 -0
  38. data/lib/konpeito/codegen/profiler.rb +99 -0
  39. data/lib/konpeito/compiler.rb +592 -0
  40. data/lib/konpeito/dependency_resolver.rb +296 -0
  41. data/lib/konpeito/diagnostics/collector.rb +127 -0
  42. data/lib/konpeito/diagnostics/diagnostic.rb +237 -0
  43. data/lib/konpeito/diagnostics/renderer.rb +144 -0
  44. data/lib/konpeito/formatter/formatter.rb +1214 -0
  45. data/lib/konpeito/hir/builder.rb +7167 -0
  46. data/lib/konpeito/hir/nodes.rb +2465 -0
  47. data/lib/konpeito/lsp/document_manager.rb +820 -0
  48. data/lib/konpeito/lsp/server.rb +183 -0
  49. data/lib/konpeito/lsp/transport.rb +38 -0
  50. data/lib/konpeito/parser/prism_adapter.rb +65 -0
  51. data/lib/konpeito/platform.rb +103 -0
  52. data/lib/konpeito/profile/report.rb +136 -0
  53. data/lib/konpeito/rbs_inline/preprocessor.rb +199 -0
  54. data/lib/konpeito/stdlib/compression/compression.rb +72 -0
  55. data/lib/konpeito/stdlib/compression/compression.rbs +60 -0
  56. data/lib/konpeito/stdlib/compression/compression_native.c +415 -0
  57. data/lib/konpeito/stdlib/compression/extconf.rb +19 -0
  58. data/lib/konpeito/stdlib/crypto/crypto.rb +85 -0
  59. data/lib/konpeito/stdlib/crypto/crypto.rbs +74 -0
  60. data/lib/konpeito/stdlib/crypto/crypto_native.c +312 -0
  61. data/lib/konpeito/stdlib/crypto/extconf.rb +40 -0
  62. data/lib/konpeito/stdlib/http/extconf.rb +19 -0
  63. data/lib/konpeito/stdlib/http/http.rb +125 -0
  64. data/lib/konpeito/stdlib/http/http.rbs +57 -0
  65. data/lib/konpeito/stdlib/http/http_native.c +440 -0
  66. data/lib/konpeito/stdlib/json/extconf.rb +17 -0
  67. data/lib/konpeito/stdlib/json/json.rb +44 -0
  68. data/lib/konpeito/stdlib/json/json.rbs +33 -0
  69. data/lib/konpeito/stdlib/json/json_native.c +286 -0
  70. data/lib/konpeito/stdlib/ui/extconf.rb +216 -0
  71. data/lib/konpeito/stdlib/ui/konpeito_ui_native.cpp +1625 -0
  72. data/lib/konpeito/stdlib/ui/konpeito_ui_native.h +162 -0
  73. data/lib/konpeito/stdlib/ui/ui.rb +318 -0
  74. data/lib/konpeito/stdlib/ui/ui.rbs +247 -0
  75. data/lib/konpeito/type_checker/annotation_parser.rb +67 -0
  76. data/lib/konpeito/type_checker/hm_inferrer.rb +2565 -0
  77. data/lib/konpeito/type_checker/inferrer.rb +565 -0
  78. data/lib/konpeito/type_checker/rbs_loader.rb +1621 -0
  79. data/lib/konpeito/type_checker/type_resolver.rb +276 -0
  80. data/lib/konpeito/type_checker/types.rb +1434 -0
  81. data/lib/konpeito/type_checker/unification.rb +323 -0
  82. data/lib/konpeito/ui/animation/animated_state.rb +80 -0
  83. data/lib/konpeito/ui/animation/easing.rb +59 -0
  84. data/lib/konpeito/ui/animation/value_tween.rb +66 -0
  85. data/lib/konpeito/ui/app.rb +379 -0
  86. data/lib/konpeito/ui/box.rb +38 -0
  87. data/lib/konpeito/ui/castella.rb +70 -0
  88. data/lib/konpeito/ui/castella_native.rb +76 -0
  89. data/lib/konpeito/ui/chart/area_chart.rb +305 -0
  90. data/lib/konpeito/ui/chart/bar_chart.rb +288 -0
  91. data/lib/konpeito/ui/chart/base_chart.rb +210 -0
  92. data/lib/konpeito/ui/chart/chart_helpers.rb +79 -0
  93. data/lib/konpeito/ui/chart/gauge_chart.rb +171 -0
  94. data/lib/konpeito/ui/chart/heatmap_chart.rb +222 -0
  95. data/lib/konpeito/ui/chart/line_chart.rb +289 -0
  96. data/lib/konpeito/ui/chart/pie_chart.rb +219 -0
  97. data/lib/konpeito/ui/chart/scales.rb +77 -0
  98. data/lib/konpeito/ui/chart/scatter_chart.rb +303 -0
  99. data/lib/konpeito/ui/chart/stacked_bar_chart.rb +276 -0
  100. data/lib/konpeito/ui/column.rb +271 -0
  101. data/lib/konpeito/ui/core.rb +2199 -0
  102. data/lib/konpeito/ui/dsl.rb +443 -0
  103. data/lib/konpeito/ui/frame.rb +171 -0
  104. data/lib/konpeito/ui/frame_native.rb +494 -0
  105. data/lib/konpeito/ui/markdown/ast.rb +124 -0
  106. data/lib/konpeito/ui/markdown/mermaid/layout.rb +387 -0
  107. data/lib/konpeito/ui/markdown/mermaid/models.rb +232 -0
  108. data/lib/konpeito/ui/markdown/mermaid/parser.rb +519 -0
  109. data/lib/konpeito/ui/markdown/mermaid/renderer.rb +336 -0
  110. data/lib/konpeito/ui/markdown/parser.rb +805 -0
  111. data/lib/konpeito/ui/markdown/renderer.rb +639 -0
  112. data/lib/konpeito/ui/markdown/theme.rb +165 -0
  113. data/lib/konpeito/ui/render_node.rb +260 -0
  114. data/lib/konpeito/ui/row.rb +207 -0
  115. data/lib/konpeito/ui/spacer.rb +18 -0
  116. data/lib/konpeito/ui/style.rb +799 -0
  117. data/lib/konpeito/ui/theme.rb +563 -0
  118. data/lib/konpeito/ui/themes/material.rb +35 -0
  119. data/lib/konpeito/ui/themes/tokyo_night.rb +6 -0
  120. data/lib/konpeito/ui/widgets/button.rb +103 -0
  121. data/lib/konpeito/ui/widgets/calendar.rb +1034 -0
  122. data/lib/konpeito/ui/widgets/checkbox.rb +119 -0
  123. data/lib/konpeito/ui/widgets/container.rb +91 -0
  124. data/lib/konpeito/ui/widgets/data_table.rb +667 -0
  125. data/lib/konpeito/ui/widgets/divider.rb +29 -0
  126. data/lib/konpeito/ui/widgets/image.rb +105 -0
  127. data/lib/konpeito/ui/widgets/input.rb +485 -0
  128. data/lib/konpeito/ui/widgets/markdown.rb +57 -0
  129. data/lib/konpeito/ui/widgets/modal.rb +163 -0
  130. data/lib/konpeito/ui/widgets/multiline_input.rb +968 -0
  131. data/lib/konpeito/ui/widgets/multiline_text.rb +180 -0
  132. data/lib/konpeito/ui/widgets/net_image.rb +100 -0
  133. data/lib/konpeito/ui/widgets/progress_bar.rb +70 -0
  134. data/lib/konpeito/ui/widgets/radio_buttons.rb +93 -0
  135. data/lib/konpeito/ui/widgets/slider.rb +133 -0
  136. data/lib/konpeito/ui/widgets/switch.rb +84 -0
  137. data/lib/konpeito/ui/widgets/tabs.rb +157 -0
  138. data/lib/konpeito/ui/widgets/text.rb +110 -0
  139. data/lib/konpeito/ui/widgets/tree.rb +426 -0
  140. data/lib/konpeito/version.rb +5 -0
  141. data/lib/konpeito.rb +109 -0
  142. data/test_native_array.rb +172 -0
  143. data/test_native_array_class.rb +197 -0
  144. data/test_native_class.rb +151 -0
  145. data/tools/konpeito-asm/build.sh +65 -0
  146. data/tools/konpeito-asm/lib/asm-9.7.1.jar +0 -0
  147. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KArray.class +0 -0
  148. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KCompression.class +0 -0
  149. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KConditionVariable.class +0 -0
  150. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KCrypto.class +0 -0
  151. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KFile.class +0 -0
  152. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KHTTP.class +0 -0
  153. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KHash.class +0 -0
  154. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KJSON$Parser.class +0 -0
  155. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KJSON.class +0 -0
  156. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KMath.class +0 -0
  157. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KRactor.class +0 -0
  158. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KRactorPort.class +0 -0
  159. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KSizedQueue.class +0 -0
  160. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KThread.class +0 -0
  161. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/KTime.class +0 -0
  162. data/tools/konpeito-asm/runtime-classes/konpeito/runtime/RubyDispatch.class +0 -0
  163. data/tools/konpeito-asm/src/ClassIntrospector.java +312 -0
  164. data/tools/konpeito-asm/src/KonpeitoAssembler.java +659 -0
  165. data/tools/konpeito-asm/src/konpeito/runtime/KArray.java +390 -0
  166. data/tools/konpeito-asm/src/konpeito/runtime/KCompression.java +168 -0
  167. data/tools/konpeito-asm/src/konpeito/runtime/KConditionVariable.java +48 -0
  168. data/tools/konpeito-asm/src/konpeito/runtime/KCrypto.java +151 -0
  169. data/tools/konpeito-asm/src/konpeito/runtime/KFile.java +100 -0
  170. data/tools/konpeito-asm/src/konpeito/runtime/KHTTP.java +113 -0
  171. data/tools/konpeito-asm/src/konpeito/runtime/KHash.java +228 -0
  172. data/tools/konpeito-asm/src/konpeito/runtime/KJSON.java +405 -0
  173. data/tools/konpeito-asm/src/konpeito/runtime/KMath.java +54 -0
  174. data/tools/konpeito-asm/src/konpeito/runtime/KRactor.java +244 -0
  175. data/tools/konpeito-asm/src/konpeito/runtime/KRactorPort.java +53 -0
  176. data/tools/konpeito-asm/src/konpeito/runtime/KSizedQueue.java +49 -0
  177. data/tools/konpeito-asm/src/konpeito/runtime/KThread.java +49 -0
  178. data/tools/konpeito-asm/src/konpeito/runtime/KTime.java +53 -0
  179. data/tools/konpeito-asm/src/konpeito/runtime/RubyDispatch.java +416 -0
  180. metadata +267 -0
@@ -0,0 +1,119 @@
1
+ # Checkbox widget - toggleable checkbox with label
2
+ # Port of Castella Checkbox
3
+
4
+ class Checkbox < Widget
5
+ def initialize(label)
6
+ super()
7
+ @label = label
8
+ @checked = false
9
+ @on_toggle_handler = nil
10
+ @has_toggle_handler = false
11
+ @font_size_val = 14.0
12
+ @check_color = 0
13
+ @text_color_val = 0
14
+ @box_color = 0
15
+ @hover_color = 0
16
+ @custom_check = false
17
+ @custom_text = false
18
+ @hovered = false
19
+ @width_policy = CONTENT
20
+ @height_policy = CONTENT
21
+ end
22
+
23
+ def checked(v)
24
+ @checked = v
25
+ mark_dirty
26
+ self
27
+ end
28
+
29
+ def is_checked
30
+ @checked
31
+ end
32
+
33
+ def on_toggle(&block)
34
+ @on_toggle_handler = block
35
+ @has_toggle_handler = true
36
+ self
37
+ end
38
+
39
+ def font_size(s)
40
+ @font_size_val = s
41
+ self
42
+ end
43
+
44
+ def check_color(c)
45
+ @check_color = c
46
+ @custom_check = true
47
+ self
48
+ end
49
+
50
+ def text_color(c)
51
+ @text_color_val = c
52
+ @custom_text = true
53
+ self
54
+ end
55
+
56
+ def mouse_up(ev)
57
+ if @checked
58
+ @checked = false
59
+ else
60
+ @checked = true
61
+ end
62
+ mark_dirty
63
+ update
64
+ if @has_toggle_handler
65
+ @on_toggle_handler.call(@checked)
66
+ end
67
+ end
68
+
69
+ def mouse_over
70
+ @hovered = true
71
+ mark_dirty
72
+ update
73
+ end
74
+
75
+ def mouse_out
76
+ @hovered = false
77
+ mark_dirty
78
+ update
79
+ end
80
+
81
+ def measure(painter)
82
+ tw = painter.measure_text_width(@label, $theme.font_family, @font_size_val)
83
+ th = painter.measure_text_height($theme.font_family, @font_size_val)
84
+ box_size = th
85
+ gap = 8.0
86
+ Size.new(box_size + gap + tw, th)
87
+ end
88
+
89
+ def redraw(painter, completely)
90
+ th = painter.measure_text_height($theme.font_family, @font_size_val)
91
+ ascent = painter.get_text_ascent($theme.font_family, @font_size_val)
92
+ box_size = th
93
+ gap = 8.0
94
+
95
+ # Resolve colors from theme
96
+ chk_c = @custom_check ? @check_color : $theme.accent
97
+ txt_c = @custom_text ? @text_color_val : $theme.text_primary
98
+ box_c = $theme.border
99
+ hov_c = $theme.bg_secondary
100
+
101
+ # Checkbox box border
102
+ border_c = @hovered ? hov_c : box_c
103
+ painter.stroke_rect(0.0, 0.0, box_size, box_size, border_c, 1.5)
104
+
105
+ # Checkmark fill (when checked)
106
+ if @checked
107
+ inset = 3.0
108
+ painter.fill_rect(inset, inset, box_size - inset * 2.0, box_size - inset * 2.0, chk_c)
109
+ end
110
+
111
+ # Label text
112
+ painter.draw_text(@label, box_size + gap, ascent, $theme.font_family, @font_size_val, txt_c)
113
+ end
114
+ end
115
+
116
+ # Top-level helper
117
+ def Checkbox(label)
118
+ Checkbox.new(label)
119
+ end
@@ -0,0 +1,91 @@
1
+ # Container widget - background + border + padding wrapper
2
+ # Port of Castella Container
3
+
4
+ class Container < Layout
5
+ def initialize(child)
6
+ super()
7
+ add(child) if child
8
+ @bg_color = 0
9
+ @border_color_val = 0
10
+ @custom_bg = false
11
+ @custom_border = false
12
+ @radius = 4.0
13
+ @border_width = 1.0
14
+ @pad_top = 12.0
15
+ @pad_right = 12.0
16
+ @pad_bottom = 12.0
17
+ @pad_left = 12.0
18
+ end
19
+
20
+ def bg_color(c)
21
+ @bg_color = c
22
+ @custom_bg = true
23
+ self
24
+ end
25
+
26
+ def border_color(c)
27
+ @border_color_val = c
28
+ @custom_border = true
29
+ self
30
+ end
31
+
32
+ def border_radius(r)
33
+ @radius = r
34
+ self
35
+ end
36
+
37
+ def padding(t, r, b, l)
38
+ @pad_top = t
39
+ @pad_right = r
40
+ @pad_bottom = b
41
+ @pad_left = l
42
+ self
43
+ end
44
+
45
+ def relocate_children(painter)
46
+ if @children.length > 0
47
+ c = @children[0]
48
+ c.move_xy(@x + @pad_left, @y + @pad_top)
49
+ inner_w = @width - @pad_left - @pad_right
50
+ inner_h = @height - @pad_top - @pad_bottom
51
+ if inner_w < 0.0
52
+ inner_w = 0.0
53
+ end
54
+ if inner_h < 0.0
55
+ inner_h = 0.0
56
+ end
57
+ c.resize_wh(inner_w, inner_h)
58
+ end
59
+ end
60
+
61
+ def redraw(painter, completely)
62
+ bg_c = 0
63
+ if @custom_bg
64
+ bg_c = @bg_color
65
+ else
66
+ bg_c = $theme.bg_primary
67
+ end
68
+ if completely || is_dirty || is_subtree_dirty
69
+ brd_c = 0
70
+ if @custom_border
71
+ brd_c = @border_color_val
72
+ else
73
+ brd_c = $theme.border
74
+ end
75
+ painter.fill_round_rect(0.0, 0.0, @width, @height, @radius, bg_c)
76
+ painter.stroke_round_rect(0.0, 0.0, @width, @height, @radius, brd_c, @border_width)
77
+ end
78
+ # Set bg_clear_color so redraw_children uses Container's background for child clearing
79
+ @bg_clear_color = bg_c
80
+ # Propagate to child layouts via global (save/restore for nesting)
81
+ saved_bg = $__bg_clear_color
82
+ $__bg_clear_color = bg_c
83
+ super(painter, completely)
84
+ $__bg_clear_color = saved_bg
85
+ end
86
+ end
87
+
88
+ # Top-level helper
89
+ def Container(child)
90
+ Container.new(child)
91
+ end