Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Sep 29 08:35
    @sjrd banned @8bitpitRBX_twitter
  • May 23 13:44
    @sjrd banned @BIGCRYPTO001_gitlab
  • May 01 14:31
    @sjrd banned @Certificates1_gitlab
  • Apr 22 15:31
    @sjrd banned @lerbatax
  • Jan 31 23:04
    sjrd commented #3555
  • Jan 31 22:56
    sjrd review_requested #3555
  • Jan 31 22:56
    sjrd opened #3555
  • Jan 31 21:06

    sjrd on 0.6.x

    Remove dead code: specific coll… Adapt the signature of `js.Arra… Merge pull request #3554 from s… (compare)

  • Jan 31 21:06
    sjrd closed #3554
  • Jan 31 20:54
    erikvanoosten commented #2665
  • Jan 31 16:33
    sjrd commented #3538
  • Jan 31 15:54

    sjrd on master

    Fix analyzer cycle detection to… Add toString methods to analyze… Do not provide linked ClassInfo… and 1 more (compare)

  • Jan 31 15:54
    sjrd closed #3552
  • Jan 31 15:54

    sjrd on master

    Remove Logger.success It is un… Make level helpers final Clean-up ScalaConsoleLogger cod… and 1 more (compare)

  • Jan 31 15:54
    sjrd closed #3553
  • Jan 31 15:33
    sjrd commented #2665
  • Jan 31 15:30
    erikvanoosten commented #2665
  • Jan 31 10:41
    sjrd review_requested #3554
  • Jan 31 10:41
    sjrd opened #3554
  • Jan 31 10:05
    gzm0 synchronize #3552
jhegedus42
@jhegedus42
@marcgrue u need to attach the debugger to sbt
press that green bug button on the left
image.png
this one ^
that did the trick for me
also, try to set a breakpoint in the code somewhere, where it runs... that helps to bring up those debug windows
if the debugger is attached to the JVM process ( that should happen by pressing the green bug button )
Marc Grue
@marcgrue
I did all that. But the debug window doesn’t show anything :-(
Andrzej Sołtysik
@asoltysik
Is there a way to run tests when exporting the project as ESModule? Im getting Could not run test MainSpec: org.scalajs.testcommon.RPCCore$RPCException: scala.scalajs.js.JavaScriptException: TypeError: Cannot read property 'MainSpec' of undefined. I stumbled upon this thread: https://www.reddit.com/r/scala/comments/c84rae/unit_testing_in_scalajs/ but the solutions proposed there don't change anything for me
version is 0.6.28
Sébastien Doeraene
@sjrd
The settings will have to be in the .settings() (resp. .jsSettings()) of the relevant project (resp. crossProject)
Andrzej Sołtysik
@asoltysik
that's what I did, will try that again though
Øyvind Raddum Berg
@oyvindberg
@marcgrue I managed to run and debug my shared tests in the end in intellij. Somehow it works when running all tests in package, as opposed to running a single test. This was with utest.
Andrzej Sołtysik
@asoltysik
@sjrd it worked when i upgraded scalatest from 3.0.5 to 3.0.8
Adam Fraser
@adamgfraser
Hi. I'm trying to set global.process.exitcode to a non-zero value and then allow my program to exit gracefully. I am expecting to exit with a failure in that case but I am still exiting with a success. I have confirmed that I am using the node.js environment. Am I doing something wrong?
Frank P. Tominc
@franktominc
Hey guys, I'm having a weird behavior here. I'm trying to pass command-line arguments to a scalajs script and for some reason it doesn't work. What am I missing here?
@JSExportAll
@JSExportTopLevel("Main")
object Main {
  def main(args: Array[String]): Unit = {
    println("abc")
    args.foreach(println)
  }
}
node my-script-opt.js 3123 12312 12312312 3123123 12321312 1231231 12312312 123123
abc
aappddeevv
@aappddeevv
I think you need to use the process.argv value to access them.
Sébastien Doeraene
@sjrd
@franktominc The args of def main are always an empty array in Scala.js. The existence of the parameter is only there for reasonable compatibility with Scala/JVM. As @aappddeevv said, use Node.js' process.argv value to read command-line arguments.
Frank P. Tominc
@franktominc
Oh, so I need a MainJS and a MainJVM?
Sébastien Doeraene
@sjrd
Ah, yes, I'm afraid so.
Frank P. Tominc
@franktominc
Well, that is a bummer. What would be the impact of passing process.argv as args in the compiler? Is there a reason for that not being the standard behavior?
Sébastien Doeraene
@sjrd
The reason is that Scala.js is independent of Node.js. Passing process.argv would fail in other JS environments. Scala.js does not take sides.
aappddeevv
@aappddeevv
Don't forget that node has the node bin and then the script name so val args = process.argv.drop(2) to access the first arg. I typically have a separate project with 2-3 lines in it representing "main" and handling some major "context" instance specific to the environment. Same on the JVM side.
Frank P. Tominc
@franktominc
@aappddeevv can you share a minimal project with me, please?
Frank P. Tominc
@franktominc

Well, I got something working here.


@JSExportAll
@JSExportTopLevel("Main")
object Main {

  def test(s: Array[String]): Unit = {
    println("ABC")
    s.foreach(println)
  }
}
var main = require("./test.js");

main.Main.test(process.argv);

It prints the ABC but on the foreach it's giving me a TypeError: Cannot read property 'length' of undefined. I'm using .jsSettings(scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.CommonJSModule) }) and calling it using:

node myScript.js 123 123 123

Any ideas?

Sébastien Doeraene
@sjrd
A JS array is not a valid Array[String], so you're running into undefined behavior. But it should have thrown an UndefinedBehaviorError. Unless you're testing in fullOpt mode?
aappddeevv
@aappddeevv
Sébastien Doeraene
@sjrd
You need to export a method that takes a js.Array[String], if you want to go the exports route.
aappddeevv
@aappddeevv
If you are just trying to access the args, use a nodejs facade, or define your own.
Frank P. Tominc
@franktominc
Oh, I'm using the fullOpt mode
Sébastien Doeraene
@sjrd
You should only use the fullOpt mode when you're happy with your testing and you want to deploy/run for real.
fullOpt is not suited for iterative development: it does not check undefined behavior, and takes way longer to compile.
Frank P. Tominc
@franktominc
I made a little parser for arithmetic expressions and I want to run some tests to convince my boss that the java result and the scalaJs result are the same(I'm using BigDecimals)
I am trying to write something minimal, so I can generate a lot of test cases, call the jar file, call the JS file and compare both outputs
aappddeevv
@aappddeevv
You may just want to setup tests, say, with scalatest and demonstrate the sameness by running the tests.
Frank P. Tominc
@franktominc
Yeah, but how can I run scalatests against the JS file?
Sébastien Doeraene
@sjrd
With theProjectJS/test. Exact same thing than theProjectJVM/test for running the tests on the JVM.
Marc Grue
@marcgrue
image.png
^
@oyvindberg and @jhegedus42 - Alright, I can test/debug shared files in IntelliJ by right-clicking the jvm package and choose Run or Debug. Thanks for your help and input. This is good enough for now. I'll probably file a bug report with IntelliJ that you can't do the same by right-clicking the individual shared files directly.
aappddeevv
@aappddeevv
With tests, you can skip the "main" issue. An if you are new to scala/sbt, you could just write the JVM version, run it. Then copy the entire project to a new directory, add the scala-js plugin and %%% to the scalatest dependency. Then run the test in that new dir the same way.
Frank P. Tominc
@franktominc

Build.properties

sbt.version = 1.2.8

Plugins.sbt

addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.6.1")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")

build.sbt

import sbtcrossproject.CrossPlugin.autoImport.crossProject

val sharedSettings = Seq(
  name := "arithmetic-interpreter",
  version := "0.1.0-SNAPSHOT",
  libraryDependencies += "com.lihaoyi" %%% "fastparse" % "2.1.3"
)

lazy val arithmeticInterpreter = crossProject(JSPlatform, JVMPlatform)
    .in(file("."))
    .settings(sharedSettings)

Project Structure
https://imgur.com/dlJsydi

When I do a publishLocal and try to run it I'm running into a ClassNotFoundException, so somehow it's not getting the scalalib and packaging together with my jar, any idea why?

Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/mutable/ArrayOps$ofRef
    at Main$.main(Main.scala:6)
    at Main.main(Main.scala)
Caused by: java.lang.ClassNotFoundException: scala.collection.mutable.ArrayOps$ofRef
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more

Tried to call using java -cp <scalalib> -jar <myjar> and java -jar <myjar>

Sébastien Doeraene
@sjrd
Why not run from sbt with arithmeticInterpreterJVM/run?
Victor Ivri
@vivri
Hi, what's the best way to declare an imported function that accepts an object as an arg? will it be js.Object, js.Dictionary[???] or something else?
^ specifically, here's the function I'd like to import: https://github.com/katzer/cordova-plugin-background-mode#override-defaults
Antoine Doeraene
@sherpal
@vivri you can define a trait NotificationOptions extends js.Object where you set the members that you can set being js.UndefOr[T] for T the type you need. For example val title: js.UndefOr[String] = js.undefined.
Then, when you write the facade for that function, you ask def setDefaults(options: NotificationOptions): Unit = js.native. And you can feed the argument by instantiated new instances of NotificationOptions (a method apply in the companion object is not a bad idea in general)
Victor Ivri
@vivri
Great, thank you @sherpal !
Victor Ivri
@vivri
I wonder if it makes sense to convert the UndefOr[T] to Option[T]? Or will it erase the distinction between undefined and null...