def create[F[_]]()

in modules/core/src/main/scala/org/scalasteward/core/io/FileAlg.scala [73:129]


  def create[F[_]](implicit logger: Logger[F], F: Sync[F]): FileAlg[F] =
    new FileAlg[F] {
      override def deleteForce(file: File): F[Unit] =
        F.blocking {
          if (file.exists) FileUtils.forceDelete(file.toJava)
          if (file.exists) file.delete()
        }

      override def ensureExists(dir: File): F[File] =
        F.blocking {
          if (!dir.exists) dir.createDirectories()
          dir
        }

      override def isDirectory(file: File): F[Boolean] =
        F.blocking(file.isDirectory(File.LinkOptions.noFollow))

      override def isNonEmptyDirectory(dir: File): F[Boolean] =
        F.blocking(dir.isDirectory(File.LinkOptions.noFollow) && dir.nonEmpty)

      override def isRegularFile(file: File): F[Boolean] =
        F.blocking(file.isRegularFile(File.LinkOptions.noFollow))

      override def removeTemporarily(file: File): Resource[F, Unit] =
        Resource.make {
          F.blocking {
            val copyOptions = File.CopyOptions(overwrite = true)
            Option.when(file.exists)(file.moveTo(File.newTemporaryFile())(copyOptions))
          }
        } {
          case Some(tmpFile) => F.blocking(tmpFile.moveTo(file)).void
          case None          => F.unit
        }.void

      override def readFile(file: File): F[Option[String]] =
        F.blocking(Option.when(file.exists)(file.contentAsString))

      override def readResource(resource: String): F[String] =
        readSource(F.blocking(Source.fromResource(resource)))

      override def readUri(uri: Uri): F[String] = {
        val scheme = uri.scheme.getOrElse(scheme"file")
        val withScheme = uri.copy(scheme = Some(scheme))
        readSource(F.blocking(Source.fromURL(withScheme.renderString)))
      }

      private def readSource(source: F[Source]): F[String] =
        Resource.fromAutoCloseable(source).use(src => F.blocking(src.mkString))

      override def walk(dir: File, maxDepth: Int): Stream[F, File] =
        Stream.eval(F.delay(dir.walk(maxDepth))).flatMap(Stream.fromBlockingIterator(_, 1))

      override def writeFile(file: File, content: String): F[Unit] =
        logger.debug(s"Write $file") >>
          file.parentOption.fold(F.unit)(ensureExists(_).void) >>
          F.blocking(file.write(content)).void
    }