diff --git a/eqwalizer/src/main/resources/application.conf b/eqwalizer/src/main/resources/application.conf index d9f69c7..02ae428 100644 --- a/eqwalizer/src/main/resources/application.conf +++ b/eqwalizer/src/main/resources/application.conf @@ -15,4 +15,6 @@ eqwalizer { check_redundant_guards = ${?EQWALIZER_CHECK_REDUNDANT_GUARDS} mode = standalone mode = ${?EQWALIZER_MODE} + error_depth = 4 + error_depth = ${?EQWALIZER_ERROR_DEPTH} } diff --git a/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/package.scala b/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/package.scala index c43c37f..1c64422 100644 --- a/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/package.scala +++ b/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/package.scala @@ -50,6 +50,7 @@ package object eqwalizer { tolerateErrors: Boolean, checkRedundantGuards: Boolean, mode: Mode.Mode, + errorDepth: Int, ) { def useElp(): Boolean = { mode match { @@ -79,6 +80,7 @@ package object eqwalizer { tolerateErrors = config.getBoolean("tolerate_errors"), checkRedundantGuards = config.getBoolean("check_redundant_guards"), mode, + errorDepth = config.getInt("error_depth"), ) } } diff --git a/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/tc/SubtypeDetail.scala b/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/tc/SubtypeDetail.scala index cfcf68e..21f81a9 100644 --- a/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/tc/SubtypeDetail.scala +++ b/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/tc/SubtypeDetail.scala @@ -10,7 +10,6 @@ import com.whatsapp.eqwalizer.ast.Types._ import com.whatsapp.eqwalizer.ast.{RemoteId, Show, TypeVars} object SubtypeDetail { - private val maxDepth = 4 lazy val nonVerboseRids = builtinTypes.keys.map(RemoteId("erlang", _, 0)).toSet private case class Detail(t1: Type, t2: Type, reasonPrefix: Option[String], reasonPostfix: Option[String]) @@ -83,7 +82,7 @@ class SubtypeDetail(pipelineContext: PipelineContext) { } private def findSubtypeMismatch(t1: Type, t2: Type): List[Detail] = - findMismatchAux(t1, t2, Nil, Set.empty).reverse.take(maxDepth) + findMismatchAux(t1, t2, Nil, Set.empty).reverse.take(pipelineContext.errorDepth) // keep this function in sync with subtype.subtype // Main differences from subtype.subtype's cases: diff --git a/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/tc/package.scala b/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/tc/package.scala index dfaaf54..9366f16 100644 --- a/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/tc/package.scala +++ b/eqwalizer/src/main/scala/com/whatsapp/eqwalizer/tc/package.scala @@ -22,6 +22,7 @@ package object tc { tolerateErrors: Option[Boolean] = None, unlimitedRefinement: Option[Boolean] = None, checkRedundantGuards: Option[Boolean] = None, + errorDepth: Option[Int] = None, ) val noOptions: Options = Options() @@ -65,5 +66,7 @@ package object tc { options.checkRedundantGuards.getOrElse(config.checkRedundantGuards) val typeInfo: TypeInfo = new TypeInfo(this) + val errorDepth: Int = + options.errorDepth.getOrElse(config.errorDepth) } }