RX14 changed the topic of #crystal-lang to: The Crystal programming language | http://crystal-lang.org | Crystal 0.26.1 | Fund Crystal's development: http://is.gd/X7PRtI | GH: https://github.com/crystal-lang/crystal | Docs: http://crystal-lang.org/docs/ | API: http://crystal-lang.org/api/ | Gitter: https://gitter.im/crystal-lang/crystal
RX14 changed the topic of #crystal-lang to: The Crystal programming language | http://crystal-lang.org | Crystal 0.27.0 | Fund Crystal's development: http://is.gd/X7PRtI | GH: https://github.com/crystal-lang/crystal | Docs: http://crystal-lang.org/docs/ | API: http://crystal-lang.org/api/ | Gitter: https://gitter.im/crystal-lang/crystal
<FromGitter> <DanielSokil> What is wrong with this method? ⏎ ⏎ `````` [https://gitter.im/crystal-lang/crystal?at=5be22d537c6c9e5df21af044]
<FromGitter> <DanielSokil> Ah, `Random.rand` returns Float64, and I'm trying to assign to Float32
_ore has joined #crystal-lang
_ore is now known as ebs
ebs has quit [Client Quit]
_ore has joined #crystal-lang
_ore is now known as ebs0
ebs0 is now known as ebs_
ebs_ is now known as ebs0
ebs0 is now known as ebs1
ebs1 is now known as ebso
ebso is now known as sjh
sjh is now known as sbe
sbe is now known as eBs
eBs is now known as jiho
<FromGitter> <jwaldrip> Any idea when the alpine 0.27.0 package will be cut?
jiho has quit [Quit: leaving]
jiho has joined #crystal-lang
jiho has quit [Remote host closed the connection]
jiho has joined #crystal-lang
<FromGitter> <jwaldrip> ?
non-aristotelian has quit [Quit: non-aristotelian]
jemc has quit [Ping timeout: 252 seconds]
sp3ncer has joined #crystal-lang
jemc has joined #crystal-lang
sp3ncer has quit [Read error: Connection reset by peer]
sp3ncer has joined #crystal-lang
sp3ncer has quit [Read error: Connection reset by peer]
sp3ncer_ has joined #crystal-lang
sp3ncer_ has quit [Read error: Connection reset by peer]
sp3ncer has joined #crystal-lang
jiho has quit [Remote host closed the connection]
<FromGitter> <Blacksmoke16> @codenoid im pretty sure crystal does
<FromGitter> <Blacksmoke16> https://play.crystal-lang.org/#/r/5gaw
<FromGitter> <codenoid> i mean something like https://github.com/moment/moment/issues/3403
<FromGitter> <Blacksmoke16> got some pseudo code example? still not sure i follow
sp3ncer has quit [Read error: Connection reset by peer]
<FromGitter> <codenoid> *moment timefromnow in crystal ⏎ https://momentjs.com/docs/#/displaying/fromnow/
<FromGitter> <Blacksmoke16> theres a thing for that iirc
<FromGitter> <Blacksmoke16> ah naw thats for measuring time
<FromGitter> <Blacksmoke16> https://play.crystal-lang.org/#/r/5gb7
<FromGitter> <Blacksmoke16> would be what you can get
<FromGitter> <Blacksmoke16> `Time::Span` also has some other methods, would be pretty easy to replicate their human readable durations
<FromGitter> <codenoid> i mean the `// 4 years ago` return
<FromGitter> <Blacksmoke16> yea, nothing in stdlib atm to do that, but it wouldnt be that hard to do
<FromGitter> <Blacksmoke16> i.e. return the number of seconds in that span and build out messages based on that value
<FromGitter> <Blacksmoke16> and remember the nice Int accessors, like for when you get into minutes/hours etc could do like `90.minutes.total_seconds`
<FromGitter> <codenoid> thankyou for sharing ✨
Nickage has joined #crystal-lang
<Nickage> is it possible to get all child modules using macro? https://hastebin.com/sunakobuto.rb
jemc has quit [Ping timeout: 272 seconds]
<Nickage> this behaviour feels weird since it works fine for Classes (using the inherited macro) but for Modules it doesn't recognize methods after the include https://hastebin.com/kisatusuzu.rb
<FromGitter> <Blacksmoke16> not sure how modules are implemented, but then you do `include MyModule` does it just plop in the methods as if they were part of that class by default?
Nickage_ has joined #crystal-lang
<FromGitter> <Blacksmoke16> https://play.crystal-lang.org/#/r/5gbi
<FromGitter> <Blacksmoke16> looks like the module macro code gets executed before your methods are defined
Nickage has quit [Ping timeout: 256 seconds]
_whitelogger has joined #crystal-lang
rohitpaulk has joined #crystal-lang
<FromGitter> <fusillicode_twitter> Guys I'm in a situation in which I'm getting an union type where I really want the unique parent type of the union :(
<FromGitter> <fusillicode_twitter> In particular I've an hash where the values are actually the types that a given method can accept
<FromGitter> <fusillicode_twitter> However when a try to pass the fetched values to the method, the compiler complains that the method accept only the parent type (in my case a mixed in module) rather than the union type of the values of hash :(
<FromGitter> <fusillicode_twitter> Basically what I want is polymorphism without explicitly use inheritance and by relying only on mixins
<FromGitter> <fusillicode_twitter> Right now I've worked around the issue with a type alias but it is really not what I wanted :(
<FromGitter> <fusillicode_twitter> I mean, I already have a type (read module) that has the main logic of the two concrete types and what I want is to simply be able to use the two concrete types transparently without knowing which one I've in hand at a given moment
jokke has quit [Ping timeout: 252 seconds]
jokke has joined #crystal-lang
<jhass> What do you folks think, where would I reach more of our community, mailing list or reddit?
<FromGitter> <bew> github x) personnaly I never look the mailing list..
<FromGitter> <bew> can you show an example @fusillicode_twitter ?
<FromGitter> <fusillicode_twitter> @bew sure mate, I'll try do extract a snippet of my code
<jhass> well github is not for meta-talk ;)
<FromGitter> <fusillicode_twitter> thanks for the support 🙇‍♂️
<FromGitter> <fusillicode_twitter> jhass I think that a subreddit for crystal would be awesome :D
<FromGitter> <fusillicode_twitter> damn I missed that XD
<FromGitter> <fusillicode_twitter> thanks jhass 🙇‍♂️
ashirase has quit [Ping timeout: 244 seconds]
ashirase has joined #crystal-lang
ashirase has quit [Ping timeout: 268 seconds]
ashirase has joined #crystal-lang
<FromGitter> <Val> yeah Homebrew has updated Crystal version to 0.27
<FromGitter> <Val> It's now available on Travis-CI
<FromGitter> <j8r> @jwaldrip waiting for https://github.com/alpinelinux/aports/pull/5560
moei has joined #crystal-lang
Nickage_ has quit [Ping timeout: 256 seconds]
thews has quit [Ping timeout: 240 seconds]
thews has joined #crystal-lang
<FromGitter> <mettuaditya> is there any breath first search(BFS) implementation in crystal
<FromGitter> <mettuaditya> any ideas on how to implement graph in crystal
<FromGitter> <r00ster91> you could use a graphics library
<FromGitter> <mettuaditya> like
<FromGitter> <r00ster91> do you want to do it in the console or a new graphical window?
<FromGitter> <mettuaditya> i just want to implement some graph algorithms
<FromGitter> <fridgerator> @r00ster91 graph, not graphics
<FromGitter> <r00ster91> I thought you want to display the graphs as well
<FromGitter> <mettuaditya> @r00ster91 no problem... but help me if u know anything about it
<FromGitter> <yxhuvud> I don't think I've had explicit graphs when implementing BFS, they tend to arise naturally from the neighbours and visited-methods.
DTZUZO has joined #crystal-lang
flaviodesousa has joined #crystal-lang
<FromGitter> <wontruefree> is there a crystal version manager ?
<FromGitter> <j8r> @wontruefree https://github.com/pine/crenv
<FromGitter> <wontruefree> awesome thanks
<FromGitter> <wontruefree> I just saw that on awesome crystal
<FromGitter> <wontruefree> I am trying to use the HTTP::Client and it is not working as expected but if I use a TCPSocket with `client << "GET / HTTP 1.1\n\n"` it seems to work fine
<FromGitter> <wontruefree> The server is Crystals HTTP::Server
<FromGitter> <wontruefree> seems like HTTP::Client should send `GET / HTTP 1.1\n\n ` right?
<jhass> moar code, less "not working", moar description of expectation vs observed behaviour
<jhass> pls
<FromGitter> <wontruefree> yeah I didnt want to spam the chat
<FromGitter> <wontruefree> I can open an issue
<jhass> do a gist ;)
<jhass> issues are for when you're sure of a bug in the compiler or stdlib
<FromGitter> <wontruefree> also crenv works really well +1 to @pine work
<FromGitter> <fusillicode_twitter> @bew ok I managed only now to get a little boiled down snippet of code that I think is the root of my problem
<FromGitter> <fusillicode_twitter> https://play.crystal-lang.org/#/r/5gh7
t0nyandre has quit [Quit: WeeChat 2.3]
<FromGitter> <fusillicode_twitter> basically I want to use the values of an Hash polymorphically
<FromGitter> <jwoertink> Anyone have an idea of how I can do this? https://play.crystal-lang.org/#/r/5g9y
<FromGitter> <jwoertink> I thought doing this would work, but I guess not.
<FromGitter> <fusillicode_twitter> @jwoertink let me take a look :)
<FromGitter> <jwoertink> I can't really do `Array(SomeHandler)` since I have no idea what names those handlers would be
<FromGitter> <fusillicode_twitter> mmm
<FromGitter> <fusillicode_twitter> I think that the problem may be the fact that you're trying to pass something "general" to something that accept something more "specific"
<FromGitter> <fusillicode_twitter> shouldn't be the other way around?
<FromGitter> <fusillicode_twitter> (but sincerely I'm not sure at all...it seems something similar to contra/covariance in Scala 🤔)
<z64> `App.new([SomeHandler.new] of HTTP::Handler)` will compile
<FromGitter> <jwoertink> Well, I want my array to be an array of any class that includes that module
<FromGitter> <jwoertink> oh.. interesting. let me try that
<z64> yes there is a section on contra/covariance here that i believe applies in this situation: https://crystal-lang.org/docs/syntax_and_semantics/inheritance.html
<FromGitter> <jwoertink> Ok, that's awesome that it works that way, but now the big question is, how can I do this without forcing the user to have to do that?
<FromGitter> <fusillicode_twitter> I recall I read it somewhere inside the Crystal book but I didn't find it a second ago when I searched for it
<FromGitter> <jwoertink> So the `App.new` part would be user interface, and the rest would be the underlying lib. I would have to tell the user that they would need to add the `of HTTP::Handler` part (not a horrible deal, just not as clean)
<FromGitter> <jwoertink> and also, why does it work if I pass that array directly in to `HTTP::Server.new` which has the same signature?
<FromGitter> <jwoertink> `HTTP::Server.new([SomeHandler.new])` works, but `App.new([SomeHandler.new])` doesn't 😕
<z64> @jwoertink i recommend readind the source for HTTP::Server; its different from what you are doing. it has an intermediate `def self.new` that takes the array, uses a helper method to internally chain the middleware with each other, and only stores the *first* middelware
<FromGitter> <jwoertink> Yeah, I was looking at the source just now. I'm gonna have to rethink this for sure
<FromGitter> <jwoertink> ok, if I pass it around as a local variable and don't add the type, then it all works
<FromGitter> <jwoertink> so finicky, but close enough for government work
<FromGitter> <rishavs> Any chance of making a minor release of Crystal-db? Would be nice to get some of the fixes which have gone in.
<FromGitter> <vladfaust> How does `responds_to?` exactly work? ⏎ ⏎ ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5be34313c0e6da07feedfb39]
<FromGitter> <straight-shoota> @vladfaust Restricting the type appropriately only works with local variables.
<FromGitter> <vladfaust> No class-level methods then?
<FromGitter> <straight-shoota> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5be343b53102f1452166784f]
<FromGitter> <straight-shoota> You can assign classes to local variables
<FromGitter> <vladfaust> Oof
<oprypin> straight-shoota, hold on a second, what's the point of assigning local variables if it's supposed to already be a constant class
<oprypin> i dont think this is right
<FromGitter> <vladfaust> ```{% if Atom.has_method?("auth_handlers") %}``` ⏎ ⏎ Works, but this makes `responds_to?` useless :thinking: [https://gitter.im/crystal-lang/crystal?at=5be34406f1b87534048e217c]
<oprypin> i thought it might have been a case of class<->instance method mismatch, but no https://carc.in/#/r/5gj8
<FromGitter> <straight-shoota> Yeah, I guess `responds_to?` should work with constants directly. But it doesn't currently. A workaround is to assign it to a local var.
<FromGitter> <vladfaust> Should I be OK with the macro? I mean that later definition stuff
<FromGitter> <vladfaust> Wrapped into `finished` for sure
<FromGitter> <vladfaust> Uh, so much workarounds
<oprypin> wait why does this work lol https://carc.in/#/r/5gj9
<FromGitter> <straight-shoota> oprypin, why not?
<oprypin> well it's a runtime check around a supposed compile error
<FromGitter> <vladfaust> Or is it? :)
<oprypin> oh right, A.g() is a compile error, a.g() isn't
<FromGitter> <straight-shoota> `responds_to?` is compile time like `is_a?`. It effectively restricts the type.
<oprypin> that's the trick, and not the fact that it "makes responds_to? work"
<oprypin> it works anyway, just that you cant compile the condition body without circumventing the compile error
<FromGitter> <straight-shoota> yeah well, but with constants it could restrict the type of the constant directly without assigning it to a local var. At least theoretically.
<FromGitter> <straight-shoota> Not sure if that's practical.
<oprypin> if you write A.f() and f() doesnt exist, it doesnt matter at all what responds_to? does
<oprypin> vladfaust, anyhow, seems like you're looking for a compile time check, so you should indeed prefer to use macros like you showed
<FromGitter> <vladfaust> Yup, looks like
<FromGitter> <vladfaust> Macros aren't bad
<oprypin> responds_to? is for dynamically typed values
<oprypin> hm that's not the right term
<oprypin> "polymorphic values", i guess
<FromGitter> <straight-shoota> I don't think there is anything wrong with `(a = A).responds_to?`
<FromGitter> <straight-shoota> but, yeah `{% A.has_method? %}` can be used similarly
<FromGitter> <vladfaust> > I don't think there is anything wrong with `(a = A).responds_to?` ⏎ ⏎ It's definitely wrong if we speak about convenience, quality of a developers life and adoption
<oprypin> straight-shoota, i'm not sure if you're correct in saying that `responds_to?` is compile time. I'm sure that it has a runtime component, and I'm guessing that it can't not have at least some runtime part in all cases
<FromGitter> <vladfaust> I judge a language by the level of expectations matching aka intuitivity. `A.responds_to?` *is* intuitive and expected
<FromGitter> <straight-shoota> I'm pretty sure the type restrictions like `responds_to?` and `is_a?` are completely removed from codegen if it can't be satisfied by any of the static types
<oprypin> vladfaust, the way you're using the language in this case is not intuitive, so this is a natural consequence
<oprypin> why would you not know whether an exact class does or does not have a method?
<FromGitter> <vladfaust> Oh, that's too complex :)
<oprypin> yes, it certainly is
<FromGitter> <straight-shoota> The compiler knows all types a value can possibly have. `responds_to?` and `is_a?` filter out only the matching types.
<FromGitter> <vladfaust> @straight-shoota, when is `responds_to?` assessed? I mean, sometimes the object is required later in the code
<FromGitter> <vladfaust> I'm worrying about difference with macro approach
<FromGitter> <vladfaust> I.e. `{% Foo.has_method?("bar") %}` could return false in some situations, e.g. when "bar" is defined in another macro
<FromGitter> <vladfaust> Is `responds_to?` more reliable in this case?
<FromGitter> <vladfaust> I guess I have to test it myself, right
<FromGitter> <straight-shoota> `Foo.has_method?("bar")` should only be `true` when this method is actually defined as a method on `Foo` (class method).
<oprypin> straight-shoota, you're right.
<FromGitter> <straight-shoota> Yeah, I looked at codegen
<FromGitter> <vladfaust> https://carc.in/#/r/5gki
<oprypin> `echo 'if (a = 133337).responds_to? :hexz; p 133338 end' > a.cr && crystal build --emit llvm-ir a.cr && less a.ll`
<FromGitter> <vladfaust> Omg, my bad
<oprypin> -> 133338 is not found
<FromGitter> <vladfaust> https://carc.in/#/r/5gkm still
<FromGitter> <vladfaust> Is that expected?
<oprypin> vladfaust, https://carc.in/#/r/5gko
<FromGitter> <vladfaust> Sorry, something wrong with me
<FromGitter> <straight-shoota> `p "ok"` doesn't need to be a macro expression
<FromGitter> <vladfaust> Summing it up, https://carc.in/#/r/5gl1
<oprypin> no it doesnt but i felt it was more appropriate
<FromGitter> <vladfaust> > Summing it up, https://carc.in/#/r/5gl1 ⏎ ⏎ How to know if a class method is defined?
<FromGitter> <vladfaust> That's exactly my case, ⏎ ⏎ ```code paste, see link``` ⏎ ⏎ Would always return `false` [https://gitter.im/crystal-lang/crystal?at=5be34b3f47217e07ffe8726a]
<FromGitter> <straight-shoota> `Atom.class.has_method?("auth_handlers")`
<FromGitter> <vladfaust> *not bad face*
<FromGitter> <vladfaust> Sometimes I ask myself if I really had those almost 2 years of Crystal experience 😅
<FromGitter> <vladfaust> > `Atom.class.has_method?("auth_handlers")` ⏎ ⏎ Why is it obvious to someone but not me?!
<FromGitter> <vladfaust> What am I doing wrong 😢
<FromGitter> <vladfaust> Nah, just kidding. Macros equals to shamanism, only chosen ones are capable of
<FromGitter> <straight-shoota> xD
sz0 has quit [Ping timeout: 252 seconds]
sz0 has joined #crystal-lang
jemc has joined #crystal-lang
moei has quit [Quit: Leaving...]
<FromGitter> <bajro17> is it possible to make excel file with crystal if someone know ?
<FromGitter> <Blacksmoke16> could make a csv that can be imported into excel
<FromGitter> <fridgerator> @bajro17 have you tried any of these? https://crystalshards.org/?filter=excel
<FromGitter> <fridgerator> they all look pretty outdated
<FromGitter> <bajro17> @fridgerator thank you but also this will work with csv its not hard just to import file
<FromGitter> <jwoertink> Anyone here familiar with the whole REUSEPORT deal?
<oprypin> probably
<FromGitter> <jwoertink> If I make a simple server similar to the example on the crystal home page, but with that 3rd arg set to `true`
<FromGitter> <jwoertink> then I boot that app, open a second tab and boot it again, I'll have 2 instances of that server running
<FromGitter> <jwoertink> but if I try and curl the app, it only ever hits the first one
<oprypin> which third arg??
<FromGitter> <jwoertink> I'm sure I need some sort of process manager to load balance these, but that's where I'm foggy
<FromGitter> <jwoertink> oh sorry, `bind_tcp(host, port, true)`
<FromGitter> <jwoertink> the `true` being the reuse port option
<oprypin> there's no bind_tcp on crystal home page
<FromGitter> <jwoertink> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5be36b379600d10e64753872]
<FromGitter> <fridgerator> @jwoertink are you on mac?
<FromGitter> <jwoertink> yeah
<FromGitter> <fridgerator> AFAIK that only works on linux
<FromGitter> <j8r> Alpine is moving from LibreSSL to OpenSSL 1.1?! https://github.com/alpinelinux/aports/pull/5560#issuecomment-436791090
<oprypin> i would suggest https://crystal-lang.org/api/0.27.0/HTTP/Server.html#listen%28port%3AInt32%2Creuse_port%3ABool%3Dfalse%29-instance-method
<FromGitter> <jwoertink> I'll try the example on linux and see how it behaves
<FromGitter> <jwoertink> I didn't know `listen` took that extra arg. That's nice
<FromGitter> <Blacksmoke16> https://play.crystal-lang.org/#/r/5gmv shouldn't this be an array of each property?
<FromGitter> <Blacksmoke16> or am i losing my mind
<FromGitter> <Blacksmoke16> also tried wrapping it in `macro finished`
<oprypin> but where's the boundary between what works and what doesnt?
<FromGitter> <Blacksmoke16> looks like it works when its in a method
<FromGitter> <bajro17> I dont know for every node I try to read from xml it just give back blank dont give value
<FromGitter> <Blacksmoke16> https://play.crystal-lang.org/#/r/5gn5 not sure if bug or intended?
<oprypin> well first of all i think `@type` was designed to be used in methods
<FromGitter> <Blacksmoke16> that would prob explain it
<oprypin> doesnt really explain this though https://carc.in/#/r/5gn6
<FromGitter> <jwoertink> > On macOS, SO_REUSEPORT is only for hot swapover, so when socket is closed it goes to next process.
<FromGitter> <jwoertink> well, that answers that
<FromGitter> <asterite> Instance var information is only available inside methods. At the top level you never know when more instance vars are going to be added, and the compiler keeps them all and eventually solves them in one go considering all the type hierarchy
<FromGitter> <Blacksmoke16> 👍 fair enough
<FromGitter> <j8r> why? https://carc.in/#/r/5gn8
<FromGitter> <bew> @j8r `A.new` is using the `new` of the struct, not the module
<oprypin> j8r, well the first part of the example is irrelevant because `new` exists on all objects, it would be there even without the include
<FromGitter> <bew> and you need to use `extend` instead of `include`
<FromGitter> <j8r> oh ok, thanks
<FromGitter> <bew> and no
<FromGitter> <bew> extend not work
<FromGitter> <j8r> hum, I'll use macro then
<FromGitter> <bew> not sure if there's a way to 'import' methods from a module to class level
<oprypin> well that's extend
<oprypin> and i suppose there is some type-theory-smartness reason why class methods cant be imported
<FromGitter> <bew> ah yes, but the methods must not be `self.` in the module
<oprypin> working https://carc.in/#/r/5gnb
<FromGitter> <bew> @j8r https://carc.in/#/r/5gna
<FromGitter> <bew> indeed ty
<FromGitter> <j8r> but the new works https://carc.in/#/r/5gnc
<FromGitter> <j8r> with an overload
<oprypin> do i need to repeat
<oprypin> j8r, well the first part of the example is irrelevant because `new` exists on all objects, it would be there even without the include
<FromGitter> <bew> https://carc.in/#/r/5gnd that's weird indeed
<FromGitter> <j8r> yes, but with no args opryprin
<FromGitter> <bew> removing the include gives a compile error
<FromGitter> <j8r> yes
<FromGitter> <bew> maybe some `new`-related magic
<FromGitter> <j8r> thanks @bew extend do what I want :)
<oprypin> regarding the "type-theory-smartness reason why class methods cant be imported": `extend` ensures that `SomeClass.is_a? SomeModule`, and `include` ensures that `SomeClass.new.is_a? SomeModule` - and I suppose that class methods don't affect this definition in any way so they're ignored :p
<FromGitter> <bew> oh that's interesting
<FromGitter> <bew> is it from Cr docs?
<oprypin> i wish
<FromGitter> <bew> please add it !!
<FromGitter> <j8r> hum extend is weird
<oprypin> very much so
<oprypin> i think the inspiration is from some post that @jhass made on github a long time ago. what was that?
<oprypin> can't find it. the post tried to generalize this notion of inheritance across classes and modules -- and also generics, I think
<FromGitter> <bajro17> how to append text in file is there any example
<FromGitter> <jwoertink> @bajro17 `File.write("foo", "baz", mode: "a")`
<FromGitter> <jwoertink> https://crystal-lang.org/api/0.27.0/File.html#write%28filename%2Ccontent%2Cperm%3DDEFAULT_CREATE_PERMISSIONS%2Cencoding%3Dnil%2Cinvalid%3Dnil%2Cmode%3D%26quot%3Bw%26quot%3B%29-class-method
<FromGitter> <j8r> `File.open file, "a", &.print text`
<FromGitter> <bajro17> @jwoertink if I do something like this file = File.write("foo", "baz", mode: "a")
<FromGitter> <bajro17> how to insert in this file next text?
<oprypin> use file.open with a block
<oprypin> bew's example is closer
<FromGitter> <j8r> If you have to append multiple times, you can reuse the file descriptor with`File.open file, "a"`
<FromGitter> <bew> oprypin you mean j8r i guess^^
<oprypin> oh yes, sorry
<FromGitter> <bew> naah was just re-reading & fixing my last example in #132
<FromGitter> <dscottboggs_gitlab> ```code paste, see link``` ⏎ ⏎ is this expected behavior? how should I be styling a list of hashes like that? [https://gitter.im/crystal-lang/crystal?at=5be37bb2c0e6da07feef5db1]
<FromGitter> <dscottboggs_gitlab> oof some of those are tabs and some are spaces....
<FromGitter> <bew> tabs & spaces should make a diff
<FromGitter> <bew> shoudn't*
<FromGitter> <bew> looks like a formatter bug, yes
daemonwrangler has quit [Quit: ZNC 1.6.5 - http://znc.in]
<FromGitter> <dscottboggs_gitlab> ah, I'll file an issue then, sorry for clogging up the chat
daemonwrangler has joined #crystal-lang