## Where communities thrive

• Join over 1.5M+ people
• Join over 100K+ communities
• Free without limits
##### Activity
Ghost
@ghost~54f4b69115522ed4b3dcb16d
Trying to build current master with fresh clone, does anyone else see:
[error] Modules were resolved with conflicting cross-version suffixes in {file:/Users/andrew/tmp/wartremover/}sbt-plugin:
[error]    org.scala-lang.modules:scala-xml _2.13.0-M3, _2.12
java.lang.RuntimeException: Conflicting cross-version suffixes in: org.scala-lang.modules:scala-xml
at scala.sys.package$.error(package.scala:27) at sbt.ConflictWarning$.processCrossVersioned(ConflictWarning.scala:46)
at sbt.ConflictWarning$.apply(ConflictWarning.scala:32) Martin @mrt181 hi, I can't configure the wartremoverExclude correctly this is wHat i have configured:  lazy val wartremoverSettings = Seq( wartremoverErrors in (Compile, compile) ++= Warts.unsafe, wartremoverExcluded += sourceManaged.value ) and this is what I get (abbreviated) [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthProvider.scala:81:11: [wartremover:Var] var is disabled [error] var _done__ = false [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:118:19: [wartremover:Any] Inferred type containing Any [error] __fieldsMap.getOrElse(__fields.get(0), "").asInstanceOf[_root_.scala.Predef.String], [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:119:19: [wartremover:Any] Inferred type containing Any [error] __fieldsMap.getOrElse(__fields.get(1), "").asInstanceOf[_root_.scala.Predef.String] [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:118:50: [wartremover:AsInstanceOf] asInstanceOf is disabled [error] __fieldsMap.getOrElse(__fields.get(0), "").asInstanceOf[_root_.scala.Predef.String], [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:119:50: [wartremover:AsInstanceOf] asInstanceOf is disabled [error] __fieldsMap.getOrElse(__fields.get(1), "").asInstanceOf[_root_.scala.Predef.String] [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:34:5: [wartremover:DefaultArguments] Function has default arguments [error] providerId: _root_.scala.Predef.String = "", [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:71:24: [wartremover:NonUnitStatements] Statements must return Unit [error] while (!_done__) { [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:93:35: [wartremover:Null] null is disabled [error] if (__t != "") __t else null [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:97:35: [wartremover:Null] null is disabled [error] if (__t != "") __t else null [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:126:62: [wartremover:OptionPartial] Option#get is disabled - use Option#fold instead [error] __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""), [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:127:62: [wartremover:OptionPartial] Option#get is disabled - use Option#fold instead [error] __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Predef.String]).getOrElse("") [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:129:15: [wartremover:Throw] throw is disabled [error] case _ => throw new RuntimeException("Expected PMessage") [error] ^ [error] C:\cygwin64\home\r892107\sourcecode\topgun\target\scala-2.12\src_managed\main\com\google\api\AuthRequirement.scala:133:113: [wartremover:Throw] throw is disabled [error] def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number) [error] I can't ignore the generated code Martin @mrt181 nevermind found the solution: wartremoverExcluded ++= PathFinder(sourceManaged.value).**("*.scala").get Dmitry Bugakov @dmitrybugakov Hello, I have subprojects in sbt file, how I can add them in wartremover? Can you help? ritschwumm @ritschwumm @dmitrybugakov with the latest version i just have sth like this in my build.sbt: inThisBuild(Seq(wartremoverErrors ++= Seq( ... ))) Dmitry Bugakov @dmitrybugakov @ritschwumm thank you) PsyfireX @PsyfireX Does wart remover support flagging discarded values out of the box, or would I have to write a custom rule for that? Bijan Chokoufe Nejad @bijancn @PsyfireX there is a compiler warning for that (which you can turn into an error): "-Ywarn-value-discard" PsyfireX @PsyfireX There's an unfortunate side-effect that -Xfatal-warnings is an "all or nothing" flag, converting every warning into a compiler error. There are workarounds, but I'm trying to consider all options which is why I'm also looking at wartremover Bijan Chokoufe Nejad @bijancn yeah I had some success with https://github.com/ghik/silencer for the cases that don't allow any other work arounds PsyfireX @PsyfireX That does seem to be the quickest solution. Rob Cornell @rcornell Hey all, with Maven, is there a way to pass the equivalent of this argument: wartremoverErrors ++= Warts.allBut(Wart.NonUnitStatements) Rob Cornell @rcornell @PsyfireX Any idea about the maven implementation above? John-Michael Reed @JohnReedLOL I am working on a horrible codebase and if I run WartRemover on it, the thing will blow up with thousands of warnings and errors. Is there a way for me to run WartRemover just on a single file in the codebase so that I can ignore all the issues from all the other files? The file consists of a single Scala object or class. Rob Cornell @rcornell You could potentially set it to warnings only: "-P:wartremover:only-warn-traverser:org.wartremover.warts.Unsafe" Could also build up exclusions to packages other thanthe one you're focused on: To exclude a file or directory from all checks, use wartremoverExcluded in your build.sbt file: wartremoverExcluded += baseDirectory.value / "src" / "main" / "scala" / "SomeFile.scala" wartremoverExcluded += sourceManaged.value @JohnReedLOL Philipp Martini @maphi Hey, it looks like wartremover and better-monadic-for get in their way: for { ... (a,b) = foo } yield () this reports error: [wartremover:NonUnitStatements] Statements must return Unit any suggestions? is there an order to specify for sbt scalac plugins? Philipp Martini @maphi btw: using wartremover 2.3.7 and better-monadic-for 0.3.0-M4 Philipp Martini @maphi Problem solved by better-monadic-for maintainer: Fix is adding scalacOptions ++= Seq("-P:bm4:no-map-id:n", "-P:bm4:no-tupling:n"), Nikolay Danshin @nDanshin hello, guys. I have sbt 0.13.6 and Scala version 2.12.4. And I try to add wartremover. Which version of it should I use? addSbtPlugin("org.wartremover" % "sbt-wartremover" % "2.3.7") thats ok? John-Michael Reed @JohnReedLOL @nDanshin - just copy-pasting whatever it says on the website/docs. If you don't know how to use sbt, read the sbt docs first. Hey, I want to add WartRemover to an old multi-project Build.scala file. I am talking sbt version 13.5 old. How do I do that? Victor Viale @Koroeskohr hi there ! I tried fiddling with the project today, and realised that the Var wart wasn't caught when a var is defined inside a trait, is there a reason why ? :) Ólafur Páll Geirsson @olafurpg @Koroeskohr that could be because var inside traits desugar into private fields with a setter method Nicolas Rinaudo @nrinaudo I'm hitting something that feels like a bug: with Scala 2.13, the StringPlusAny wart will trigger on string interpolation is that working as intended? Greg Pfeil @sellout @nrinaudo I feel like that is the correct behavior (unless you’re interpolating a String). Nicolas Rinaudo @nrinaudo oh, it's been pointed out that there's actually a bug open for that: wartremover/wartremover#447 @sellout I think it's debatable. You might want to disallow string interpolation with non string members, but: • that seems harsh! • it's really odd that it'd trigger StringPlusAny I think I understand the purpose of StringPlusAny, and that's not it (but I might be wrong in that) Greg Pfeil @sellout What is the purpose if not to avoid automatic conversion to String? Like, how is "some${foo} string" different from "some " + foo + " string"?
Nicolas Rinaudo
@nrinaudo
well, because I'd assume it to be equivalent to "some " + foo.toString + " string", which I would have thought triggered ToString
Greg Pfeil
@sellout
In my own code bases, anything that resulted in a call to toString would be a bug, but I know that my use case is not everyone’s.
Nicolas Rinaudo
@nrinaudo
So, there’s another wart to catch use of toString.
yeah. ToString
If that were triggered by string interpolation, I'd get it. But StringPlusAny feels confusing for newcomers - it's another of these failures where the root cause is hidden