ctrl+shift+p filters: :st2 :st3 :win :osx :linux


by Josh Hagins ST3

SublimeLinter 3 plugin for Scala, using scalac



  • Total 2K
  • Win 770
  • Mac 962
  • Linux 564
Jun 24 Jun 23 Jun 22 Jun 21 Jun 20 Jun 19 Jun 18 Jun 17 Jun 16 Jun 15 Jun 14 Jun 13 Jun 12 Jun 11 Jun 10 Jun 9 Jun 8 Jun 7 Jun 6 Jun 5 Jun 4 Jun 3 Jun 2 Jun 1 May 31 May 30 May 29 May 28 May 27 May 26 May 25 May 24 May 23 May 22 May 21 May 20 May 19 May 18 May 17 May 16 May 15 May 14 May 13 May 12 May 11
Windows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Mac 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0




Build Status

This linter plugin for SublimeLinter provides an interface to scalac. It will be used with files that have the “scala” syntax.


Please note that because scalac requires a complete directory context in order to work, this linter plugin currently will only lint a file when it has been saved. As soon as you modify the file, all linter marks will be cleared.


SublimeLinter 3 must be installed in order to use this plugin. If SublimeLinter 3 is not installed, please follow the instructions here.

Linter installation

Before using this plugin, you must ensure that scalac is installed on your system. scalac is part of the scala developer SDK, which can be downloaded here.

Note: This plugin requires Scala 2.9.1 or later.

Linter configuration

In order for scalac to be executed by SublimeLinter, you must ensure that its path is available to SublimeLinter. Before going any further, please read and follow the steps in “Finding a linter executable” through “Validating your PATH” in the documentation.

Once you have installed and configured scalac, you can proceed to install the SublimeLinter-contrib-scalac plugin if it is not yet installed.

Plugin installation

Please use Package Control to install the linter plugin. This will ensure that the plugin will be updated when new versions are available. If you want to install from source so you can modify the source code, you probably know what you are doing so we won’t cover that here.

To install via Package Control, do the following:

  1. Within Sublime Text, bring up the Command Palette and type install. Among the commands you should see Package Control: Install Package. If that command is not highlighted, use the keyboard or mouse to select it. There will be a pause of a few seconds while Package Control fetches the list of available plugins.

  2. When the plugin list appears, type scalac. Among the entries you should see SublimeLinter-contrib-scalac. If that entry is not highlighted, use the keyboard or mouse to select it.


For general information on how SublimeLinter works with settings, please see Settings. For information on generic linter settings, please see Linter Settings.

In addition to the standard SublimeLinter settings, SublimeLinter-contrib-scalac provides its own settings. Those marked as “Inline Setting” or “Inline Override” may also be used inline.

Setting Type Description Inline Setting Inline Override
lint str\ list A comma-delimited list of rules to apply.
classpath str\ list A colon-delimited list of classpath entries.
classpath_filename str Name of file containing colon-delimited classpath.
target_directory str Where to put class files generated by scalac.


Valid rules for the lint option depend on the version of Scala you have installed. Options with a check in the Default column are enabled by default:

Rule Description Scala Version Default
check-null Warn upon selection of nullable reference. 2.9.1-2.10.4
dead-code Warn when dead code is identified. >= 2.9.1 2.9.1-2.9.3
value-discard Warn when non-Unit expression results are unused. >= 2.9.1
numeric-widen Warn when numerics are widened. >= 2.9.1
nullary-unit Warn when nullary methods return Unit. >= 2.9.1
inaccessible Warn about inaccessible types in method signatures. >= 2.9.1
nullary-override Warn when non-nullary def f() overrides nullary def f. >= 2.9.1
adapted-args Warn if an argument list is modified to match the receiver. >= 2.10.0
infer-any Warn when a type argument is inferred to be Any. >= 2.11.0
unused Warn when local and private vals, vars, defs, and types are unused. >= 2.11.0
unused-import Warn when imports are unused. >= 2.11.0
missing-interpolator A string literal appears to be missing an interpolator id. >= 2.11.2
doc-detached A ScalaDoc comment appears to be detached from its element. >= 2.11.2
private-shadow A private field (or class parameter) shadows a superclass field. >= 2.11.2
poly-implicit-overload Parameterized overloaded implicit methods are not visible as view bounds. >= 2.11.2
option-implicit Option.apply used implicit view. >= 2.11.2
delayedinit-select Selecting member of DelayedInit. >= 2.11.2
by-name-right-associative By-name parameter of right associative operator. >= 2.11.2
package-object-classes Class or object defined in package object. >= 2.11.2
unsound-match Pattern match may not be typesafe. >= 2.11.2
deprecation Emit warning and location for usages of deprecated APIs. >= 2.9.1
unchecked Enable additional warnings where generated code depends on assumptions. >= 2.9.1
fatal-warnings Fail the compilation if there are any warnings. >= 2.9.1
nowarn Generate no warnings. >= 2.9.1
feature Emit warning and location for usages of features that should be imported explicitly. >= 2.10.0

For example, to enable numeric-widen and deprecation, you would add this to the linter settings:

"scalac": {
    "lint": "numeric-widen,deprecation"

Or as a list:

"scalac": {
    "lint": [

To enable feature and disable doc-detached but keep the rest of the settings, you would put this comment on the first or second line of the file:

// [SublimeLinter scalac-lint:+feature,+-doc-detached]


If you specify classpath, the linter plugin will use the given entries as input to scalac -classpath.

With an sbt project, you can get your full classpath by running

sbt 'export fullClasspath'

You may specify classpath as a string:

"scalac": {
    "classpath": "${project}/target/scala-2.11/classes:${project}/lib/lib.jar"

Or as a list:

"scalac": {
    "classpath": [


If you specify classpath_filename, the linter plugin will search for a file with that name in the project directory and its parents. If found, it will use the contents of that file with scalac -classpath for linting.

If both classpath and classpath_filename are specified, their values will be merged.

The contents of the file must be a colon-delimited list of paths for the JVM to search during compilation. For example:


You can also add whitespace between classpath entries for better readability:



This setting tells scalac where to put generated class files. The plugin will create the directory if it does not already exist.

For example:

"scalac": {
    "target_directory": "${project}/target/scala-2.11/classes"

If target_directory is unset, class files will be put in the same directory as their source files.


If you would like to contribute enhancements or fixes, please do the following:

  1. Fork the plugin repository.
  2. Hack on a separate topic branch created from the latest develop.
  3. Commit and push the topic branch.
  4. Make a pull request.
  5. Be patient. ;-)

Please note that modifications should follow these coding guidelines:

  • Indent is 4 spaces.
  • Code should pass flake8 and pep257 linters.
  • Vertical whitespace helps readability, don’t be afraid to use it.
  • Please use descriptive variable names, no abbrevations unless they are very well known.

Also note that this repository uses overcommit as a validation tool. Before making any changes, please install overcommit in your local repository.

Thank you for helping out!