Also, if-let, if-some , depending on what you need.
if-some
looks neat. https://clojuredocs.org/clojure.core/if-some when would one use it instead of if-let
?
@sova if-let
treats both false
and nil
as negative conditions. if-some
only treats nil
as a negative condition.
So if you have an expression that can yield truthy, false
, or nil
, where the first two are useful values and the third means “no result”, then you want if-some
rather than if-let
:
dev=> (if-let [x false] x :nope)
:nope
dev=> (if-some [x false] x :nope)
false
Is there a way to list all namespaces in the REPL when using ClojureScript? The equivalent of all-ns in Clojure
Is there a cleaner and/or more idiomatic way to say this?
(filter #(and (= (:k1 %) (:k1 a-map))
(= (:k2 %) (:k2 a-map))
...
(= (:kn %) (:kn a-map))) coll-of-maps)
edit: generalized the example a bit for n keysThere's https://github.com/clojure/clojurescript/blob/5091bab07e8e60f64d06e43bf07ba08204071b0d/src/main/clojure/cljs/analyzer/api.cljc#L212, but that is only useful if you need that information in Clojure (and maybe self-hosted ClojureScript -- not sure). What are you trying to do?
You could use select-keys and compare equality of resulting maps
Or (clojure.set/join #{a-map} coll-of-maps)
, I suppose. 🙂
But yeah, select-keys
is probably the right answer here, unless you specifically want a set as a result.
Hi I am working on https://github.com/metabase/metabase project, It is a leiningen project and I am trying to using debugger on it after running project with `lein run` I installed calva on vscode and tried some steps to set up debugger, but I was out of luck I would be grateful if you tell me steps required to set up debugger 🙏
You will probably have better luck getting an answer over at #calva. Make sure you describe what being "out of luck" means specifically. Also, check out https://calva.io/debugger/.
Thanks, Yeah I checked it out, but ok I will describe in #calva
clojure.data/diff
would work as well
I am using vscode+calva. So far no issues having fun hacking clojure, except for one really annoying thing. clj-kondo is drawing sqiggly lines across many useful macros and makes the entire code ugly. I tried configuring it but failed. I created a .clj-kondo folder in project root and added config.edn. The below is my simple attempt to exclude deftest
{:linters
{:unresolved-symbol
{:exclude [clojure.test/deftest]}}}
@code.komali You should not have to do that, clj-kondo is aware of all built-in clojure macros. It's likely that something else is wrong.
Please lint your code on the command line with the clj-kondo
command line tool to see if you get any unexpected errors.
If not, then it's a downstream tooling problem. Pasting a screenshot might also help. Come talk in #clj-kondo or #calva to discuss further problems.
I'm pretty sure i also get squiggle on deftest with cava. I assumed it just wasn't supported. Will check when i get home.
Thanks @borkdude I'll try doing that. But, even if the command line linting worked. I am very happy with calva. Hope the calva creator(s) do something about this.
Of course. This is just a way of finding out where the problem is. It should be resolved.
It turned out it was related to :refer :all
and the problem is now fixed
@borkdude yes. thanks for helping out!
DO you mean I shouldn't use :refer :all
?
This is what I see:
My ns is like this:
(ns asm.parser-test
(:require [clojure.test :refer :all]
[asm.parser :refer :all]))
oh yeah! If I change it to
(:require [clojure.test :refer [deftest testing is]])
It removes the wiggles, thanks!@code.komali @qmstuart well, shouldn't use is maybe too strong, but it helps clj-kondo more if you don't do that. However, if you have populated the cache with
mkdir -p .clj-kondo
clj-kondo --lint src:test --dependencies
then it will also work (I just realized this answering a similar question in #clj-kondo)but since Calva uses LSP under the hood I would have expected it to have populated the cache, but maybe it doesn't do that if there is no .clj-kondo
dir? /cc @ericdallo
Could someone take a look at my sample repo and tell me why the GraalVM compiled binary won't work? https://github.com/naxels/parse-rss-example
Trying with clojure.data.xml won't even make an uberjar
And i created a new project using leiningen, copy/paste the code and it won't work there either with the native-image plugin
It always comes back with a 2 arg error to the SAX parse
It's been frustrating me for 2 days straight ha, i can run it, debug it, CALVA it, uberjar it
Just not get it working with native-image after compilation
Thank you!
I found where the issue is: as soon as I place the code to do xml/parse outside the globals and inside a function, it fails after compiling
Earlier commits it was in the globals, worked super fast
@patrick.glind I suggest not using any tools other than uberjar + $GRAALVM_HOME/bin/native-image
since it's pretty difficult to know what goes wrong where, if you use all kinds of "helper" tools.
Check out the hello world examples here to get going with a simple example and then extend it to your example:
https://github.com/lread/clj-graal-docs
There is also a #graalvm channel
If you need to parse some XML you can also use #babashka which comes with clojure.data.xml
built in
I did not know about the clj-graal-docs, will check that out tomorrow, thanks!
The example is for a clojure study group i'm currently participating in and I wanted to show the native-image 'magic'
I will also try this with babashka, thanks for mentioning it
Good question, clojure-lsp doesn't handle any cache folder, it just pass the cache true flag for clj-kondo, I imagine clj-kondo don't create the .clj-kondo folder always?
ah yeah, clj-kondo doesn't do this automatically
since it doesn't know what the project root is
Hum, so for those cases we are not using clj-kondo cache properly?
I think so
This can explain issues with non analyzed definitions like refer all for deftest and so on
yeah
Do you think it makes sense clojure-lsp creates that dir? (It seems odd the need to create another lib folder though)
Maybe some flag to clj-kondo pointing the project root?
So clj-kondo could create and handle that?
Well, clojure-lsp has more an idea of what the project is than clj-kondo, I always left this up to the user. But I think if clojure-lsp knows what the root is, then it makes sense that it creates the .clj-kondo
folder if it doesn't exist
since it also benefits itself
Alright, I think it's a start to fix that, I'll take a look so, thanks!