Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Pedro Rodriguez Tavarez
    @pjrt
    Hey, what ever happened to scalameta macros?
    Is that still a thing?
    Roman Janusz
    @ghik
    @pjrt no, scalameta is now only about tooling
    Roman Janusz
    @ghik
    Am I correct that when I call .tokens on a tree, it tokenizes the input from scratch every single time?
    Ólafur Páll Geirsson
    @olafurpg
    @ghik the tokens are cached
    this cache has historically been global and caused a lot of headache, but I made this cache local in scalameta/scalameta#1914
    Roman Janusz
    @ghik
    ok great, thanks
    Roman Janusz
    @ghik
    I'm trying to open the scalameta project in VS Code with metals and I'm consistently getting error from sbt: Not a valid command: metalsEnable. I tried various workarounds found in already reported issues (e.g. scalameta/metals#685) but nothing works...
    Ólafur Páll Geirsson
    @olafurpg
    @ghik you might want to try using the latest SNAPSHOT
    otherwise, I don't import the scalameta build into metals since it conflicts with the SemanticDB plugin (which is developed in the scalameta build and Metals uses it)
    we do funky stuff like customize the sourceroot setting to be a subdirectory, which doesn't play nicely with Metals
    Sequencer
    @sequencer
    Hello, I wonder how to implement a "find usage" Scala? since after AST generation, there won't be any packages information for codes. Is there any compiler plugin to help me with this?
    Ólafur Páll Geirsson
    @olafurpg
    @ghik I was able to get Metals working in the Scalameta build using the latest Metals SNAPSHOT
    Ólafur Páll Geirsson
    @olafurpg
    @sequencer you can use the SemanticDB compiler plugin to emit protobuf data with symbol references
    you'll need a bit more work to handle references to overridden methods
    You can poke into the Metals codebase to see how "textDocument/references" is implemented
    Sequencer
    @sequencer
    OK! Thank you! I'll try.
    Roman Janusz
    @ghik
    @olafurpg thanks, will try it out
    Ólafur Páll Geirsson
    @olafurpg
    We’re hopefully doing a stable release in a couple days if you can hold out the wait
    Roman Janusz
    @ghik
    @olafurpg I still can't make it work with current snapshot. I built 0.7.7-SNAPSHOT from today's master and I'm getting this:
    java.util.concurrent.ExecutionException: org.eclipse.lsp4j.jsonrpc.ResponseErrorException: DecodingFailure(Attempt to decode value on failed cursor, List(DownField(providesFileWatching), DownField(capabilities)))
        at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
        at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1915)
        at scala.meta.internal.metals.BuildServerConnection$.initialize(BuildServerConnection.scala:176)
        at scala.meta.internal.metals.BuildServerConnection$.fromStreams(BuildServerConnection.scala:129)
        at scala.meta.internal.metals.BloopServers.$anonfun$newServer$1(BloopServers.scala:71)
        at scala.util.Success.$anonfun$map$1(Try.scala:255)
        at scala.util.Success.map(Try.scala:213)
        at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
        at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33)
        at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
    Caused by: org.eclipse.lsp4j.jsonrpc.ResponseErrorException: DecodingFailure(Attempt to decode value on failed cursor, List(DownField(providesFileWatching), DownField(capabilities)))
        at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.handleResponse(RemoteEndpoint.java:209)
        at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.consume(RemoteEndpoint.java:193)
        at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.handleMessage(StreamMessageProducer.java:194)
        at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.listen(StreamMessageProducer.java:94)
        at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor.run(ConcurrentMessageProcessor.java:113)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
    Ólafur Páll Geirsson
    @olafurpg
    @ghik you may have an old version of bloop running
    we're waiting for a stable release of bloop to come out before releasing metals v0.8
    maybe best to wait until then
    Roman Janusz
    @ghik
    ok, thanks, that's probably what I will do
    but I don't understand why I'm running wrong version of bloop - isn't it set up automatically by metals?
    Tomasz Godzik
    @tgodzik
    @ghik might also be needed to reimport the build - that message usually means that some json has an unexpected structure
    Jakub Kozłowski
    @kubukoz
    I'm having trouble running scalafifx on a project (RemoveUnused) - using the sbt plugin/task. The plugin claims the files were changed but they remain unmodified...
    sbt:OrderService> scalafix RemoveUnused
    [info] Running scalafix on 10 Scala sources
    [info] Running scalafix on 6 Scala sources
    [info] Running scalafix on 3 Scala sources
    [info] Running scalafix on 50 Scala sources
    [success] Total time: 1 s, completed Dec 17, 2019 12:35:41 PM
    yet nothing changes
    I have the necessary flags on, and can see warnings on a fresh compile
    would appreciate any hints
    sandeshyapuram
    @pandareen
    Hello, can you point me to some examples? I could use some full-blown tutorials
    Bartosz Bąbol
    @BBartosz
    According to main page of scalameta: Scalameta- Library to read, analyze, transform and generate Scala programs -> how exactly scalameta is used to generate scala programs since macros are not part of scalameta anymore?
    Gabriele Petronella
    @gabro
    @BBartosz you can generate programs by constructing trees and printing them with Scalameta. Macros allow you to do roughly the same thing, except you do it during the compilation of your program
    in other words, you can do code generation with Scalameta
    (I use it for this purpose at work)
    Ólafur Páll Geirsson
    @olafurpg
    @BBartosz Scalameta does not support macros, you can use scala-reflect macros instead
    Roman Janusz
    @ghik
    Hi!
    I have an already parsed Source. I also have a Position representing some arbitrary range in that source. I would like to obtain Tokens representing tokens only from that range. How can I do this efficiently?
    Is there anything better I can do than manually implementing binary search?
    Ólafur Páll Geirsson
    @olafurpg
    You can access the underlying token array by using a package private API called “Origin”
    But you would still need to know the index in the array where your range starts
    So binary search is the best solution if you already have the token array.
    Roman Janusz
    @ghik
    Thanks
    Bartosz Bąbol
    @BBartosz

    @BBartosz you can generate programs by constructing trees and printing them with Scalameta. Macros allow you to do roughly the same thing, except you do it during the compilation of your program

    How exactly you generate them? I understand that you use quasiquotes to build your tree and then you save it to file, kinda like string?

    Roman Janusz
    @ghik
    @BBartosz yes, this way. You cannot generate programs with scalameta "on the fly", that is in compile time like macros.
    Bartosz Bąbol
    @BBartosz

    @BBartosz yes, this way. You cannot generate programs with scalameta "on the fly", that is in compile time like macros.

    yeah thx i was wondering whats the way to do it. I was using quasiquotes and macros but generating the code and saving it to file might also work for me

    sandeshyapuram
    @pandareen
    Is there a better way to kick off code generation? I am using Scala Annotations for pointing it towards scalameta to generate new codee.
    Ólafur Páll Geirsson
    @olafurpg
    @pandareen if you are generating source code as strings, I would recommend using something like treehugger instead http://eed3si9n.com/treehugger/