Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
Lars Andersen
@expez
definitely a feature
If you google 'keyword alias clojure' you'll get some examples
I've been using this in clojure, in conjuction with spec, yet I got tripped up when you asked if they were legit a little while back
They aren't very intuitive
Benedek Fazekas
@benedekfazekas
is that documented somewhere? i only remember to see :foo/bar style in clojure doc
i seldom use them tbh. not much spec or datomic lately
Lars Andersen
@expez
clojure-emacs/cider-nrepl#224 here support was added to cider
there's no docs for this in the reader docs for clojure
You can even destructure using auto-resolved keywords, which will again be bound to only the name part of the key:
(require '[person :as p])

(let [person {::p/name "Franklin", ::p/age 25}
      {:keys [::p/name ::p/age]} person]
  (println name "is" age))

;= Franklin is 25
seems they are called 'auto-resolved keywords'
Benedek Fazekas
@benedekfazekas
bit confusing tbh... thx for the info @expez
Benedek Fazekas
@benedekfazekas
ok so you need use :: to use the defined alias from the require. with :person/ you are using the full ns name unaliased
Benedek Fazekas
@benedekfazekas
may be missing something here but reader works OK for me if the ns defining the namespaced keyword is properly loaded
user> ::some-test/foobar
;; contemplate => :insight-testbed.some-test/foobar
user> (reader/read-string "::some-test/foobar")
;; contemplate => :insight-testbed.some-test/foobar
user>
using [org.clojure/tools.reader "1.0.0-beta4"]
Lars Andersen
@expez
@benedekfazekas It works fine in clojure, the problem I'm having is in cljc files
Try adding this to the end of cljcns.cljc in test-resources and running the test:
#?(:cljs ::set/foo
   :clj ::inst/foo)
Even though both set and inst are valid aliases the reader fails
I'm guessing we have to provide the reader with the cljs aliases too. It seems weird though, as it's only going to skip that form
Arne Brasseur
@plexus
would it be interesting to add support for marking :require forms with metadata as being purely for side-effects, i.e. should not be cleaned up by clean-ns?
e.g.
(ns foo.bar
  (:require [clojure.set]
            ^:keep foo.with-side-effects))
I know there's support now for configuring patterns of namespace names to be left alone, but IMO having it like this in the namespace is sometimes preferrable, and it serves as documentation to other devs
Lars Andersen
@expez
@plexus Yeah, having both would be nice. Especially for namespaces like user.clj where you often require things without using them all the time
Arne Brasseur
@plexus
Alright, took some digging into how the namespace is read and written out again, but I've managed to get it working and submitted a PR
Lars Andersen
@expez
Awesome @plexus!
So sorry you had to touch the pprint code. It's an atrocious mess :(
Arne Brasseur
@plexus
that wasn't too bad :) figuring out how the ns form was getting read and transformed was a bit more tricky, but the CIDER debugger was a great help
Lars Andersen
@expez
yeah the debugger is a boon :)
Benedek Fazekas
@benedekfazekas
@expez, @magnars fyi i plan to cut a long overdue cljr release soonish (in april lets say). afaik #175 was a blocker but it is not anymore. also want to solve #169 most likely by forking alembic to be able to upgrade its dynapath dependency. that is the only thing in my list pre release. also i am off the grid more ore less until 25th april so this is an early and hopefully fair warning... ;)
Lars Andersen
@expez
Sure @benedekfazekas, we've been talking about cutting a release forever, but there always seems to pop up new stuff to fix first :p
I agree that it's long overdue, though
Julien Fantin
@julienfantin
Hi folks!
Was looking into #195 yesterday for a little bit and had a couple questions
First of all, is mranderson a requirement for dev? I gave up on it after 20min, lein cleaned and just jacked into the project and everything seemed to work but I'm wondering if I could get into weird situations doing that?
Secondly, something came up with the cljs analyzer pretty quickly: most nodes src positions only contain line and column, it seems only a few have end line and end column, so all the node-at-loc? logic kinda falls apart
Julien Fantin
@julienfantin
IIRC today is david nolen's cljs day so I'll be on slack asking him if the cljs analyzer can be configured to do attach those tags, but in case it cannot I'm not sure if we could do without them somehow, or if we should work on adding that data to the tree?
Julien Fantin
@julienfantin
^cc @benedekfazekas @expez
Lars Andersen
@expez
@julienfantin Sorry, been afk for a week due to home computer being on the fritz
@julienfantin mranderson isn't required for dev, it's only used to avoid conflicts when packaging the artifact for clojars
@julienfantin I tihnk end-line and line will always be the same. and you can probably calculate end-columnwhen it doesn't exist
It would just be start + the length of the symbol as it occurs in the file
Benedek Fazekas
@benedekfazekas
as much as i understand end-line and end-column are the coordinates where the form in question ends
most of the cases they will end in the same line where they started but not always.
Julien Fantin
@julienfantin
I think for top-level forms it's a bit more tricky since they're more likely to span multiple lines.
One thing I need to check is whether the state of the form on file can be retrieved from the ast, e.g. if a form has trailing parens on individual lines, my guess is the ast will normalize that code to pr-str version of it, hence obfuscating the actual number of lines the form takes up on file
david nolen mentionned that there's no particular reason why that data is missing from the ast and that it should be added, so that's also an option...
Benedek Fazekas
@benedekfazekas
hm.. as far as i remember this info comes from the reader more precisely clojure.tools.reader.reader-types/indexing-push-back-reader
Lars Andersen
@expez
You want to hold off on dropping s.el for 2.3.0 @benedekfazekas?