From 36507433612040f5408b203d29c6f6b8a56a4dd4 Mon Sep 17 00:00:00 2001 From: danicheg Date: Thu, 2 Nov 2023 13:23:56 +0300 Subject: [PATCH 1/3] Emit the warning if the 'Ystatistics' option isn't set --- .../scala/ch/epfl/scala/ProfilingPlugin.scala | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala b/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala index daa1f2e..934824e 100644 --- a/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala +++ b/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala @@ -16,15 +16,16 @@ import ch.epfl.scala.profiledb.utils.AbsolutePath import ch.epfl.scala.profilers.ProfilingImpl import ch.epfl.scala.profilers.tools.{Logger, SettingsOps} -import scala.reflect.internal.util.{SourceFile, Statistics} +import scala.reflect.internal.util.{NoPosition, SourceFile, Statistics} import scala.reflect.io.Path +import scala.tools.nsc.Reporting.WarningCategory import scala.tools.nsc.io.AbstractFile import scala.tools.nsc.{Global, Phase} import scala.tools.nsc.plugins.{Plugin, PluginComponent} import scala.util.Try import scala.util.matching.Regex -class ProfilingPlugin(val global: Global) extends Plugin { +class ProfilingPlugin(val global: Global) extends Plugin { self => // Every definition used at init needs to be lazy otherwise it slays the compiler val name = "scalac-profiling" val description = "Adds instrumentation to keep an eye on Scalac performance." @@ -294,6 +295,16 @@ class ProfilingPlugin(val global: Global) extends Plugin { override def run(): Unit = { super.run() + if (!SettingsOps.areStatisticsEnabled(global)) { + val flagName = global.settings.Ystatistics.name.replace("-V", "-Y") + global.runReporting.warning( + NoPosition, + s"`${self.name}` compiler plugin requires the option `$flagName` to be enabled", + WarningCategory.OtherDebug, + "" + ) + } + val graphsRelativePath = ProfileDbPath.GraphsProfileDbRelativePath val graphsDir = globalOutputDir.resolve(graphsRelativePath) reportStatistics(graphsDir) From 299c46db8130a9e223d187bf9a88f7880ff7632d Mon Sep 17 00:00:00 2001 From: danicheg Date: Thu, 2 Nov 2023 13:24:58 +0300 Subject: [PATCH 2/3] Use named arguments in config instantiation --- .../main/scala/ch/epfl/scala/ProfilingPlugin.scala | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala b/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala index 934824e..fd1d950 100644 --- a/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala +++ b/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala @@ -56,13 +56,13 @@ class ProfilingPlugin(val global: Global) extends Plugin { self => } private final lazy val config = PluginConfig( - super.options.contains(ShowProfiles), - super.options.contains(NoProfileDb), - findOption(SourceRoot, SourceRootRegex).map(AbsolutePath.apply), - findSearchIds(findOption(PrintSearchResult, PrintSearchRegex)), - super.options.contains(GenerateMacroFlamegraph), - super.options.contains(PrintFailedMacroImplicits), - super.options.contains(ShowConcreteImplicitTparams) + showProfiles = super.options.contains(ShowProfiles), + noDb = super.options.contains(NoProfileDb), + sourceRoot = findOption(SourceRoot, SourceRootRegex).map(AbsolutePath.apply), + printSearchIds = findSearchIds(findOption(PrintSearchResult, PrintSearchRegex)), + generateMacroFlamegraph = super.options.contains(GenerateMacroFlamegraph), + printFailedMacroImplicits = super.options.contains(PrintFailedMacroImplicits), + concreteTypeParamsInImplicits = super.options.contains(ShowConcreteImplicitTparams) ) private lazy val logger = new Logger(global) From d8ea328edff090f5277477eaa3780226a78e0122 Mon Sep 17 00:00:00 2001 From: danicheg Date: Tue, 21 Nov 2023 12:12:51 +0300 Subject: [PATCH 3/3] Let the 'statistics' compile option vary for 2.12 and 2.13 --- plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala b/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala index fd1d950..7696dae 100644 --- a/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala +++ b/plugin/src/main/scala/ch/epfl/scala/ProfilingPlugin.scala @@ -296,7 +296,7 @@ class ProfilingPlugin(val global: Global) extends Plugin { self => super.run() if (!SettingsOps.areStatisticsEnabled(global)) { - val flagName = global.settings.Ystatistics.name.replace("-V", "-Y") + val flagName = global.settings.Ystatistics.name global.runReporting.warning( NoPosition, s"`${self.name}` compiler plugin requires the option `$flagName` to be enabled",