firefly-compiler 0.5.35 → 0.5.37

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 (225) hide show
  1. package/.hintrc +4 -4
  2. package/.vscode/settings.json +4 -4
  3. package/bin/Release.ff +157 -154
  4. package/bin/firefly.mjs +1 -1
  5. package/compiler/Builder.ff +275 -277
  6. package/compiler/Compiler.ff +234 -233
  7. package/compiler/Dependencies.ff +186 -187
  8. package/compiler/DependencyLock.ff +17 -17
  9. package/compiler/Deriver.ff +23 -31
  10. package/compiler/Dictionaries.ff +1 -1
  11. package/compiler/Inference.ff +43 -20
  12. package/compiler/JsEmitter.ff +1437 -1282
  13. package/compiler/LspHook.ff +202 -202
  14. package/compiler/Main.ff +25 -24
  15. package/compiler/ModuleCache.ff +178 -178
  16. package/compiler/Parser.ff +36 -109
  17. package/compiler/Resolver.ff +5 -8
  18. package/compiler/Substitution.ff +1 -1
  19. package/compiler/Syntax.ff +1 -16
  20. package/compiler/Token.ff +9 -0
  21. package/compiler/Tokenizer.ff +4 -0
  22. package/compiler/Workspace.ff +88 -88
  23. package/core/.firefly/include/package.json +5 -5
  24. package/core/.firefly/package.ff +2 -2
  25. package/core/Any.ff +26 -30
  26. package/core/Array.ff +298 -265
  27. package/core/Atomic.ff +63 -64
  28. package/core/Box.ff +7 -7
  29. package/core/BrowserSystem.ff +40 -40
  30. package/core/Buffer.ff +185 -152
  31. package/core/BuildSystem.ff +156 -148
  32. package/core/Channel.ff +95 -92
  33. package/core/Char.ff +3 -2
  34. package/core/Core.ff +16 -23
  35. package/core/Crypto.ff +94 -96
  36. package/core/Equal.ff +41 -36
  37. package/core/Error.ff +15 -10
  38. package/core/FileHandle.ff +45 -37
  39. package/core/Float.ff +176 -200
  40. package/core/HttpClient.ff +142 -148
  41. package/core/Instant.ff +6 -8
  42. package/core/Int.ff +40 -24
  43. package/core/IntMap.ff +61 -39
  44. package/core/Js.ff +305 -0
  45. package/core/JsSystem.ff +135 -114
  46. package/core/JsValue.ff +303 -159
  47. package/core/Json.ff +423 -443
  48. package/core/List.ff +482 -486
  49. package/core/Lock.ff +108 -144
  50. package/core/Log.ff +25 -14
  51. package/core/NodeSystem.ff +198 -191
  52. package/core/Ordering.ff +160 -161
  53. package/core/Path.ff +377 -409
  54. package/core/Queue.ff +90 -0
  55. package/core/Random.ff +140 -134
  56. package/core/RbMap.ff +216 -216
  57. package/core/Serializable.ff +16 -13
  58. package/core/Show.ff +44 -43
  59. package/core/SourceLocation.ff +68 -68
  60. package/core/Stream.ff +1 -1
  61. package/core/String.ff +224 -202
  62. package/core/StringMap.ff +58 -36
  63. package/core/Task.ff +165 -149
  64. package/experimental/benchmarks/ListGrab.ff +23 -23
  65. package/experimental/benchmarks/ListGrab.java +55 -55
  66. package/experimental/benchmarks/Pyrotek45.ff +30 -30
  67. package/experimental/benchmarks/Pyrotek45.java +64 -64
  68. package/experimental/bidirectional/Bidi.ff +88 -88
  69. package/experimental/lines/Main.ff +40 -0
  70. package/experimental/random/Index.ff +53 -53
  71. package/experimental/random/Process.ff +120 -120
  72. package/experimental/random/RunLength.ff +65 -65
  73. package/experimental/random/Scrape.ff +51 -51
  74. package/experimental/random/Symbols.ff +73 -73
  75. package/experimental/random/Tensor.ff +52 -52
  76. package/experimental/random/Units.ff +36 -36
  77. package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
  78. package/experimental/s3/S3TestPut.ff +16 -16
  79. package/experimental/tests/TestJson.ff +26 -26
  80. package/firefly.sh +0 -0
  81. package/fireflysite/.firefly/package.ff +4 -4
  82. package/fireflysite/CommunityOverview.ff +20 -20
  83. package/fireflysite/CountingButtonDemo.ff +58 -58
  84. package/fireflysite/DocumentParser.ff +325 -331
  85. package/fireflysite/ExamplesOverview.ff +40 -40
  86. package/fireflysite/FrontPage.ff +344 -344
  87. package/fireflysite/GettingStarted.ff +45 -45
  88. package/fireflysite/Guide.ff +456 -456
  89. package/fireflysite/Main.ff +163 -152
  90. package/fireflysite/MatchingPasswordsDemo.ff +82 -82
  91. package/fireflysite/PackagesOverview.ff +49 -49
  92. package/fireflysite/PostgresqlDemo.ff +34 -34
  93. package/fireflysite/ReferenceAll.ff +18 -18
  94. package/fireflysite/ReferenceIntroduction.ff +11 -11
  95. package/fireflysite/Styles.ff +567 -567
  96. package/fireflysite/Test.ff +121 -62
  97. package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
  98. package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
  99. package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
  100. package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
  101. package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
  102. package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
  103. package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
  104. package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
  105. package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
  106. package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
  107. package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
  108. package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
  109. package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
  110. package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
  111. package/lsp/.firefly/package.ff +1 -1
  112. package/lsp/CompletionHandler.ff +827 -827
  113. package/lsp/Handler.ff +714 -714
  114. package/lsp/HoverHandler.ff +79 -79
  115. package/lsp/LanguageServer.ff +272 -272
  116. package/lsp/SignatureHelpHandler.ff +55 -55
  117. package/lsp/SymbolHandler.ff +181 -181
  118. package/lsp/TestReferences.ff +17 -17
  119. package/lsp/TestReferencesCase.ff +7 -7
  120. package/lsp/stderr.txt +1 -1
  121. package/lsp/stdout.txt +34 -34
  122. package/lux/.firefly/package.ff +1 -1
  123. package/lux/Css.ff +648 -648
  124. package/lux/CssTest.ff +48 -48
  125. package/lux/Lux.ff +608 -617
  126. package/lux/LuxEvent.ff +79 -116
  127. package/lux/Main.ff +123 -123
  128. package/lux/Main2.ff +143 -143
  129. package/lux/TestDry.ff +28 -28
  130. package/output/js/ff/compiler/Builder.mjs +72 -71
  131. package/output/js/ff/compiler/Compiler.mjs +19 -13
  132. package/output/js/ff/compiler/Dependencies.mjs +8 -7
  133. package/output/js/ff/compiler/DependencyLock.mjs +6 -4
  134. package/output/js/ff/compiler/Deriver.mjs +26 -24
  135. package/output/js/ff/compiler/Dictionaries.mjs +14 -18
  136. package/output/js/ff/compiler/Environment.mjs +6 -4
  137. package/output/js/ff/compiler/Inference.mjs +238 -164
  138. package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
  139. package/output/js/ff/compiler/JsImporter.mjs +20 -18
  140. package/output/js/ff/compiler/LspHook.mjs +12 -10
  141. package/output/js/ff/compiler/Main.mjs +61 -41
  142. package/output/js/ff/compiler/ModuleCache.mjs +10 -8
  143. package/output/js/ff/compiler/Parser.mjs +153 -669
  144. package/output/js/ff/compiler/Patterns.mjs +12 -10
  145. package/output/js/ff/compiler/Resolver.mjs +52 -78
  146. package/output/js/ff/compiler/Substitution.mjs +12 -16
  147. package/output/js/ff/compiler/Syntax.mjs +50 -341
  148. package/output/js/ff/compiler/Token.mjs +126 -4
  149. package/output/js/ff/compiler/Tokenizer.mjs +62 -52
  150. package/output/js/ff/compiler/Unification.mjs +74 -90
  151. package/output/js/ff/compiler/Wildcards.mjs +4 -2
  152. package/output/js/ff/compiler/Workspace.mjs +26 -20
  153. package/output/js/ff/core/Any.mjs +20 -20
  154. package/output/js/ff/core/Array.mjs +268 -175
  155. package/output/js/ff/core/AssetSystem.mjs +8 -6
  156. package/output/js/ff/core/Atomic.mjs +84 -52
  157. package/output/js/ff/core/Bool.mjs +6 -4
  158. package/output/js/ff/core/BrowserSystem.mjs +38 -29
  159. package/output/js/ff/core/Buffer.mjs +285 -133
  160. package/output/js/ff/core/BuildSystem.mjs +36 -56
  161. package/output/js/ff/core/Channel.mjs +250 -97
  162. package/output/js/ff/core/Char.mjs +5 -3
  163. package/output/js/ff/core/Core.mjs +28 -34
  164. package/output/js/ff/core/Crypto.mjs +30 -52
  165. package/output/js/ff/core/Duration.mjs +4 -2
  166. package/output/js/ff/core/Equal.mjs +14 -12
  167. package/output/js/ff/core/Error.mjs +17 -11
  168. package/output/js/ff/core/FileHandle.mjs +76 -38
  169. package/output/js/ff/core/Float.mjs +92 -160
  170. package/output/js/ff/core/HttpClient.mjs +208 -76
  171. package/output/js/ff/core/Instant.mjs +8 -10
  172. package/output/js/ff/core/Int.mjs +36 -26
  173. package/output/js/ff/core/IntMap.mjs +79 -33
  174. package/output/js/ff/core/Js.mjs +751 -0
  175. package/output/js/ff/core/JsSystem.mjs +54 -60
  176. package/output/js/ff/core/JsValue.mjs +294 -143
  177. package/output/js/ff/core/Json.mjs +443 -253
  178. package/output/js/ff/core/List.mjs +262 -214
  179. package/output/js/ff/core/Lock.mjs +156 -125
  180. package/output/js/ff/core/Log.mjs +20 -10
  181. package/output/js/ff/core/Map.mjs +10 -8
  182. package/output/js/ff/core/NodeSystem.mjs +189 -123
  183. package/output/js/ff/core/Nothing.mjs +4 -2
  184. package/output/js/ff/core/Option.mjs +40 -38
  185. package/output/js/ff/core/Ordering.mjs +26 -20
  186. package/output/js/ff/core/Pair.mjs +4 -2
  187. package/output/js/ff/core/Path.mjs +517 -315
  188. package/output/js/ff/core/Queue.mjs +306 -0
  189. package/output/js/ff/core/Random.mjs +141 -77
  190. package/output/js/ff/core/RbMap.mjs +36 -34
  191. package/output/js/ff/core/Serializable.mjs +44 -28
  192. package/output/js/ff/core/Set.mjs +6 -4
  193. package/output/js/ff/core/Show.mjs +8 -6
  194. package/output/js/ff/core/SourceLocation.mjs +4 -2
  195. package/output/js/ff/core/Stream.mjs +30 -50
  196. package/output/js/ff/core/String.mjs +263 -172
  197. package/output/js/ff/core/StringMap.mjs +77 -31
  198. package/output/js/ff/core/Task.mjs +91 -76
  199. package/output/js/ff/core/Try.mjs +20 -18
  200. package/output/js/ff/core/Unit.mjs +4 -2
  201. package/package.json +1 -1
  202. package/postgresql/Pg.ff +53 -59
  203. package/rpc/.firefly/package.ff +1 -1
  204. package/rpc/Rpc.ff +70 -70
  205. package/s3/.firefly/package.ff +1 -1
  206. package/s3/S3.ff +92 -94
  207. package/vscode/LICENSE.txt +21 -21
  208. package/vscode/Prepublish.ff +15 -15
  209. package/vscode/README.md +16 -16
  210. package/vscode/client/package-lock.json +544 -544
  211. package/vscode/client/package.json +22 -22
  212. package/vscode/client/src/extension.ts +104 -104
  213. package/vscode/icons/firefly-icon.svg +10 -10
  214. package/vscode/language-configuration.json +61 -61
  215. package/vscode/package-lock.json +3623 -3623
  216. package/vscode/package.json +1 -1
  217. package/vscode/snippets.json +241 -241
  218. package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
  219. package/webserver/.firefly/include/package.json +5 -5
  220. package/webserver/.firefly/package.ff +2 -2
  221. package/webserver/WebServer.ff +647 -685
  222. package/websocket/.firefly/package.ff +1 -1
  223. package/websocket/WebSocket.ff +100 -131
  224. package/core/UnsafeJs.ff +0 -42
  225. package/output/js/ff/core/UnsafeJs.mjs +0 -191
@@ -1,64 +1,64 @@
1
- /*
2
- nodeMain(system: NodeSystem) {
3
- benchmark()
4
- let time = system.mainTask().time {
5
- benchmark()
6
- }
7
- Log.trace(time.second.show())
8
- }
9
-
10
- benchmark() {
11
- mutable num = 20000
12
- let v = num
13
- mutable i = 1
14
- mutable j = 1
15
- mutable sum = 0
16
- while {i < v} {
17
- j = 1
18
- while {j < num - 1} {
19
- if(num % j == 0) {
20
- sum += j
21
- }
22
- j += 1
23
- }
24
- if(num == sum) {
25
- Log.show(sum)
26
- }
27
- sum = 0
28
- num -= 1
29
- i += 1
30
- }
31
- }
32
- */
33
-
34
- // Rewrite this in Java
35
-
36
- public class Pyrotek45 {
37
- public static void main(String[] args) {
38
- benchmark();
39
- long time = System.currentTimeMillis();
40
- benchmark();
41
- time = System.currentTimeMillis() - time;
42
- System.out.println(time / 1000.0);
43
- }
44
-
45
- public static void benchmark() {
46
- int num = 20000;
47
- int v = num;
48
- int i = 1;
49
- int j = 1;
50
- int sum = 0;
51
- for (i = 1; i < v; i++) {
52
- for (j = 1; j < num - 1; j++) {
53
- if (num % j == 0) {
54
- sum += j;
55
- }
56
- }
57
- if (num == sum) {
58
- System.out.println(sum);
59
- }
60
- sum = 0;
61
- num -= 1;
62
- }
63
- }
64
- }
1
+ /*
2
+ nodeMain(system: NodeSystem) {
3
+ benchmark()
4
+ let time = system.mainTask().time {
5
+ benchmark()
6
+ }
7
+ Log.trace(time.second.show())
8
+ }
9
+
10
+ benchmark() {
11
+ mutable num = 20000
12
+ let v = num
13
+ mutable i = 1
14
+ mutable j = 1
15
+ mutable sum = 0
16
+ while {i < v} {
17
+ j = 1
18
+ while {j < num - 1} {
19
+ if(num % j == 0) {
20
+ sum += j
21
+ }
22
+ j += 1
23
+ }
24
+ if(num == sum) {
25
+ Log.show(sum)
26
+ }
27
+ sum = 0
28
+ num -= 1
29
+ i += 1
30
+ }
31
+ }
32
+ */
33
+
34
+ // Rewrite this in Java
35
+
36
+ public class Pyrotek45 {
37
+ public static void main(String[] args) {
38
+ benchmark();
39
+ long time = System.currentTimeMillis();
40
+ benchmark();
41
+ time = System.currentTimeMillis() - time;
42
+ System.out.println(time / 1000.0);
43
+ }
44
+
45
+ public static void benchmark() {
46
+ int num = 20000;
47
+ int v = num;
48
+ int i = 1;
49
+ int j = 1;
50
+ int sum = 0;
51
+ for (i = 1; i < v; i++) {
52
+ for (j = 1; j < num - 1; j++) {
53
+ if (num % j == 0) {
54
+ sum += j;
55
+ }
56
+ }
57
+ if (num == sum) {
58
+ System.out.println(sum);
59
+ }
60
+ sum = 0;
61
+ num -= 1;
62
+ }
63
+ }
64
+ }
@@ -1,88 +1,88 @@
1
- data Expression {
2
- EVariable(name: String)
3
- EApply(function: Expression, argument: Expression)
4
- ELambda(variable: String, body: Expression)
5
- EAnnotate(type: Type, expression: Expression)
6
- }
7
-
8
- data Type(name: String, typeArguments: List[Type])
9
-
10
- data Context(variables: Map[String, Type])
11
-
12
- data TypeError(message: String)
13
-
14
-
15
- check(c0: Context, t0: Type, e0: Expression): Unit {
16
- e0.{
17
- | ELambda(x1, e1) =>
18
- t0.{
19
- | Type("Function", [t2, t3]) =>
20
- let c2 = c0.Context(variables = c0.variables.add(x1, t2))
21
- check(c2, t3, e1)
22
- t3
23
- | _ =>
24
- throw(TypeError("Function type not expected here"))
25
- }
26
- | _ =>
27
- let t1 = infer(c0, e0)
28
- checkSame(t0, t1)
29
- }
30
- }
31
-
32
-
33
- infer(c0: Context, e0: Expression): Type {
34
- e0.{
35
- | EVariable(x1) =>
36
- c0.variables.get(x1).{
37
- | None =>
38
- throw(TypeError("Variable not in scope: " + x1))
39
- | Some(t1) =>
40
- t1
41
- }
42
- | EApply(e1, e2) =>
43
- let t1 = infer(c0, e1)
44
- t1.{
45
- | Type("Function", [t2, t3]) =>
46
- check(c0, t2, e2)
47
- t3
48
- | _ =>
49
- throw(TypeError("Can't call non-functions"))
50
- }
51
- | ELambda _ =>
52
- throw(TypeError("Lambda functions must be explicitly typed"))
53
- | EAnnotate(t1, e1) =>
54
- checkType(t1)
55
- check(c0, t1, e1)
56
- t1
57
- }
58
- }
59
-
60
-
61
- checkSame(t1: Type, t2: Type): Unit {
62
- if(t1.name != t2.name) {throw(TypeError("Type mismatch: " + t1.name + " vs. " + t2.name + ""))}
63
- if(t1.typeArguments.size() != t2.typeArguments.size()) {
64
- throw(TypeError(
65
- "Type mismatch: " + t1.name + " with " +
66
- t1.typeArguments.size() + " vs. " + t2.typeArguments.size() +
67
- " type arguments"
68
- ))
69
- }
70
- t1.typeArguments.zip(t2.typeArguments).each {| Pair(t3, t4) =>
71
- checkSame(t3, t4)
72
- }
73
- }
74
-
75
-
76
- checkType(t0: Type): Unit {
77
- t0.{
78
- | Type("Function", [t1, t2]) =>
79
- checkType(t1)
80
- checkType(t2)
81
- | Type("Bool", []) =>
82
- | Type("Int", []) =>
83
- | Type("List", [t1]) =>
84
- checkType(t1)
85
- | _ =>
86
- throw(TypeError("Type is not well formed"))
87
- }
88
- }
1
+ data Expression {
2
+ EVariable(name: String)
3
+ EApply(function: Expression, argument: Expression)
4
+ ELambda(variable: String, body: Expression)
5
+ EAnnotate(type: Type, expression: Expression)
6
+ }
7
+
8
+ data Type(name: String, typeArguments: List[Type])
9
+
10
+ data Context(variables: Map[String, Type])
11
+
12
+ data TypeError(message: String)
13
+
14
+
15
+ check(c0: Context, t0: Type, e0: Expression): Unit {
16
+ e0.{
17
+ | ELambda(x1, e1) =>
18
+ t0.{
19
+ | Type("Function", [t2, t3]) =>
20
+ let c2 = c0.Context(variables = c0.variables.add(x1, t2))
21
+ check(c2, t3, e1)
22
+ t3
23
+ | _ =>
24
+ throw(TypeError("Function type not expected here"))
25
+ }
26
+ | _ =>
27
+ let t1 = infer(c0, e0)
28
+ checkSame(t0, t1)
29
+ }
30
+ }
31
+
32
+
33
+ infer(c0: Context, e0: Expression): Type {
34
+ e0.{
35
+ | EVariable(x1) =>
36
+ c0.variables.get(x1).{
37
+ | None =>
38
+ throw(TypeError("Variable not in scope: " + x1))
39
+ | Some(t1) =>
40
+ t1
41
+ }
42
+ | EApply(e1, e2) =>
43
+ let t1 = infer(c0, e1)
44
+ t1.{
45
+ | Type("Function", [t2, t3]) =>
46
+ check(c0, t2, e2)
47
+ t3
48
+ | _ =>
49
+ throw(TypeError("Can't call non-functions"))
50
+ }
51
+ | ELambda _ =>
52
+ throw(TypeError("Lambda functions must be explicitly typed"))
53
+ | EAnnotate(t1, e1) =>
54
+ checkType(t1)
55
+ check(c0, t1, e1)
56
+ t1
57
+ }
58
+ }
59
+
60
+
61
+ checkSame(t1: Type, t2: Type): Unit {
62
+ if(t1.name != t2.name) {throw(TypeError("Type mismatch: " + t1.name + " vs. " + t2.name + ""))}
63
+ if(t1.typeArguments.size() != t2.typeArguments.size()) {
64
+ throw(TypeError(
65
+ "Type mismatch: " + t1.name + " with " +
66
+ t1.typeArguments.size() + " vs. " + t2.typeArguments.size() +
67
+ " type arguments"
68
+ ))
69
+ }
70
+ t1.typeArguments.zip(t2.typeArguments).each {| Pair(t3, t4) =>
71
+ checkSame(t3, t4)
72
+ }
73
+ }
74
+
75
+
76
+ checkType(t0: Type): Unit {
77
+ t0.{
78
+ | Type("Function", [t1, t2]) =>
79
+ checkType(t1)
80
+ checkType(t2)
81
+ | Type("Bool", []) =>
82
+ | Type("Int", []) =>
83
+ | Type("List", [t1]) =>
84
+ checkType(t1)
85
+ | _ =>
86
+ throw(TypeError("Type is not well formed"))
87
+ }
88
+ }
@@ -0,0 +1,40 @@
1
+ nodeMain(system: NodeSystem) {
2
+ let extension = system.arguments().grab(0)
3
+ let root = system.arguments().grab(1)
4
+ let path = system.path(root)
5
+ let count = countPathLines(system, extension, path)
6
+ system.writeLine("Total lines: " + count)
7
+ }
8
+
9
+ countPathLines(system: NodeSystem, extension: String, path: Path): Int {
10
+ mutable count = 0
11
+ if(path.isFile()) {
12
+ if(path.extension() == extension) {
13
+ count += countFileLines(path)
14
+ }
15
+ } elseIf {path.isDirectory()} {
16
+ path.entries().each {p =>
17
+ let relative = p.path().relativeTo(path)
18
+ if(!relative.startsWith(".") && !relative.contains("_")) {
19
+ count += countPathLines(system, extension, p.path())
20
+ }
21
+ }
22
+ }
23
+ if(count != 0) {
24
+ system.writeLine(path.absolute() + " " + count + " lines")
25
+ }
26
+ count
27
+ }
28
+
29
+ countFileLines(path: Path): Int {
30
+ mutable count = 0
31
+ path.readText().lines().each {line =>
32
+ let trimmed = line.trim()
33
+ if(trimmed == "" || trimmed.startsWith("//")) {
34
+ // Multiline comments not supported yet
35
+ } else {
36
+ count += 1
37
+ }
38
+ }
39
+ count
40
+ }
@@ -1,53 +1,53 @@
1
- data Index[K, R]()
2
-
3
- extend self[K, R]: Index[K, R] {
4
-
5
- get(key: K): Option[R] {
6
- panic("Oops")
7
- }
8
-
9
- getUnique(key: K): Option[R] {
10
- panic("Oops")
11
- }
12
-
13
- getOnly(): Option[R] {
14
- panic("Oops")
15
- }
16
-
17
- grab(key: K): R {
18
- panic("Oops")
19
- }
20
-
21
- grabUnique(key: K): R {
22
- panic("Oops")
23
- }
24
-
25
- grabOnly(key: K): R {
26
- panic("Oops")
27
- }
28
-
29
- getAll(key: K): List[R] {
30
- panic("Oops")
31
- }
32
-
33
- range(from: K, until: K): Index[K, R] {
34
- panic("Oops")
35
- }
36
-
37
- join[R1](that: Index[K, R1]): Index[K, Pair[R, R1]] {
38
- panic("Oops")
39
- }
40
-
41
- keep(only: Set[K]): Index[K, R] {
42
- panic("Oops")
43
- }
44
-
45
- filter(body: (K, R) => Bool): Index[K, R] {
46
- panic("Oops")
47
- }
48
-
49
- withKeys[K1](body: (K, R) => K1): Index[K1, R] {
50
- panic("Oops")
51
- }
52
-
53
- }
1
+ data Index[K, R]()
2
+
3
+ extend self[K, R]: Index[K, R] {
4
+
5
+ get(key: K): Option[R] {
6
+ panic("Oops")
7
+ }
8
+
9
+ getUnique(key: K): Option[R] {
10
+ panic("Oops")
11
+ }
12
+
13
+ getOnly(): Option[R] {
14
+ panic("Oops")
15
+ }
16
+
17
+ grab(key: K): R {
18
+ panic("Oops")
19
+ }
20
+
21
+ grabUnique(key: K): R {
22
+ panic("Oops")
23
+ }
24
+
25
+ grabOnly(key: K): R {
26
+ panic("Oops")
27
+ }
28
+
29
+ getAll(key: K): List[R] {
30
+ panic("Oops")
31
+ }
32
+
33
+ range(from: K, until: K): Index[K, R] {
34
+ panic("Oops")
35
+ }
36
+
37
+ join[R1](that: Index[K, R1]): Index[K, Pair[R, R1]] {
38
+ panic("Oops")
39
+ }
40
+
41
+ keep(only: Set[K]): Index[K, R] {
42
+ panic("Oops")
43
+ }
44
+
45
+ filter(body: (K, R) => Bool): Index[K, R] {
46
+ panic("Oops")
47
+ }
48
+
49
+ withKeys[K1](body: (K, R) => K1): Index[K1, R] {
50
+ panic("Oops")
51
+ }
52
+
53
+ }
@@ -1,120 +1,120 @@
1
- capability Process {}
2
-
3
- data ProcessException(exitCode: Int)
4
-
5
- extend self: Process {
6
-
7
- readStream(): Stream[Buffer] {
8
-
9
- }
10
-
11
- readErrorStream(): Stream[Buffer] {
12
-
13
- }
14
-
15
- readBothStreams(): Stream[Pair[Bool, Buffer]] {
16
-
17
- }
18
-
19
- readBuffer(): Buffer {
20
-
21
- }
22
-
23
- readErrorBuffer(): Buffer {
24
-
25
- }
26
-
27
- readBothBuffers(): Pair[Buffer, Buffer] {
28
-
29
- }
30
-
31
- readText(): String {
32
-
33
- }
34
-
35
- readErrorText(): String {
36
-
37
- }
38
-
39
- readBothTexts(): Pair[String, String] {
40
-
41
- }
42
-
43
- writeStream(stream: Stream[Buffer]) {
44
-
45
- }
46
-
47
- writeBuffer(buffer: Buffer) {
48
-
49
- }
50
-
51
- writeText(text: String) {
52
-
53
- }
54
-
55
- writeLine(text: String) {
56
-
57
- }
58
-
59
- closeStandardIn() {
60
-
61
- }
62
-
63
- running(): Bool {
64
-
65
- }
66
-
67
- exitCode(): Int {
68
-
69
- }
70
-
71
- setEnvironment(environment: Map[String, String]) {
72
-
73
- }
74
-
75
- setEnvironmentVariable(name: String, value: String) {
76
-
77
- }
78
-
79
- setWorkingDirectory(path: Path) {
80
-
81
- }
82
-
83
- setArgumentZero(commandName: String) {
84
-
85
- }
86
-
87
- setRedirection(in: Bool = False, out: Bool = False, error: Bool = False) {
88
-
89
- }
90
-
91
- setCloseAfterWrite(close: Bool) {
92
-
93
- }
94
-
95
- }
96
-
97
- internalExecute[T](system: NodeSystem, command: String, arguments: List[String], body: Process => T): T {
98
- throw(GrabException) // TODO
99
- }
100
-
101
- main(system: NodeSystem) {
102
- let initialize = ""
103
- let hoverRequest = ""
104
- function parseInitializeResponse(stream: Stream[Buffer]) {
105
-
106
- }
107
- function parseHoverResponse(stream: Stream[Buffer]) {
108
-
109
- }
110
-
111
- system.execute("my-lsp", []) {process =>
112
- process.setCloseAfterWrite(False)
113
- let stream = process.readStream()
114
- process.writeText(initialize)
115
- let config = parseInitializeResponse(stream)
116
- process.writeText(hoverRequest)
117
- let hover = parseHoverResponse(stream)
118
- // ...
119
- }
120
- }
1
+ capability Process {}
2
+
3
+ data ProcessException(exitCode: Int)
4
+
5
+ extend self: Process {
6
+
7
+ readStream(): Stream[Buffer] {
8
+
9
+ }
10
+
11
+ readErrorStream(): Stream[Buffer] {
12
+
13
+ }
14
+
15
+ readBothStreams(): Stream[Pair[Bool, Buffer]] {
16
+
17
+ }
18
+
19
+ readBuffer(): Buffer {
20
+
21
+ }
22
+
23
+ readErrorBuffer(): Buffer {
24
+
25
+ }
26
+
27
+ readBothBuffers(): Pair[Buffer, Buffer] {
28
+
29
+ }
30
+
31
+ readText(): String {
32
+
33
+ }
34
+
35
+ readErrorText(): String {
36
+
37
+ }
38
+
39
+ readBothTexts(): Pair[String, String] {
40
+
41
+ }
42
+
43
+ writeStream(stream: Stream[Buffer]) {
44
+
45
+ }
46
+
47
+ writeBuffer(buffer: Buffer) {
48
+
49
+ }
50
+
51
+ writeText(text: String) {
52
+
53
+ }
54
+
55
+ writeLine(text: String) {
56
+
57
+ }
58
+
59
+ closeStandardIn() {
60
+
61
+ }
62
+
63
+ running(): Bool {
64
+
65
+ }
66
+
67
+ exitCode(): Int {
68
+
69
+ }
70
+
71
+ setEnvironment(environment: Map[String, String]) {
72
+
73
+ }
74
+
75
+ setEnvironmentVariable(name: String, value: String) {
76
+
77
+ }
78
+
79
+ setWorkingDirectory(path: Path) {
80
+
81
+ }
82
+
83
+ setArgumentZero(commandName: String) {
84
+
85
+ }
86
+
87
+ setRedirection(in: Bool = False, out: Bool = False, error: Bool = False) {
88
+
89
+ }
90
+
91
+ setCloseAfterWrite(close: Bool) {
92
+
93
+ }
94
+
95
+ }
96
+
97
+ internalExecute[T](system: NodeSystem, command: String, arguments: List[String], body: Process => T): T {
98
+ throw(GrabException) // TODO
99
+ }
100
+
101
+ main(system: NodeSystem) {
102
+ let initialize = ""
103
+ let hoverRequest = ""
104
+ function parseInitializeResponse(stream: Stream[Buffer]) {
105
+
106
+ }
107
+ function parseHoverResponse(stream: Stream[Buffer]) {
108
+
109
+ }
110
+
111
+ system.execute("my-lsp", []) {process =>
112
+ process.setCloseAfterWrite(False)
113
+ let stream = process.readStream()
114
+ process.writeText(initialize)
115
+ let config = parseInitializeResponse(stream)
116
+ process.writeText(hoverRequest)
117
+ let hover = parseHoverResponse(stream)
118
+ // ...
119
+ }
120
+ }