2016-05-31 2 views
0

특정 StaticAnnotation 유형에서 JS 파일을 만드는 sbt 플러그인을 작성하고 있습니다. 클래스 패스에서 발견 된 모든 주석을 포함하는 대신 실제로 fastOptJS/fullOptJS에 의해 링크 된 클래스에서만 주석을 방출하는 것을 선호합니다. 이 목적으로 Scala.js 링커 도구 또는 sbt 플러그인을 활용할 수 있습니까?실제로 fastOpt.js/fullOpt.js에 링크 된 Scala.js 클래스 목록?

답변

0

예, 가능합니다. Scala.js Tools API (링커 도구)는 필요한 모든 것을 포함하는 Analysis이라는 데이터 유형을 제공합니다.

AnalysisAnalyzer.computeReachability으로 구성 할 수 있습니다. 클래스 경로의 .sjsir 파일에 대해 적절한 ClassInfo을 제공해야합니다.

이것은 the callgraph sbt plugin에서 행해졌

이는 여전히 개발중인 SBT 프로젝트를위한 Analysis을 구성하는 방법을 나타내지 만, ( 가 https://github.com/lionelfleury/scala-js-call-graph/blob/065506bf9a9c12ccc54fed056fed878e6f18b328/sbt-scalajs-callgraph/src/main/scala/ch/epfl/sbtplugin/CallGraphPlugin.scala#L28-L49

이러한 특정 구현은 Analysis 후 최적화가 수행 된 선택하는 않는 프로그램이 연결되지 않은 경우, 으로 돌아가서 최적화가 수행됩니다. 사용 사례에 따라 둘 중 하나를 선호 할 수도 있지만 최적화 이후 버전 을 원할 가능성이 큽니다.

일단 Analysis이 있으시면 classInfo 회원을 나열하고 .isNeededAtAll이 false 인 필터를 걸러 낼 수 있습니다. 또한 귀하의 경우에 따라 .isAnySubclassInstantiated과 같이 더욱 세련된 테스트를 사용하고자합니다.

+0

위의 설명에 감사드립니다. 한 가지 질문 : sbt.Logger에서 core.tools.logging.Logger를 얻으려면 어떻게해야합니까? – jokade

+0

다음과 같이하십시오 : https://github.com/scala-js/scala-js/blob/master/sbt-plugin/src/main/scala/scala/scalajs/sbtplugin/Implicits.scala 우리는 아마도 그러한 것들을 함축적 인 것으로 드러내지 않아야합니다 ^^) – sjrd