Skip to content

Commit 0bdbf03

Browse files
committed
sysops: split some platform code from FileOps
1 parent f47dc76 commit 0bdbf03

File tree

26 files changed

+212
-192
lines changed

26 files changed

+212
-192
lines changed

scalafmt-benchmarks/src/main/scala/org/scalafmt/benchmarks/MicroBenchmark.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.scalafmt.benchmarks
22

33
import org.scalafmt.Scalafmt
44
import org.scalafmt.sysops.FileOps
5+
import org.scalafmt.sysops.PlatformFileOps
56

67
import java.nio.file.Path
78
import java.util.concurrent.TimeUnit
@@ -27,13 +28,13 @@ abstract class MicroBenchmark(path: String*) extends FormatBenchmark {
2728
var code: String = _
2829

2930
@Setup
30-
def setup(): Unit = code = FileOps.readFile(getPath)
31+
def setup(): Unit = code = PlatformFileOps.readFile(getPath)
3132

3233
def getPath: Path = {
3334
val filename = FileOps.getFile(Seq("src", "resources") ++ path)
3435
// jmh runs from benchmarks directory while tests run from from root.
3536
// Can't bother to find more generic solution
36-
if (FileOps.isRegularFile(filename)) filename
37+
if (PlatformFileOps.isRegularFile(filename)) filename
3738
else FileOps.getFile(Seq("scalafmt-benchmarks", "src", "resources") ++ path)
3839
}
3940

scalafmt-cli/jvm/src/main/scala/org/scalafmt/cli/ScalafmtDynamicRunner.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import org.scalafmt.Error
44
import org.scalafmt.dynamic.ScalafmtDynamicError
55
import org.scalafmt.interfaces.Scalafmt
66
import org.scalafmt.interfaces.ScalafmtSession
7-
import org.scalafmt.sysops.FileOps
7+
import org.scalafmt.sysops.PlatformFileOps
88

99
import java.nio.file.Path
1010

@@ -34,7 +34,7 @@ object ScalafmtDynamicRunner extends ScalafmtRunner {
3434
val inputMethods = getInputMethods(options, filterMatcher)
3535
if (inputMethods.isEmpty) ExitCode.Ok
3636
else runInputs(options, inputMethods, termDisplayMessage) { inputMethod =>
37-
import org.scalafmt.sysops.PlatformCompat.executionContext
37+
import org.scalafmt.sysops.PlatformRunOps.executionContext
3838
Future(handleFile(inputMethod, session, options)).recover {
3939
case x: Error.MisformattedFile => reporter.fail(x)(x.file)
4040
}.map(ExitCode.merge(_, reporter.getExitCode))
@@ -56,7 +56,7 @@ object ScalafmtDynamicRunner extends ScalafmtRunner {
5656
val dirBuilder = Seq.newBuilder[Path]
5757
val fileBuilder = Set.newBuilder[Path]
5858
paths.foreach(path =>
59-
if (FileOps.isRegularFile(path)) fileBuilder += path
59+
if (PlatformFileOps.isRegularFile(path)) fileBuilder += path
6060
else dirBuilder += path,
6161
)
6262
val dirs = dirBuilder.result()

scalafmt-cli/shared/src/main/scala/org/scalafmt/cli/InputMethod.scala

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,8 @@ object InputMethod {
7676
override protected def overwrite(text: String, options: CliOptions): Unit =
7777
file.writeFile(text)(options.encoding)
7878

79-
override protected def list(options: CliOptions): Unit = {
80-
val usePath = PlatformCompat.isNativeOnWindows
81-
options.common.out.println(
82-
if (usePath) options.cwd.path.relativize(file.path)
83-
else options.cwd.toUri.relativize(file.toUri),
84-
)
85-
}
79+
override protected def list(options: CliOptions): Unit = options.common.out
80+
.println(PlatformCompat.relativize(options.cwd, file))
8681
}
8782

8883
def unifiedDiff(filename: String, original: String, revised: String): String = {

scalafmt-cli/shared/src/main/scala/org/scalafmt/cli/ScalafmtCoreRunner.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ object ScalafmtCoreRunner extends ScalafmtRunner {
3939
}.fold(scalafmtConf)(scalafmtConf.withGitAutoCRLF)
4040

4141
runInputs(options, inputMethods, termDisplayMessage) { inputMethod =>
42-
import org.scalafmt.sysops.PlatformCompat.executionContext
42+
import org.scalafmt.sysops.PlatformRunOps.executionContext
4343
Future(handleFile(inputMethod, options, adjustedScalafmtConf)).recover {
4444
case e: Error.MisformattedFile =>
4545
options.common.err.println(e.customMessage)

scalafmt-cli/shared/src/main/scala/org/scalafmt/cli/ScalafmtRunner.scala

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
package org.scalafmt.cli
22

33
import org.scalafmt.Error
4-
import org.scalafmt.sysops.AbsoluteFile
5-
import org.scalafmt.sysops.BatchPathFinder
6-
import org.scalafmt.sysops.PlatformCompat
4+
import org.scalafmt.sysops._
75

86
import java.nio.file.Path
97

10-
import scala.concurrent.Await
11-
import scala.concurrent.ExecutionContext
12-
import scala.concurrent.Future
13-
import scala.concurrent.Promise
14-
import scala.concurrent.duration
8+
import scala.concurrent._
159

1610
trait ScalafmtRunner {
1711
private[cli] def run(
@@ -84,7 +78,7 @@ trait ScalafmtRunner {
8478
val termDisplay = newTermDisplay(options, inputMethods, termDisplayMessage)
8579

8680
implicit val executionContext: ExecutionContext =
87-
PlatformCompat.executionContext
81+
PlatformRunOps.executionContext
8882
val completed = Promise[ExitCode]()
8983

9084
val tasks = List.newBuilder[Future[ExitCode]]

scalafmt-cli/shared/src/test/scala/org/scalafmt/cli/CliOptionsTest.scala

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ package org.scalafmt.cli
22

33
import org.scalafmt.Versions
44
import org.scalafmt.config.ScalafmtConfig
5+
import org.scalafmt.sysops._
56

6-
import java.nio.file.Files
77
import java.nio.file.NoSuchFileException
88
import java.nio.file.Path
9-
import java.nio.file.Paths
109

1110
import FileTestOps._
1211
import metaconfig.Configured
@@ -58,7 +57,8 @@ class CliOptionsTest extends FunSuite {
5857
}
5958

6059
test(".configPath returns path to specified configuration path") {
61-
val tempPath = Files.createTempFile(".scalafmt", ".conf")
60+
val tempPath = PlatformFileOps.mkdtemp("temp-dir").resolve(".scalafmt.conf")
61+
PlatformFileOps.writeFile(tempPath, "")
6262
val opt = baseCliOptions.copy(config = Some(tempPath))
6363
assertEquals(opt.configPath, tempPath)
6464
}
@@ -78,22 +78,23 @@ class CliOptionsTest extends FunSuite {
7878

7979
test(".scalafmtConfig returns the configuration read from configuration file located on configPath") {
8080
val expected = "foo bar"
81-
val configPath = Files.createTempFile(".scalafmt", ".conf")
81+
val configPath = PlatformFileOps.mkdtemp("temp-dir")
82+
.resolve(".scalafmt.conf")
8283
val config =
8384
s"""|
8485
|version="${Versions.version}"
8586
|maxColumn=100
8687
|onTestFailure="$expected"
8788
|""".stripMargin
88-
Files.write(configPath, config.getBytes)
89+
PlatformFileOps.writeFile(configPath, config)
8990

9091
val opt = baseCliOptions.copy(config = Some(configPath))
9192
assertEquals(opt.scalafmtConfig.get.onTestFailure, expected)
9293
}
9394

9495
test(".scalafmtConfig returns default ScalafmtConfig if configuration file is missing") {
95-
val configDir = Files.createTempDirectory("temp-dir")
96-
val configPath = Paths.get(configDir.toString + "/.scalafmt.conf")
96+
val configPath = PlatformFileOps.mkdtemp("temp-dir")
97+
.resolve(".scalafmt.conf")
9798
val opt = baseCliOptions.copy(config = Some(configPath))
9899
assert(opt.scalafmtConfig.isInstanceOf[Configured.NotOk])
99100
val confError = opt.scalafmtConfig.asInstanceOf[Configured.NotOk].error

scalafmt-cli/shared/src/test/scala/org/scalafmt/cli/CliTest.scala

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@ import org.scalafmt.CompatCollections.JavaConverters._
44
import org.scalafmt.Error.NoMatchingFiles
55
import org.scalafmt.Versions.{stable => stableVersion}
66
import org.scalafmt.cli.FileTestOps._
7-
import org.scalafmt.config.PlatformConfig
87
import org.scalafmt.config.ProjectFiles
98
import org.scalafmt.config.ScalafmtConfig
109
import org.scalafmt.sysops.AbsoluteFile
11-
import org.scalafmt.sysops.FileOps
1210
import org.scalafmt.sysops.OsSpecific._
1311
import org.scalafmt.sysops.PlatformCompat
12+
import org.scalafmt.sysops.PlatformFileOps
1413

1514
import java.io.ByteArrayInputStream
1615
import java.io.ByteArrayOutputStream
@@ -139,8 +138,8 @@ trait CliTestBehavior {
139138
originalTmpFile.toFile.getPath,
140139
originalTmpFile2.toFile.getPath,
141140
)
142-
val obtained = FileOps.readFile(originalTmpFile)
143-
val obtained2 = FileOps.readFile(originalTmpFile2)
141+
val obtained = PlatformFileOps.readFile(originalTmpFile)
142+
val obtained2 = PlatformFileOps.readFile(originalTmpFile2)
144143
assertNoDiff(obtained, expected10)
145144
assertNoDiff(obtained2, expected10)
146145
}
@@ -197,7 +196,7 @@ trait CliTestBehavior {
197196
"--config-str",
198197
s"""{version="$version",style=IntelliJ}""",
199198
)
200-
val str = FileOps.readFile(tmpFile)
199+
val str = PlatformFileOps.readFile(tmpFile)
201200
assertNoDiff(str, unformatted)
202201
}
203202
test(s"scalafmt --test fails with non zero exit code $label") {
@@ -220,7 +219,7 @@ trait CliTestBehavior {
220219
tmpFile.toFile.getAbsolutePath,
221220
)
222221
assertEquals(Cli.mainWithOptions(baseCliOptions, args: _*), ExitCode.Ok)
223-
val obtained = FileOps.readFile(tmpFile)
222+
val obtained = PlatformFileOps.readFile(tmpFile)
224223
// TODO: We need to pass customFiles information to ProjectFiles
225224
assertNoDiff(obtained, formatted)
226225
}
@@ -541,9 +540,9 @@ trait CliTestBehavior {
541540
"-f",
542541
fileStr(file1, file2, file3),
543542
)
544-
val obtained = FileOps.readFile(file1)
545-
val obtained2 = FileOps.readFile(file2)
546-
val obtained3 = FileOps.readFile(file3)
543+
val obtained = PlatformFileOps.readFile(file1)
544+
val obtained2 = PlatformFileOps.readFile(file2)
545+
val obtained3 = PlatformFileOps.readFile(file3)
547546
assertNoDiff(obtained, formatted)
548547
assertNoDiff(obtained2, formatted)
549548
assertNoDiff(obtained3, formatted)
@@ -736,7 +735,7 @@ trait CliTestBehavior {
736735
}
737736

738737
class CliTest extends AbstractCliTest with CliTestBehavior {
739-
if (!PlatformConfig.isScalaNative) testCli("1.6.0-RC4") // test for runDynamic, incompatible with Scala Native
738+
if (PlatformCompat.isJVM) testCli("1.6.0-RC4") // test for runDynamic, incompatible with Scala Native
740739
testCli(stableVersion) // test for runScalafmt
741740

742741
test(s"path-error") {

scalafmt-cli/shared/src/test/scala/org/scalafmt/cli/FileTestOps.scala

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,18 @@ package org.scalafmt.cli
22

33
import org.scalafmt.config.ScalafmtConfig
44
import org.scalafmt.internal.RegexCompat
5-
import org.scalafmt.sysops.AbsoluteFile
6-
import org.scalafmt.sysops.FileOps
5+
import org.scalafmt.sysops._
76

87
import java.io.File
98
import java.io.PrintStream
10-
import java.nio.file.Files
119

1210
object FileTestOps {
1311

1412
/** The inverse of [[dir2string]]. Given a string representation creates the
1513
* necessary files/directories with respective file contents.
1614
*/
1715
def string2dir(layout: String): AbsoluteFile = {
18-
val root = AbsoluteFile(Files.createTempDirectory("root"))
16+
val root = AbsoluteFile(PlatformFileOps.mkdtemp("root"))
1917
RegexCompat.splitByBeforeTextMatching(layout, "\n/").foreach { row =>
2018
val path :: contents :: Nil = row.stripPrefix("\n").split("\n", 2).toList
2119
val file = root / path.stripPrefix("/")
@@ -40,7 +38,7 @@ object FileTestOps {
4038
val prefix = rootPath.toString
4139
FileOps.listFiles(rootPath).sortBy(_.toString).map(path =>
4240
s"""|${path.toString.stripPrefix(prefix)}
43-
|${FileOps.readFile(path)}""".stripMargin,
41+
|${PlatformFileOps.readFile(path)}""".stripMargin,
4442
).mkString("\n").replace(File.separator, "/") // ensure original separators
4543
}
4644

@@ -59,5 +57,5 @@ object FileTestOps {
5957
)
6058

6159
val baseCliOptions: CliOptions =
62-
getMockOptions(AbsoluteFile(Files.createTempDirectory("base-dir")))
60+
getMockOptions(AbsoluteFile(PlatformFileOps.mkdtemp("base-dir")))
6361
}
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package org.scalafmt.sysops
22

3-
import scala.concurrent.ExecutionContext
4-
53
private[scalafmt] object PlatformCompat {
4+
def isJVM = true
65
def isScalaNative = false
76
def isNativeOnWindows = false
87

9-
implicit def executionContext: ExecutionContext = ExecutionContext.global
10-
8+
def relativize(cwd: AbsoluteFile, file: AbsoluteFile): String = cwd.toUri
9+
.relativize(file.toUri).toString
1110
}
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package org.scalafmt.sysops
22

3-
import scala.concurrent.ExecutionContext
43
import scala.scalanative.runtime.Platform
54

65
private[scalafmt] object PlatformCompat {
6+
def isJVM = false
77
def isScalaNative = true
88
def isNativeOnWindows = Platform.isWindows()
99

10-
implicit def executionContext: ExecutionContext = ExecutionContext.global
10+
def relativize(cwd: AbsoluteFile, file: AbsoluteFile): String = {
11+
val usePath = PlatformCompat.isNativeOnWindows
12+
if (usePath) cwd.path.relativize(file.path).toString
13+
else cwd.toUri.relativize(file.toUri).toString
14+
}
1115

1216
}

0 commit comments

Comments
 (0)