firefly-compiler 0.5.69 → 0.5.71

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.
@@ -145,7 +145,7 @@ extend self: Dependencies {
145
145
  process(fetch: HttpClient, dependencyLock: DependencyLock, path: Path): ResolvedDependencies {
146
146
  let workspace = Workspace.loadWorkspace(path)
147
147
  let self = Dependencies(workspace, [].toMap(), [].toMap(), [].toSet())
148
- let packageInfo = self.loadPackageInfo(PackagePair("script", "script"), path).else {
148
+ let packageInfo = self.loadPackageInfo(Syntax.scriptPackagePair, path).else {
149
149
  if(!path.exists()) {
150
150
  throw(CompileError(Location(path.absolute(), 1, 1), "File not found"))
151
151
  } else {
package/compiler/Main.ff CHANGED
@@ -150,7 +150,7 @@ main(system: NodeSystem): Unit {
150
150
  let columns = filePaths.flatMap {filePath =>
151
151
  let path = system.path(filePath)
152
152
  let code = path.readText()
153
- let packagePair = PackagePair("script", "script")
153
+ let packagePair = Syntax.scriptPackagePair
154
154
  let moduleKey = ModuleKey(packagePair, [], path.base().removeLast(".ff").grab())
155
155
  let tokens = Tokenizer.tokenize(path.absolute(), code, None, False)
156
156
  let parser = Parser.new(moduleKey, tokens, True, LspHook.disabled())
@@ -47,6 +47,8 @@ extend self: PackagePair {
47
47
  }
48
48
  }
49
49
 
50
+ scriptPackagePair: PackagePair = PackagePair("script", "script")
51
+
50
52
  data ModuleKey(
51
53
  packagePair: PackagePair
52
54
  folders: List[String]
package/core/Js.ff CHANGED
@@ -136,10 +136,10 @@ awaitCancellablePromise[T](body: (T => Unit, Error => Unit, (Bool => Unit) => Un
136
136
  }
137
137
  }
138
138
  }
139
- let jsReject = Js->{e => doReject(e?)}
140
139
  let controller = Js.controller()
141
- controller->signal->addEventListener("abort", jsReject)
142
- cleanups.push({_ => controller->signal->removeEventListener("abort", jsReject)})
140
+ let jsDoReject = Js->{_ => doReject(controller->signal->reason?)}
141
+ controller->signal->addEventListener("abort", jsDoReject)
142
+ cleanups.push({_ => controller->signal->removeEventListener("abort", jsDoReject)})
143
143
  body(doResolve, doReject, {cleanup => cleanups.push(cleanup)})
144
144
  }))?
145
145
  }
package/core/Path.ff CHANGED
@@ -336,7 +336,7 @@ internalReadStream(createReadStream: () => JsValue): Stream[Buffer] {
336
336
  if(jsStream->destroyed?) {None} else:
337
337
  Js.withSignal {signal =>
338
338
  let promise = Js->Promise->(Js->{resolve, reject =>
339
- let jsDoReject = Js->{doReject(_)}
339
+ let jsDoReject = Js->{_ => doReject(signal->reason?)}
340
340
  doResolve = {
341
341
  signal->removeEventListener("abort", jsDoReject)
342
342
  doResolve = emptyResolve
@@ -369,9 +369,10 @@ internalWriteStream(path: Path, stream: Stream[Buffer], flags: String) {
369
369
  if(!writable->write(Js->Uint8Array->(buffer!->buffer, buffer!->byteOffset, buffer!->byteLength))?) {
370
370
  Js.withSignal {signal =>
371
371
  Js.await(Js->Promise->(Js->{resolve, reject =>
372
- signal->addEventListener("abort", reject)
372
+ let jsDoReject = Js->{_ => reject->callValue1(signal->reason?)}
373
+ signal->addEventListener("abort", jsDoReject)
373
374
  writable->once("drain", Js->{
374
- signal->removeEventListener("abort", reject)
375
+ signal->removeEventListener("abort", jsDoReject)
375
376
  resolve.callValue0()
376
377
  })
377
378
  }))
@@ -240,7 +240,7 @@ completionsToJson(completions: List[CompletionInfo]): Json {
240
240
  importCompletion(moduleKeys: List[ModuleKey]): List[CompletionInfo] {
241
241
  moduleKeys.map {moduleKey =>
242
242
  let label = moduleKey.folders.map {_ + "."}.join() + moduleKey.name
243
- let extra = if(moduleKey.packagePair.name == "script" && moduleKey.packagePair.group == "script") {
243
+ let extra = if(moduleKey.packagePair == Syntax.scriptPackagePair) {
244
244
  ""
245
245
  } else {
246
246
  " from " + moduleKey.packagePair.groupName(":")
@@ -374,9 +374,7 @@ completion(
374
374
 
375
375
  makeAutoimportCompletion(info: ImportSymbolInfo, importLine: Int, name: String, isType: Bool): CompletionInfo {
376
376
  let moduleName = info.moduleKey.folders.map {_ + "."}.join() + info.moduleKey.name
377
- let fromName = if(
378
- info.moduleKey.packagePair.name == "script" && info.moduleKey.packagePair.group == "script"
379
- ) {
377
+ let fromName = if(info.moduleKey.packagePair == Syntax.scriptPackagePair) {
380
378
  ""
381
379
  } else {
382
380
  info.moduleKey.packagePair.groupName(":")
package/lsp/Handler.ff CHANGED
@@ -76,7 +76,6 @@ extend self: Handler {
76
76
  let diagnostics = self.handleFocusDiagnostic(system, parameters, version)
77
77
  [Pair("textDocument/publishDiagnostics", diagnostics)]
78
78
  | "custom/focusDocument" =>
79
- self.importSymbolsCache = Pair("", [])
80
79
  let diagnostics = self.handleFocusDiagnostic(system, parameters, version)
81
80
  [Pair("textDocument/publishDiagnostics", diagnostics)]
82
81
  | "workspace/didRenameFiles" =>
@@ -283,7 +282,7 @@ extend self: Handler {
283
282
  let lspHook = LspHook.new(at = None, definedAt = None, insertIdentifier = False, trackSymbols = True)
284
283
  let code = self.virtualFiles.get(path.absolute()).else {path.readText()}
285
284
  let tokens = Tokenizer.tokenize(path.absolute(), code, None, True)
286
- let dummyModuleKey = ModuleKey(PackagePair("script", "script"), [], path.base())
285
+ let dummyModuleKey = ModuleKey(Syntax.scriptPackagePair, [], path.base())
287
286
  let parser = Parser.new(dummyModuleKey, tokens, False, lspHook)
288
287
  parser.parseModuleWithPackageInfo()
289
288
  SymbolHandler.readAllSymbols(lspHook.results())
@@ -339,9 +338,14 @@ extend self: Handler {
339
338
  let creates = parameters.grab("changes").grabArray().filter {_.field("type").grabInt() == 1}
340
339
  let changes = parameters.grab("changes").grabArray().filter {_.field("type").grabInt() == 2}
341
340
  let deletes = parameters.grab("changes").grabArray().filter {_.field("type").grabInt() == 3}
342
- creates.map {_.field("uri").grabString()}.each {self.moduleCache.invalidate(system.pathFromUrl(_).absolute())}
343
- changes.map {_.field("uri").grabString()}.each {self.moduleCache.invalidate(system.pathFromUrl(_).absolute())}
344
- deletes.map {_.field("uri").grabString()}.each {self.moduleCache.invalidate(system.pathFromUrl(_).absolute())}
341
+ function invalidate(url: String) {
342
+ let path = system.pathFromUrl(url)
343
+ if(self.importSymbolsCache.first != path.absolute()) {self.importSymbolsCache = Pair("", [])}
344
+ self.moduleCache.invalidate(path.absolute())
345
+ }
346
+ creates.map {_.field("uri").grabString()}.each {invalidate(_)}
347
+ changes.map {_.field("uri").grabString()}.each {invalidate(_)}
348
+ deletes.map {_.field("uri").grabString()}.each {invalidate(_)}
345
349
  let diagnostics = self.handleClearDiagnostic(system, [Pair("files", Json.array(deletes))].toMap())
346
350
  diagnostics.map {Pair("textDocument/publishDiagnostics", _)}
347
351
  }
@@ -358,6 +362,7 @@ extend self: Handler {
358
362
  handleDidChange(system: NodeSystem, parameters: Map[String, Json]): Unit {
359
363
  let uri = parameters.grab("textDocument").field("uri").grabString()
360
364
  let path = system.pathFromUrl(uri)
365
+ if(self.importSymbolsCache.first != path.absolute()) {self.importSymbolsCache = Pair("", [])}
361
366
  self.responseCache = Map.new()
362
367
  self.fileSymbolsCache = self.fileSymbolsCache.remove(path.absolute())
363
368
  self.moduleCache.invalidate(path.absolute())
@@ -428,7 +433,7 @@ extend self: Handler {
428
433
  try {
429
434
  let code = self.virtualFiles.get(cursorAt.file).else {system.path(cursorAt.file).readText()}
430
435
  let tokens = Tokenizer.tokenize(cursorAt.file, code, None, True)
431
- let dummyModuleKey = ModuleKey(PackagePair("script", "script"), [], "<LSP>")
436
+ let dummyModuleKey = ModuleKey(Syntax.scriptPackagePair, [], "<LSP>")
432
437
  let parser = Parser.new(dummyModuleKey, tokens, False, lspHook)
433
438
  parser.parseModuleWithPackageInfo()
434
439
  } tryCatch {| CompileError(at, message), error =>
@@ -651,7 +656,7 @@ extend self: Handler {
651
656
  let imports = try {
652
657
  let code = self.virtualFiles.get(modulePath.absolute()).else {modulePath.readText()}
653
658
  let tokens = Tokenizer.tokenize(modulePath.absolute(), code, Some(lspHook.at), True)
654
- let parser = Parser.new(ModuleKey(PackagePair("", ""), [], ""), tokens, True, lspHook)
659
+ let parser = Parser.new(ModuleKey(Syntax.scriptPackagePair, [], ""), tokens, True, lspHook)
655
660
  tokens.each {token =>
656
661
  if(token.is(LKeyword) && token.rawIs4("import", "include", "package", "dependency")) {
657
662
  importLine = token.startLine + 1
@@ -73,13 +73,11 @@ main(system: NodeSystem) {
73
73
  responseChannel.write(Pair(body, message.method))
74
74
  }
75
75
  } catchAny {error =>
76
- // TODO: Sometimes the "Error" is an "Event" instead of type "abort" - why?
77
- let problem = if(error.name() == "AbortError" || error!->type === "abort") {
76
+ let problem = if(error.name() == "AbortError") {
78
77
  Log.trace("LS ABORT")
79
78
  Error(-32800, "Request cancelled")
80
79
  } else {
81
80
  Log.trace("LS ERROR " + error.name() + ": " + error.message())
82
- // Log.trace("LS ERROR MORE: " + error!->type?)
83
81
  Log.trace("BEGIN LS ERROR STACK TRACE")
84
82
  Log.trace(error.stack())
85
83
  Log.trace("END LS ERROR STACK TRACE")
@@ -123,7 +123,7 @@ return {mainPackagePair_, packages_, packagePaths_, singleFilePackages_};
123
123
  export function process_(fetch_, dependencyLock_, path_) {
124
124
  const workspace_ = ff_compiler_Workspace.loadWorkspace_(path_);
125
125
  const self_ = ff_compiler_Dependencies.Dependencies(workspace_, ff_core_List.List_toMap([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toMap([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toSet([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair));
126
- const packageInfo_ = ff_core_Option.Option_else(ff_compiler_Dependencies.Dependencies_loadPackageInfo(self_, ff_compiler_Syntax.PackagePair("script", "script"), path_), (() => {
126
+ const packageInfo_ = ff_core_Option.Option_else(ff_compiler_Dependencies.Dependencies_loadPackageInfo(self_, ff_compiler_Syntax.scriptPackagePair_, path_), (() => {
127
127
  if((!ff_core_Path.Path_exists(path_, false, false, false))) {
128
128
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Syntax.Location(ff_core_Path.Path_absolute(path_), 1, 1), "File not found"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
129
129
  } else {
@@ -167,7 +167,7 @@ tar_.extract({file: tarGzPath_.absolutePath_, cwd: path_.absolutePath_, strict:
167
167
  export async function process_$(fetch_, dependencyLock_, path_, $task) {
168
168
  const workspace_ = (await ff_compiler_Workspace.loadWorkspace_$(path_, $task));
169
169
  const self_ = ff_compiler_Dependencies.Dependencies(workspace_, ff_core_List.List_toMap([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toMap([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toSet([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair));
170
- const packageInfo_ = (await ff_core_Option.Option_else$((await ff_compiler_Dependencies.Dependencies_loadPackageInfo$(self_, ff_compiler_Syntax.PackagePair("script", "script"), path_, $task)), (async ($task) => {
170
+ const packageInfo_ = (await ff_core_Option.Option_else$((await ff_compiler_Dependencies.Dependencies_loadPackageInfo$(self_, ff_compiler_Syntax.scriptPackagePair_, path_, $task)), (async ($task) => {
171
171
  if((!(await ff_core_Path.Path_exists$(path_, false, false, false, $task)))) {
172
172
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(ff_compiler_Syntax.Location((await ff_core_Path.Path_absolute$(path_, $task)), 1, 1), "File not found"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
173
173
  } else {
@@ -246,7 +246,7 @@ const filePaths_ = command_a.filePaths_;
246
246
  const columns_ = ff_core_List.List_flatMap(filePaths_, ((filePath_) => {
247
247
  const path_ = ff_core_NodeSystem.NodeSystem_path(system_, filePath_);
248
248
  const code_ = ff_core_Path.Path_readText(path_);
249
- const packagePair_ = ff_compiler_Syntax.PackagePair("script", "script");
249
+ const packagePair_ = ff_compiler_Syntax.scriptPackagePair_;
250
250
  const moduleKey_ = ff_compiler_Syntax.ModuleKey(packagePair_, [], ff_core_Option.Option_grab(ff_core_String.String_removeLast(ff_core_Path.Path_base(path_), ".ff")));
251
251
  const tokens_ = ff_compiler_Tokenizer.tokenize_(ff_core_Path.Path_absolute(path_), code_, ff_core_Option.None(), false);
252
252
  const parser_ = ff_compiler_Parser.new_(moduleKey_, tokens_, true, ff_compiler_LspHook.disabled_());
@@ -650,7 +650,7 @@ const filePaths_ = command_a.filePaths_;
650
650
  const columns_ = (await ff_core_List.List_flatMap$(filePaths_, (async (filePath_, $task) => {
651
651
  const path_ = (await ff_core_NodeSystem.NodeSystem_path$(system_, filePath_, $task));
652
652
  const code_ = (await ff_core_Path.Path_readText$(path_, $task));
653
- const packagePair_ = ff_compiler_Syntax.PackagePair("script", "script");
653
+ const packagePair_ = ff_compiler_Syntax.scriptPackagePair_;
654
654
  const moduleKey_ = ff_compiler_Syntax.ModuleKey(packagePair_, [], ff_core_Option.Option_grab(ff_core_String.String_removeLast((await ff_core_Path.Path_base$(path_, $task)), ".ff")));
655
655
  const tokens_ = ff_compiler_Tokenizer.tokenize_((await ff_core_Path.Path_absolute$(path_, $task)), code_, ff_core_Option.None(), false);
656
656
  const parser_ = ff_compiler_Parser.new_(moduleKey_, tokens_, true, ff_compiler_LspHook.disabled_());
@@ -361,7 +361,7 @@ export function Version(at_, major_, minor_, patch_) {
361
361
  return {at_, major_, minor_, patch_};
362
362
  }
363
363
 
364
-
364
+ export const scriptPackagePair_ = ff_compiler_Syntax.PackagePair("script", "script");
365
365
 
366
366
  export function catchMany_(list_, body_) {
367
367
  const errors_ = ff_core_Array.new_();
@@ -242,13 +242,13 @@ reject_(e_)
242
242
  }
243
243
  }
244
244
  });
245
- const jsReject_ = ((e_) => {
246
- return doReject_(e_)
247
- });
248
245
  const controller_ = $task.controller_;
249
- controller_.signal.addEventListener("abort", jsReject_);
246
+ const jsDoReject_ = ((_) => {
247
+ return doReject_(controller_.signal.reason)
248
+ });
249
+ controller_.signal.addEventListener("abort", jsDoReject_);
250
250
  cleanups_.array.push(((_) => {
251
- controller_.signal.removeEventListener("abort", jsReject_)
251
+ controller_.signal.removeEventListener("abort", jsDoReject_)
252
252
  }));
253
253
  return body_(doResolve_, doReject_, ((cleanup_) => {
254
254
  cleanups_.array.push(cleanup_)
@@ -565,13 +565,13 @@ reject_(e_)
565
565
  }
566
566
  }
567
567
  });
568
- const jsReject_ = (async (a_1) => await (async (e_, $task) => {
569
- return (await doReject_(e_, $task))
570
- })(a_1, $task));
571
568
  const controller_ = $task.controller_;
572
- controller_.signal.addEventListener("abort", jsReject_);
569
+ const jsDoReject_ = (async (a_1) => await (async (_, $task) => {
570
+ return (await doReject_(controller_.signal.reason, $task))
571
+ })(a_1, $task));
572
+ controller_.signal.addEventListener("abort", jsDoReject_);
573
573
  cleanups_.array.push((async (_, $task) => {
574
- controller_.signal.removeEventListener("abort", jsReject_)
574
+ controller_.signal.removeEventListener("abort", jsDoReject_)
575
575
  }));
576
576
  return (await body_(doResolve_, doReject_, (async (cleanup_, $task) => {
577
577
  cleanups_.array.push(cleanup_)
@@ -154,8 +154,8 @@ return ff_core_Option.None()
154
154
  } else {
155
155
  ff_core_Js.withSignal_(((signal_) => {
156
156
  const promise_ = (new Promise(((resolve_, reject_) => {
157
- const jsDoReject_ = ((_w1) => {
158
- return doReject_(_w1)
157
+ const jsDoReject_ = ((_) => {
158
+ return doReject_(signal_.reason)
159
159
  });
160
160
  doResolve_ = (() => {
161
161
  signal_.removeEventListener("abort", jsDoReject_);
@@ -204,9 +204,12 @@ ff_core_Stream.Stream_each(stream_, ((buffer_) => {
204
204
  if((!writable_.write((new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength))))) {
205
205
  ff_core_Js.withSignal_(((signal_) => {
206
206
  return (new Promise(((resolve_, reject_) => {
207
- signal_.addEventListener("abort", reject_);
207
+ const jsDoReject_ = ((_) => {
208
+ return reject_.callValue1(signal_.reason)
209
+ });
210
+ signal_.addEventListener("abort", jsDoReject_);
208
211
  return writable_.once("drain", (() => {
209
- signal_.removeEventListener("abort", reject_);
212
+ signal_.removeEventListener("abort", jsDoReject_);
210
213
  return resolve_()
211
214
  }))
212
215
  })))
@@ -270,8 +273,8 @@ return ff_core_Option.None()
270
273
  } else {
271
274
  (await ff_core_Js.withSignal_$((async (signal_, $task) => {
272
275
  const promise_ = (new Promise(((resolve_, reject_) => {
273
- const jsDoReject_ = ((_w1) => {
274
- return doReject_(_w1)
276
+ const jsDoReject_ = ((_) => {
277
+ return doReject_(signal_.reason)
275
278
  });
276
279
  doResolve_ = (() => {
277
280
  signal_.removeEventListener("abort", jsDoReject_);
@@ -320,9 +323,12 @@ try {
320
323
  if((!writable_.write((new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength))))) {
321
324
  (await ff_core_Js.withSignal_$((async (signal_, $task) => {
322
325
  return (await (new Promise(((resolve_, reject_) => {
323
- signal_.addEventListener("abort", reject_);
326
+ const jsDoReject_ = ((_) => {
327
+ return reject_.callValue1(signal_.reason)
328
+ });
329
+ signal_.addEventListener("abort", jsDoReject_);
324
330
  return writable_.once("drain", (() => {
325
- signal_.removeEventListener("abort", reject_);
331
+ signal_.removeEventListener("abort", jsDoReject_);
326
332
  return resolve_()
327
333
  }))
328
334
  }))))
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "description": "Firefly compiler",
5
5
  "author": "Firefly team",
6
6
  "license": "MIT",
7
- "version": "0.5.69",
7
+ "version": "0.5.71",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "https://github.com/Ahnfelt/firefly-boot"
@@ -4,7 +4,7 @@
4
4
  "description": "Firefly language support",
5
5
  "author": "Firefly team",
6
6
  "license": "MIT",
7
- "version": "0.5.69",
7
+ "version": "0.5.71",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "https://github.com/Ahnfelt/firefly-boot"