Using `.deep` to compare `Array`s is deprecatedSC-W1051Array comparison using conventional comparison operatorsSC-W1046Invalid deprecated annotation usedSC-W1035Duplicate `case` bodiesSC-W1036Method parameter shadowedSC-W1037Incorrect stringification of an `Array`SC-W1047Use `.isNaN` to check if a `Double` is `NaN`SC-W1052Use `==` or `!=` instead of `.equals(null)` to compare against `null`SC-W1053`Try` values must be checked before calling `.get`SC-W1054Builtin structure shadowed by user defined typeSC-W1055Consider adding explicit type annotations to public membersSC-W1058Initializing `StringBuilder` with a `Char` results in empty stringSC-W1060Potential `NoSuchElementException` in accessing filtered elementsSC-R1006Calling garbage collector manually does not necessarily improve performanceSC-P1008Do not attempt to trap `IllegalMonitorStateException`SC-W1039Use string interpolation to concatenate an entity to a stringSC-W1070Audit: log4j version used could lead to remote code executionSC-A1003Comparing a fresh object with the result of `getClass` always evaluates to `false`SC-W1071Exception in `catch` clause is unreachableSC-W1072Missing type parameter for cast operationsSC-W1075`hashCode()` relies on a mutable valueSC-W1076Method's generic parameter shadows class' generic parameterSC-W1078Sealed entity has no descendantsSC-W1079Equality methods overridden in a `case` classSC-W1074Missing `catch` clause for `try`SC-W1081`equals()` and `hashCode()` must be overridden in pairSC-W1073Consider using `Symbol()` over deprecated symbol literal syntaxSC-W1080Do not prefix enum members with enum's nameSC-R1085Consider specifying type in `catch` clauseSC-W1089Enum value has a member that maps to an already mapped valueSC-W1087Annotating a method with both `inline` and `tailrec` annotations results in a compile-time error in future Scala versionsSC-W1088Access modifiers `protected[this]` and `private[this]` are deprecatedSC-W1090Use the `inline` keyword instead of the annotationSC-R1087If-else chain has a duplicate conditionSC-W1086`length`-like property is compared against values which always evaluate to the same resultSC-W1091XML literals are deprecated and will be phased outSC-W1094Misplaced `return` statement in a method of `Unit` return typeSC-W1095Consider using ADTs instead of `scala.Enumeration` for `enum`-like featuresSC-W1093Object created is neither assigned to a variable nor passed as an argument but is dropped immediatelySC-W1096Use `summon[T]` over `implicitly[T]` in Scala 3 to probe for `implicit`-sSC-W1092Methods returning `Option` should only return `Some` or `None`SC-T1005Use `.lastOption` to access the last elementSC-P1001Use `.isEmpty` or `.nonEmpty` to check if structure is emptySC-P1002Consider filtering first and then sortingSC-P1003Consider using the appropriate overloaded method when searching for a single charSC-P1004Calling `List.size` is inefficientSC-P1005Consider rewriting `filter().headOption` as `find()`SC-P1006Appending to `List` is in-efficientSC-P1007Consider combining successive `.filter()` callsSC-P1009Use anonymous pattern-matching functions instead of match blocks within iteratorsSC-R1001Consider using `.isEmpty` or `.nonEmpty` instead of `.size` for `List`sSC-R1025Use pattern matching instead of repeated calls to `isInstanceOf`SC-R1029Consider rewriting `.find().isDefined` as `.exists()`SC-R1033Consider rewriting `.reverse.tail.reverse` as `.init`SC-R1035Consider rewriting `.reverse.take().reverse` as `.takeRight()`SC-R1036Consider rewriting `.filter().lastOption` as `.findLast()`SC-R1037Duplicate key in `HashMap`SC-W1019Pattern matching may be non-exhaustiveSC-W1024Usage of reserved keywordsSC-W1030Potential resource (file handle) leakSC-W1033Variable shadows another variable with same name in the parent scopeSC-W1050Avoid nested `match` expressionsSC-W1059Consider using `flatten` to extract the required valuesSC-R1034Consider using `sys.env.get` instead of `System.getenv` when accessing environmental variablesSC-R1044`stripMargin` on a regular expression alters its behaviorSC-W1066Consider making `case objects` `final`SC-W1067Use of Yoda expressionsSC-W1068`final` modifier is redundant for `object`SC-R1053Consider explicitly defining the main method, i.e. the entry pointSC-W1062Classes should not extend `java.lang.Error`SC-R1045Exception thrown is genericSC-R1043Consider using `AutoCloseable` for closing resourcesSC-R1052Deprecated multiarg infix syntaxSC-R1041Accessor like method has return type `Unit`SC-R1042`finalize`rs should not be defined explicitlySC-R1046Explicitly defined `finalize`rs should not be publicSC-R1047`finalize`rs should call `super.finalize` for super classes to run their own finalization logicSC-R1048Overridden methods cannot simply call `super`SC-R1049Empty `finalize`rs do not add anything of value and are redundantSC-R1050Consider dropping parentheses for accessor like methodsSC-R1051Consider using `.reduceOption` over `.reduce`SC-R1054SBT: Consider using the `slash` syntax instead of `in`SC-W1064Tests should have `assert` statementsSC-W1065Sealed `trait`s descendants must be `final`SC-W1069Accessing internal APIs via `--add-exports`SC-W1063Exception is generalized in the catch clauseSC-R1055Lambda can be converted to expression bodied lambdaSC-R1063Specifying the default value for an `implicit` parameter may adversely affect readabilitySC-R1059Variable can be declared as a `val` instead of `var`SC-R1061Using of braces in `import` statements is discouraged if importing a single entitySC-R1060Empty `finally` blockSC-R1056Catch clauses should do more than just rethrow exceptionsSC-R1057Pure methods should not have side-effectsSC-R1058Unary operator is redundant due to its operandSC-R1064Consider using `uninitialized` instead of `_` for uninitialized fields in Scala 3SC-R1078Parameters with default values should always be specified at lastSC-R1074Unary methods should not have any parentheses/take any argumentsSC-R1079Consider using the new syntax for vararg splicingSC-R1080Consider using the `as` keyword for import aliasesSC-R1081Consider returning values from `if` statement where possibleSC-R1082Pattern matching only mentions wildcard patternsSC-R1066Lambda parameter is unusedSC-W1083Universal `apply` methods make the `new` keyword redundantSC-R1069Unary methods cannot have return type `Unit`SC-R1083Consider using `implicit` over view boundsSC-R1065Exception variable is declared but unusedSC-W1082Consider breaking down long literals using the underscore tokenSC-R1084An entity that was already imported was re-importedSC-R1071Consider using `?` for wildcard arguments in types instead of `_` in Scala 3SC-R1077Consider using `*` for wildcard imports instead of `_` in Scala 3SC-R1075Range's upper bound is equal to a length-like propertySC-W1084Exception is instantiated using `new` but is not thrownSC-W1085Classes that are not exceptions should not end with `Exception`SC-R1072Classes that do not receive any parameters should not define empty parameter listSC-R1073Fold expression used to sum elements can be simplifiedSC-R1067Consider using the `@targetName()` annotation for symbol-like methodsSC-R1068Using the logical not operator to invert binary expressions can affect readabilitySC-R1070Import aliases do not need to be wrapped in braces in Scala 3SC-R1076Audit required: Instance of `NotImplementedError`SC-A1005`infix` modifier is redundant for symbol-like methodsSC-R1089Consider using `.findLast()` over `.reverse.find()`SC-P1012Use prefix notation over postfix notation where possibleSC-R1090Consider turning partial function into anonymous functionSC-R1093Consider using the efficient alternative `.reverseIterator` over `.reverse.iterator`SC-P1010Consider using `.collectFirst()` over `.collect().headOption`SC-P1011Consider using `Option(...)` instead of an explicit `if` statementSC-R1092Consider using `None` instead of `Some(null)`SC-A1002Consider grouping imports from same package togetherSC-R1011Consider using the comparison operators `==` or `!=` to compare `String`sSC-R1026Consider using `.dropRight` instead of `.substring` when the lower-bound is 0SC-R1027Redundant `val` keyword for case class' constructor parameterSC-R1038Consider simplifying `if`-`else` when returning only `Boolean` valuesSC-R1040Missing package declaration for fileSC-W1045Consider dropping pointless type boundsSC-R1032Use of `TODO/FIXME` comment encounteredSC-D1000`if` condition can be moved inside the `for` loop as an enumerator guardSC-R1062Redundant brace initializer when instantiating objectSC-R1086Wrapping identifiers in braces in interpolation is redundantSC-R1088Empty interpolated stringSC-W1011Incorrect number of args to String.formatSC-W1008Missing case `None` in pattern-matchingSC-W1025Infix operator has same operand on both sidesSC-W1026Duplicated `then` and `else` blocksSC-W1027Type `T` is a potential candidate for type erasureSC-A1004Catching of ThrowableSC-W1010Detected unreachable codeSC-W1006Duplicate case in pattern-matchingSC-W1007Oddness check i % 2 == 0 fails for -ve numbersSC-W1000Missing method return typeSC-W1009Explicit trap of `NullPointerException`SC-W1021`If` condition depends on `boolean` value that is a compile time constantSC-W1022Unused method parameterSC-W1038Audit required: Insecure hash functionSC-A1001Explicitly casting an object via `.asInstanceOf`SC-T1000Explicit cast operation: `isInstanceOf`SC-T1001Method has return type `Any`SC-T1002Consider making this `case` class finalSC-W1001Exception caught is genericSC-W1005Variable assigned to itselfSC-W1014Case class should always take a parameterSC-W1077Usage of wildcard importsSC-C1001Exception naming does not follow the recommended styleSC-C1000Replace `find() [==/!=] None` with `exists()`SC-R1009Methods with single statement in body may follow single-line conventionSC-C1006Too many method parametersSC-C1002Prefer using `Option.isDefined`, `Option.isEmpty` or `Option.nonEmpty` instead of `Option.size`SC-R1004Redundant `getOrElse()` on `get()`SC-R1005Replace `filter().isEmpty` with `!exists()`SC-R1007Replace `filter().size` with `count()`SC-R1008Parameterless method has return type - UnitSC-R1014Redundant `else` in `else if`SC-R1015Use 'until n' instead of 'to n - 1' in loopsSC-R1016Replace `!isEmpty` with `nonEmpty`SC-R1017Replace `!nonEmpty` with `isEmpty`SC-R1018Simplify verbose boolean comparisonSC-R1020Prefer using `.get` and then pattern matching over `.contains` for a MapSC-R1021Consider using `.isEmpty` or `.nonEmpty` when checking for empty `String`sSC-R1022Consider rewriting this `if` condition as case's entry guardSC-R1023Prefer `String` interpolation over `String.format`SC-R1030Duplicate element in `HashSet`SC-W1020Redundant `return` keyword for the last expression of the blockSC-W1029Use pattern matching instead of calling `.get` on `Option`SC-W1049Empty statements blockSC-C1004Structure is missing mutability-prefixSC-R1010Explicit `null` in value assignmentSC-W1012Explicit `null` in method callSC-W1013Method variant that return `Option[T]` should have their names suffixed with `Option`SC-C1005Function with cyclomatic complexity higher than thresholdSC-R1091
Scala logo

Scala

Static Analysis, SAST, Code Coverage, Code Complexity

Sample Configuration
.deepsource.toml
version = 1

test_patterns = [
  "src/test/scala/**"
]

exclude_patterns = [
  "**/examples/**"
]

[[analyzers]]
name = "scala"
Explore the docs for all configuration options.