squint

yogthos 2024-10-09T14:48:22.060099Z

a quick question about destructuring, I noticed that if I have something like

(let [m {[1 2] :foo}]
      (doseq [[[x _ y] v] m]
        (println x y v)))
the destructuring syntax has to be [x _ y] because the comma is treated as an element, is that intentional or should I make an issue?

borkdude 2024-10-09T14:51:42.374029Z

comma?

yogthos 2024-10-09T14:52:07.860969Z

yeah you end up with a vector of [1 , 2]

borkdude 2024-10-09T14:52:46.411849Z

can you paste the comma expression here? https://squint-cljs.github.io/squint/?src=KGxldCBbbSB7WzEgMl0gOmZvb31dCiAgICAgIChkb3NlcSBbW1t4IF8geV0gdl0gbV0KICAgICAgICAocHJpbnRsbiB4IHkgdikpKQ%3D%3D and hit share, so I can see what you mean?

borkdude 2024-10-09T14:55:14.549089Z

oh I see. This is not a bug but a limitation of JS objects.

{[1 2] 3}
in JS is basically the same as {"1,2": 3}

borkdude 2024-10-09T14:55:21.340849Z

JS objects can only contain string keys

yogthos 2024-10-09T14:55:55.923549Z

ah I see, I'm iterating characters there

👍 1
borkdude 2024-10-09T14:56:03.764879Z

if you want a data structure that can contain vectors, you can use js/Map but note that key lookups don't work for arrays unless they are the same object

yogthos 2024-10-09T14:56:43.426139Z

ok yeah forgot about that bit dealing with js

yogthos 2024-10-09T14:57:20.552499Z

lol probably best to just use string keys, might be worth mentioning in the differences with ClojureScript section actually

yogthos 2024-10-09T14:57:39.212179Z

it's obvious once you realize why, but took me a bit to figure out what was happening

borkdude 2024-10-09T14:57:57.943619Z

feel free to PR some doc improvements :)

👍 1
yogthos 2024-10-09T15:06:28.920229Z

ah nice, in my case I actually did want a mutable data structure for performance, just got tripped up on the destructuring

borkdude 2024-10-09T15:06:43.770279Z

kcool

yogthos 2024-10-09T15:07:11.386899Z

but good to know it's trivial to use stuff like immutable.js

yogthos 2024-10-09T15:07:45.177259Z

I'm really liking how smooth the interop with js ecosystem is compared to ClojureScript

💯 1
😃 1
m3tti 2024-10-09T20:00:16.685389Z

Hi! do we have a nice example about how to work with promesa in squnit?

borkdude 2024-10-09T20:05:22.510829Z

it's not necessary to use promesa in squint, since squint supports async/await

💯 2
2
borkdude 2024-10-09T20:05:43.469659Z

(let [v (js-await (some-promise))]
  (inc v)

borkdude 2024-10-09T20:47:15.625019Z

Squint https://squint-cljs.github.io/squint/?src=KG5zIGluZGV4KQoKKGRlZm4gY2VsbCBbZ3JpZC14IGdyaWQteSBzaXplXQogIHs6c2l6ZSBzaXplCiAgIDp4IGdyaWQteAogICA6eSBncmlkLXkKICAgOmFsaXZlPyAoPiAoanMvTWF0aC5yYW5kb20pIDAuNSl9KQoKKGRlZm4gZHJhdy1jZWxsIFtjdHggW18gezprZXlzIFthbGl2ZT8geCB5IHNpemVdfV1dCiAgKC5iZWdpblBhdGggY3R4KQogICguYXJjIGN0eCAoKiB4IHNpemUpICgqIHkgc2l6ZSkgKC8gc2l6ZSAyKSAwICgqIDIganMvTWF0aC5QSSkpCiAgKHNldCEgKC4tZmlsbFN0eWxlIGN0eCkgKGlmIGFsaXZlPyAiIzExNzg1NSIgIiMzMDMwMzAiKSkKICAoLmZpbGwgY3R4KQogICguc3Ryb2tlIGN0eCkKICAoLmNsb3NlUGF0aCBjdHgpKQoKKGRlZm4gY3JlYXRlLWdyaWQgW3Jvd3MgY29sdW1ucyBjZWxsLXNpemVdCiAgKGludG8ge30KICAgICAgICAoZm9yIFt4IChyYW5nZSByb3dzKQogICAgICAgICAgICAgIHkgKHJhbmdlIGNvbHVtbnMpXQogICAgICAgICAgW1t4IHldIChjZWxsIHggeSBjZWxsLXNpemUpXSkpKQoKKGRlZm4gY2xlYXItc2NyZWVuIFtjdHggY2FudmFzXQogIChzZXQhICguLWZpbGxTdHlsZSBjdHgpICIjMzAzMDMwIikKICAoLmZpbGxSZWN0IGN0eCAwIDAgKC4td2lkdGggY2FudmFzKSAoLi1oZWlnaHQgY2FudmFzKSkpCgooZGVmbiByZW5kZXIgW3s6a2V5cyBbY3R4IGdyaWQgY2FudmFzXX1dCiAgKGNsZWFyLXNjcmVlbiBjdHggY2FudmFzKQogIChkb3NlcSBbY2VsbCBncmlkXQogICAgKGRyYXctY2VsbCBjdHggY2VsbCkpKQoKKGRlZm4gZ2V0LWNlbGwgW2dyaWQgeCB5IG1heC14IG1heC15XQogIChsZXQgW3ggKGNvbmQgKDwgeCAwKSBtYXgteCAoPiB4IG1heC14KSAwIDplbHNlIHgpCiAgICAgICAgeSAoY29uZCAoPCB5IDApIG1heC15ICg%2BIHkgbWF4LXkpIDAgOmVsc2UgeSldCiAgICAoZ2V0IGdyaWQgW3ggeV0pKSkKCihkZWZuIGNvbXB1dGUtZ3JpZCBbezprZXlzIFtncmlkIG1heC14IG1heC15XX1dCiAgKGRvc2VxIFtbXyB7OmtleXMgW3ggeSBhbGl2ZT9dIDphcyBjZWxsfV0gZ3JpZF0KICAgIChsZXQgW2xpdmUtbmVpZ2hib3VyLWNvdW50ICgtPj4gWyhnZXQtY2VsbCBncmlkIChkZWMgeCkgKGRlYyB5KSBtYXgteCBtYXgteSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXQtY2VsbCBncmlkIChpbmMgeCkgKGluYyB5KSBtYXgteCBtYXgteSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXQtY2VsbCBncmlkIChpbmMgeCkgKGRlYyB5KSBtYXgteCBtYXgteSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXQtY2VsbCBncmlkIChkZWMgeCkgKGluYyB5KSBtYXgteCBtYXgteSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXQtY2VsbCBncmlkIHggKGluYyB5KSBtYXgteCBtYXgteSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXQtY2VsbCBncmlkIHggKGRlYyB5KSBtYXgteCBtYXgteSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXQtY2VsbCBncmlkIChkZWMgeCkgeSBtYXgteCBtYXgteSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXQtY2VsbCBncmlkIChpbmMgeCkgeSBtYXgteCBtYXgteSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXAgIyhnZXQgJSA6YWxpdmU%2FKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbHRlciB0cnVlPykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvYWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY291bnQpKV0KICAgICAgKGFzc29jISBjZWxsIDphbGl2ZT8KICAgICAgICAgICAgICAoaWYgYWxpdmU%2FCiAgICAgICAgICAgICAgICAoY29uZHAgPSBsaXZlLW5laWdoYm91ci1jb3VudAogICAgICAgICAgICAgICAgICAwIGZhbHNlCiAgICAgICAgICAgICAgICAgIDEgZmFsc2UKICAgICAgICAgICAgICAgICAgMiB0cnVlCiAgICAgICAgICAgICAgICAgIDMgdHJ1ZQogICAgICAgICAgICAgICAgICA0IGZhbHNlCiAgICAgICAgICAgICAgICAgIGZhbHNlKQogICAgICAgICAgICAgICAgKD0gMyBsaXZlLW5laWdoYm91ci1jb3VudCkpKSkpKQoKKGRlZm4gZ2FtZS1sb29wIFtzdGF0ZV0KICAocmVuZGVyIHN0YXRlKQogIChjb21wdXRlLWdyaWQgc3RhdGUpCiAgKGpzL3NldFRpbWVvdXQgIyhqcy93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIChmbiBbXSAoZ2FtZS1sb29wIHN0YXRlKSkpIDYwKSkKCihkZWZuIGdhbWUgW2NhbnZhcy1pZF0KICAobGV0IFtjYW52YXMgKGpzL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkIGNhbnZhcy1pZCkKICAgICAgICBjdHggKC5nZXRDb250ZXh0IGNhbnZhcyAiMmQiKQogICAgICAgIG1heC15IDUwCiAgICAgICAgbWF4LXggKCogbWF4LXkgKC8gKC4td2lkdGggY2FudmFzKSAoLi1oZWlnaHQgY2FudmFzKSkpIAogICAgICAgIGluaXRpYWwtZ3JpZCAoY3JlYXRlLWdyaWQgbWF4LXggbWF4LXkgMTApXQogICAgKGdhbWUtbG9vcCB7OmNhbnZhcyBjYW52YXMKICAgICAgICAgICAgICAgIDpjdHggY3R4CiAgICAgICAgICAgICAgICA6bWF4LXggKGRlYyBtYXgteCkKICAgICAgICAgICAgICAgIDptYXgteSAoZGVjIG1heC15KQogICAgICAgICAgICAgICAgOmdyaWQgaW5pdGlhbC1ncmlkfSkpKQoKKGRlZm9uY2UgbWFrZS1jYW52YXMKICAoZG8gKGpzL2RvY3VtZW50LmJvZHkucHJlcGVuZAogICAgICAgIChkb3RvIChqcy9kb2N1bWVudC5jcmVhdGVFbGVtZW50ICJjYW52YXMiKQogICAgICAgICAgKHNldCEgLWlkICJjYW52YXMiKQogICAgICAgICAgKHNldCEgLWhlaWdodCAoKiBqcy93aW5kb3cuaW5uZXJIZWlnaHQgMC4yNSkpCiAgICAgICAgICAoc2V0ISAtd2lkdGggKCoganMvd2luZG93LmlubmVyV2lkdGggMC4yNSkpKSkKICAgIHRydWUpKQoKKGdhbWUgImNhbnZhcyIp by @yogthos

1
🎉 2