내 응용 프로그램에는 라이브러리 A에 대한 컴파일 종속성이 있습니다.이 라이브러리에는 성능 문제를 일으키는 특정 기능이 있습니다. 그러나 더 이상 사용되지 않는 것은 아니며 이러한 사전 정보가 없으면 사용하는 것이 안전하다고 생각할 것입니다. 이 함수를 어떻게 든 사용하지 않거나 직접 호출되지 않도록하는 방법을 찾고 있습니다.
정적 분석 도구 또는 내장 컴파일러 플래그를 통해이를 달성 할 수 있습니까?
scalafix를 확인했지만 이런 종류의 linting을 설정하기에는 너무 복잡했습니다. 결국 wartremover를 사용하고 사용자 지정 사마귀를 추가했습니다.
사용자 정의 사마귀는이 예제에 표시된대로 하위 프로젝트에 있습니다.
lazy val myWarts = project.in(file("my-warts")).settings(
commonSettings,
libraryDependencies ++= Seq(
"org.wartremover" % "wartremover" % wartremover.Wart.PluginVersion cross CrossVersion.full
)
)
lazy val main = project.in(file("main")).settings(
commonSettings,
wartremoverWarnings += Wart.custom("mywarts.ExtractOrElse"),
wartremoverClasspaths ++= {
(fullClasspath in (myWarts, Compile)).value.map(_.data.toURI.toString)
}
)
내장 EitherProjectionPartial 사마귀 를 수정하여 사용자 정의 사마귀를 만들었습니다 .
object ExtractOrElse extends WartTraverser {
def apply(u: WartUniverse): u.Traverser = {
import u.universe._
val extractableJsonAstNode = rootMirror.staticClass("org.json4s.ExtractableJsonAstNode")
new u.Traverser {
override def traverse(tree: Tree): Unit = {
tree match {
// Ignore trees marked by SuppressWarnings
case t if hasWartAnnotation(u)(t) =>
case Select(left, TermName("extractOrElse")) if left.tpe.baseType(extractableJsonAstNode) != NoType =>
error(u)(tree.pos, "extractOrElse is deprecated - use toOption.map or extract[Option[A]] instead")
super.traverse(tree)
case _ => super.traverse(tree)
}
}
}
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다