Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to properly use scalac -Xlint

scalax -Xlint help provides the following info:

$ scalac -Xlint:help
Enable or disable specific warnings
  adapted-args               Warn if an argument list is modified to match the receiver.
  nullary-unit               Warn when nullary methods return Unit.
  inaccessible               Warn about inaccessible types in method signatures.
  nullary-override           Warn when non-nullary `def f()' overrides nullary `def f'.
  infer-any                  Warn when a type argument is inferred to be `Any`.
  missing-interpolator       A string literal appears to be missing an interpolator id.
  doc-detached               A Scaladoc comment appears to be detached from its element.
  private-shadow             A private field (or class parameter) shadows a superclass field.
  type-parameter-shadow      A local type parameter shadows a type already in scope.
  poly-implicit-overload     Parameterized overloaded implicit methods are not visible as view bounds.
  option-implicit            Option.apply used implicit view.
  delayedinit-select         Selecting member of DelayedInit.
  by-name-right-associative  By-name parameter of right associative operator.
  package-object-classes     Class or object defined in package object.
  unsound-match              Pattern match may not be typesafe.
  stars-align                Pattern sequence wildcard must align with sequence component.

Is there a way to enable all checks? What's the semantic of scalac -Xlint ? will it enable all? A default set (which) ? Won't do anything?

Note: Scala 2.11.8 and sbt 0.13.9

If newer versions provide different behaviour/features let me know, as updating them is not a problem

like image 278
pedrorijo91 Avatar asked Jan 06 '23 20:01

pedrorijo91


1 Answers

-Xlint currently means -Xlint:_, but that needs to be made explicit.

Historically, there have always been warnings that are too noisy or unreliable to enable by default, so there have always been warnings excluded from -Xlint.

Currently, there's one such lintable, but it's not hooked up to the command line option.

There used to be a -Ywarn-all that meant -Xlint plus those other warnings. It's not obvious why that option went away.

At one point, -Xlint:_ was going to mean -Ywarn-all, with -Xlint to mean a recommended subset, but it turns out that people like to disable one or two lint rules with -Xlint:-annoying,_, which is harder to do if that enables arbitrarily many other noisy lint rules.

Normally, scalac -X shows defaults; but probably scalac -Xlint:help will be improved to show its default behavior. That default is nontrivial for something like -Yopt.

$ scalac -help
Usage: scalac <options> <source files>
where possible standard options include:
  -X                              Print a synopsis of advanced options.


$ scalac -X
Usage: scalac <options> <source files>

-- Notes on option parsing --
Boolean settings are always false unless set.
Where multiple values are accepted, they should be comma-separated.
  example: -Xplugin:option1,option2
<phases> means one or a comma-separated list of:
  (partial) phase names, phase ids, phase id ranges, or the string "all".
  example: -Xprint:all prints all phases.
  example: -Xprint:expl,24-26 prints phases explicitouter, closelim, dce, jvm.
  example: -Xprint:-4 prints only the phases up to typer.

Possible advanced options include:
  -Xlint:<_,warning,-warning>    Enable or disable specific warnings: `_' for all, `-Xlint:help' to list
like image 147
som-snytt Avatar answered Jan 13 '23 20:01

som-snytt