From 9ae28f538d55168b8c29f0345a827a33d7184559 Mon Sep 17 00:00:00 2001 From: Robin Heggelund Hansen Date: Fri, 28 Jan 2022 10:28:54 +0100 Subject: [PATCH] Move helper function to seperate module, as it's useful in several places. Also remove redundant imports from several modules. --- builder/src/Deps/Diff.hs | 7 +---- builder/src/Deps/Package.hs | 30 +++++++++++++++++++ builder/src/Deps/Solver.hs | 23 ++------------ builder/src/Elm/Details.hs | 3 -- builder/src/File.hs | 4 +-- builder/src/Git.hs | 6 ++-- builder/src/Reporting.hs | 2 +- builder/src/Reporting/Exit.hs | 4 +-- compiler/src/Data/Name.hs | 4 --- compiler/src/Data/Utf8.hs | 9 ------ compiler/src/Elm/Package.hs | 1 - compiler/src/Generate/Html.hs | 1 - compiler/src/Generate/JavaScript.hs | 1 - compiler/src/Generate/JavaScript/Builder.hs | 1 - compiler/src/Generate/JavaScript/Name.hs | 1 - compiler/src/Json/Encode.hs | 1 - compiler/src/Reporting/Doc.hs | 3 +- compiler/src/Reporting/Error/Canonicalize.hs | 2 +- compiler/src/Reporting/Error/Docs.hs | 1 - compiler/src/Reporting/Error/Pattern.hs | 1 - compiler/src/Reporting/Error/Type.hs | 1 - compiler/src/Reporting/Render/Type.hs | 2 +- .../src/Reporting/Render/Type/Localizer.hs | 1 - compiler/src/Reporting/Warning.hs | 1 - compiler/src/Type/Error.hs | 1 - gren.cabal | 1 + terminal/impl/Terminal/Error.hs | 1 - terminal/impl/Terminal/Helpers.hs | 4 --- terminal/src/Develop/Generate/Help.hs | 1 - 29 files changed, 45 insertions(+), 73 deletions(-) create mode 100644 builder/src/Deps/Package.hs diff --git a/builder/src/Deps/Diff.hs b/builder/src/Deps/Diff.hs index 91539085..2e081c56 100644 --- a/builder/src/Deps/Diff.hs +++ b/builder/src/Deps/Diff.hs @@ -18,8 +18,6 @@ import qualified Data.List as List import qualified Data.Map as Map import qualified Data.Name as Name import qualified Data.Set as Set -import qualified System.Directory as Dir -import System.FilePath (()) import qualified Elm.Compiler.Type as Type import qualified Elm.Docs as Docs @@ -27,9 +25,6 @@ import qualified Elm.Magnitude as M import qualified Elm.ModuleName as ModuleName import qualified Elm.Package as Pkg import qualified Elm.Version as V -import qualified File -import qualified Json.Decode as D -import qualified Reporting.Exit as Exit import qualified Directories as Dirs @@ -354,6 +349,6 @@ changeMagnitude (Changes added changed removed) = getDocs :: Dirs.PackageCache -> Pkg.Name -> V.Version -> IO (Either () Docs.Documentation) -getDocs cache name version = +getDocs _ _ _ = -- TODO: Implement using local git clones return $ Right Docs.tmpEmpty diff --git a/builder/src/Deps/Package.hs b/builder/src/Deps/Package.hs new file mode 100644 index 00000000..d2415b73 --- /dev/null +++ b/builder/src/Deps/Package.hs @@ -0,0 +1,30 @@ +module Deps.Package + ( getVersions + ) + where + + +import qualified System.Directory as Dir + +import qualified Elm.Package as Pkg +import qualified Elm.Version as V +import qualified Git +import qualified Directories as Dirs + + + +getVersions :: Dirs.PackageCache -> Pkg.Name -> IO (Either Git.Error (V.Version, [V.Version])) +getVersions cache name = do + let repoPath = Dirs.basePackage cache name + repoExists <- Dir.doesDirectoryExist repoPath + retVal <- + if repoExists then + Git.update name repoPath + else + Git.clone (Git.githubUrl name) repoPath + case retVal of + Left problem -> + return $ Left problem + + Right () -> + Git.tags repoPath diff --git a/builder/src/Deps/Solver.hs b/builder/src/Deps/Solver.hs index 47e70203..bb71d2c3 100644 --- a/builder/src/Deps/Solver.hs +++ b/builder/src/Deps/Solver.hs @@ -16,10 +16,8 @@ module Deps.Solver import Control.Monad (foldM) -import Control.Concurrent (forkIO, newEmptyMVar, putMVar, readMVar) import qualified Data.Map as Map import Data.Map ((!)) -import qualified System.Directory as Dir import System.FilePath (()) import qualified Elm.Constraint as C @@ -31,6 +29,7 @@ import qualified Git import qualified Json.Decode as D import qualified Reporting.Exit as Exit import qualified Directories as Dirs +import qualified Deps.Package as Package @@ -244,8 +243,8 @@ addConstraint solved unsolved (name, newConstraint) = getRelevantVersions :: Pkg.Name -> C.Constraint -> Solver (V.Version, [V.Version]) getRelevantVersions name constraint = Solver $ \state@(State cache _) ok back err -> do - maybeVersions <- getRelevantVersionsHelper cache name - case maybeVersions of + versionsResult <- Package.getVersions cache name + case versionsResult of Right (newest, previous) -> case filter (C.satisfies constraint) (newest:previous) of [] -> back state @@ -255,22 +254,6 @@ getRelevantVersions name constraint = err $ Exit.SolverBadGitOperationUnversionedPkg name gitErr -getRelevantVersionsHelper :: Dirs.PackageCache -> Pkg.Name -> IO (Either Git.Error (V.Version, [V.Version])) -getRelevantVersionsHelper cache name = do - let repoPath = Dirs.basePackage cache name - repoExists <- Dir.doesDirectoryExist repoPath - retVal <- - if repoExists then - Git.update name repoPath - else - Git.clone (Git.githubUrl name) repoPath - case retVal of - Left problem -> - return $ Left problem - - Right () -> - Git.tags repoPath - -- GET CONSTRAINTS diff --git a/builder/src/Elm/Details.hs b/builder/src/Elm/Details.hs index 74ce06e5..df8f49ef 100644 --- a/builder/src/Elm/Details.hs +++ b/builder/src/Elm/Details.hs @@ -27,9 +27,7 @@ import qualified Data.Name as Name import qualified Data.NonEmptyList as NE import qualified Data.OneOrMore as OneOrMore import qualified Data.Set as Set -import qualified Data.Utf8 as Utf8 import Data.Word (Word64) -import qualified System.Directory as Dir import System.FilePath ((), (<.>)) import qualified AST.Canonical as Can @@ -47,7 +45,6 @@ import qualified Elm.Outline as Outline import qualified Elm.Package as Pkg import qualified Elm.Version as V import qualified File -import qualified Json.Decode as D import qualified Json.Encode as E import qualified Parse.Module as Parse import qualified Reporting diff --git a/builder/src/File.hs b/builder/src/File.hs index 6c99809f..c020ed5e 100644 --- a/builder/src/File.hs +++ b/builder/src/File.hs @@ -19,16 +19,14 @@ import qualified Data.Binary as Binary import qualified Data.ByteString as BS import qualified Data.ByteString.Internal as BS import qualified Data.ByteString.Builder as B -import qualified Data.ByteString.Lazy as LBS import qualified Data.Fixed as Fixed -import qualified Data.List as List import qualified Data.Time.Clock as Time import qualified Data.Time.Clock.POSIX as Time import qualified Foreign.ForeignPtr as FPtr import GHC.IO.Exception (IOException, IOErrorType(InvalidArgument)) import qualified System.Directory as Dir import qualified System.FilePath as FP -import System.FilePath (()) +import System.FilePath () import qualified System.IO as IO import System.IO.Error (ioeGetErrorType, annotateIOError, modifyIOError) diff --git a/builder/src/Git.hs b/builder/src/Git.hs index 4a19b2b5..e907e53f 100644 --- a/builder/src/Git.hs +++ b/builder/src/Git.hs @@ -72,7 +72,7 @@ clone (GitUrl (pkgName, gitUrl)) targetFolder = do let args = [ "clone" , "--bare", gitUrl, targetFolder ] (exitCode, _, stderr) <- Process.readCreateProcessWithExitCode - (Process.proc "git" args) + (Process.proc git args) "" case exitCode of Exit.ExitFailure _ -> do @@ -159,12 +159,12 @@ tags path = do Exit.ExitSuccess -> let - tags = + tagList = map BS.pack $ lines stdout -- Ignore tags that aren't semantic versions versions = - Either.rights $ map (Parser.fromByteString V.parser (,)) tags + Either.rights $ map (Parser.fromByteString V.parser (,)) tagList in case versions of [] -> return $ Left $ NoVersions path diff --git a/builder/src/Reporting.hs b/builder/src/Reporting.hs index 0162c2aa..567bb6d0 100644 --- a/builder/src/Reporting.hs +++ b/builder/src/Reporting.hs @@ -41,7 +41,7 @@ import qualified Elm.ModuleName as ModuleName import qualified Elm.Package as Pkg import qualified Elm.Version as V import qualified Json.Encode as Encode -import Reporting.Doc ((<+>), (<>)) +import Reporting.Doc ((<+>)) import qualified Reporting.Doc as D import qualified Reporting.Exit as Exit import qualified Reporting.Exit.Help as Help diff --git a/builder/src/Reporting/Exit.hs b/builder/src/Reporting/Exit.hs index c6eeec66..a2d981dd 100644 --- a/builder/src/Reporting/Exit.hs +++ b/builder/src/Reporting/Exit.hs @@ -27,7 +27,6 @@ module Reporting.Exit import qualified Data.ByteString as BS -import qualified Data.ByteString.UTF8 as BS_UTF8 import qualified Data.List as List import qualified Data.Map as Map import qualified Data.Name as N @@ -47,7 +46,6 @@ import qualified Json.Encode as Encode import qualified Json.String as Json import Parse.Primitives (Row, Col) import qualified Reporting.Annotation as A -import Reporting.Doc ((<>)) import qualified Reporting.Doc as D import qualified Reporting.Error.Import as Import import qualified Reporting.Error.Json as Json @@ -1220,7 +1218,7 @@ toGitErrorReport title err context = , D.indent 4 $ D.reflow errorMsg ] - Git.NoVersions path -> + Git.NoVersions _ -> toGitReport (context ++ ", no valid semantic version tags in this repo.") [ D.reflow "Gren packages are just git repositories with tags following the \ \ semantic versioning scheme. However, it seems that this particular repo \ diff --git a/compiler/src/Data/Name.hs b/compiler/src/Data/Name.hs index beecf114..20653ff4 100644 --- a/compiler/src/Data/Name.hs +++ b/compiler/src/Data/Name.hs @@ -46,11 +46,7 @@ import qualified Data.String as Chars import qualified Data.Utf8 as Utf8 import GHC.Exts ( Int(I#), Ptr - , MutableByteArray# , isTrue# - , newByteArray# - , sizeofByteArray# - , unsafeFreezeByteArray# ) import GHC.ST (ST(ST), runST) import GHC.Prim diff --git a/compiler/src/Data/Utf8.hs b/compiler/src/Data/Utf8.hs index 719e8d32..fdf406fd 100644 --- a/compiler/src/Data/Utf8.hs +++ b/compiler/src/Data/Utf8.hs @@ -49,16 +49,7 @@ import Foreign.ForeignPtr.Unsafe (unsafeForeignPtrToPtr) import Foreign.Ptr (minusPtr, plusPtr) import GHC.Exts ( Int(I#), Ptr(Ptr), Char(C#) - , RealWorld - , ByteArray#, MutableByteArray# , isTrue# - , newByteArray# - , unsafeFreezeByteArray# - , sizeofByteArray# - , copyByteArray# - , copyAddrToByteArray# - , copyByteArrayToAddr# - , writeWord8Array# ) import GHC.IO import GHC.ST (ST(ST), runST) diff --git a/compiler/src/Elm/Package.hs b/compiler/src/Elm/Package.hs index 406bb80f..0a836afe 100644 --- a/compiler/src/Elm/Package.hs +++ b/compiler/src/Elm/Package.hs @@ -34,7 +34,6 @@ import qualified Data.Coerce as Coerce import qualified Data.List as List import qualified Data.Map as Map import qualified Data.Name as Name -import Data.Monoid ((<>)) import qualified Data.Utf8 as Utf8 import Data.Word (Word8) import Foreign.Ptr (Ptr, plusPtr, minusPtr) diff --git a/compiler/src/Generate/Html.hs b/compiler/src/Generate/Html.hs index 428eadd5..1db07cf0 100644 --- a/compiler/src/Generate/Html.hs +++ b/compiler/src/Generate/Html.hs @@ -7,7 +7,6 @@ module Generate.Html import qualified Data.ByteString.Builder as B -import Data.Monoid ((<>)) import qualified Data.Name as Name import Text.RawString.QQ (r) diff --git a/compiler/src/Generate/JavaScript.hs b/compiler/src/Generate/JavaScript.hs index d8116f33..0cd44a74 100644 --- a/compiler/src/Generate/JavaScript.hs +++ b/compiler/src/Generate/JavaScript.hs @@ -9,7 +9,6 @@ module Generate.JavaScript import Prelude hiding (cycle, print) import qualified Data.ByteString.Builder as B -import Data.Monoid ((<>)) import qualified Data.List as List import Data.Map ((!)) import qualified Data.Map as Map diff --git a/compiler/src/Generate/JavaScript/Builder.hs b/compiler/src/Generate/JavaScript/Builder.hs index fde32caf..7843a2d5 100644 --- a/compiler/src/Generate/JavaScript/Builder.hs +++ b/compiler/src/Generate/JavaScript/Builder.hs @@ -18,7 +18,6 @@ import Prelude hiding (lines) import qualified Data.List as List import qualified Data.ByteString as BS import Data.ByteString.Builder as B -import Data.Monoid ((<>)) import qualified Generate.JavaScript.Name as Name import Generate.JavaScript.Name (Name) import qualified Json.Encode as Json diff --git a/compiler/src/Generate/JavaScript/Name.hs b/compiler/src/Generate/JavaScript/Name.hs index 3d857bc1..4a7eedad 100644 --- a/compiler/src/Generate/JavaScript/Name.hs +++ b/compiler/src/Generate/JavaScript/Name.hs @@ -19,7 +19,6 @@ module Generate.JavaScript.Name import qualified Data.ByteString.Builder as B -import Data.Monoid ((<>)) import qualified Data.Map as Map import qualified Data.Name as Name import qualified Data.Set as Set diff --git a/compiler/src/Json/Encode.hs b/compiler/src/Json/Encode.hs index 8740ebc5..e6c5e7bc 100644 --- a/compiler/src/Json/Encode.hs +++ b/compiler/src/Json/Encode.hs @@ -28,7 +28,6 @@ import qualified Data.ByteString.Char8 as BSC import qualified Data.ByteString.Builder as B import qualified Data.Map as Map import qualified Data.Scientific as Sci -import Data.Monoid ((<>)) import qualified Data.Name as Name import qualified Data.Utf8 as Utf8 diff --git a/compiler/src/Reporting/Doc.hs b/compiler/src/Reporting/Doc.hs index 26c15517..ec8a8bc7 100644 --- a/compiler/src/Reporting/Doc.hs +++ b/compiler/src/Reporting/Doc.hs @@ -46,7 +46,6 @@ module Reporting.Doc import Prelude hiding (cycle) import qualified Data.List as List -import Data.Monoid ((<>)) import qualified Data.Name as Name import qualified System.Console.ANSI.Types as Ansi import qualified System.Info as Info @@ -348,6 +347,8 @@ sgrToStyle sgrs style@(Style bold underline color) = Ansi.SetSwapForegroundBackground _ -> style Ansi.SetColor l i c -> Style bold underline (toColor l i c) Ansi.SetRGBColor _ _ -> style + Ansi.SetPaletteColor _ _ -> style + Ansi.SetDefaultColor _ -> style isBold :: Ansi.ConsoleIntensity -> Bool diff --git a/compiler/src/Reporting/Error/Canonicalize.hs b/compiler/src/Reporting/Error/Canonicalize.hs index f980a104..86b8598e 100644 --- a/compiler/src/Reporting/Error/Canonicalize.hs +++ b/compiler/src/Reporting/Error/Canonicalize.hs @@ -26,7 +26,7 @@ import qualified Data.Index as Index import qualified Elm.ModuleName as ModuleName import qualified Reporting.Annotation as A import qualified Reporting.Doc as D -import Reporting.Doc (Doc, (<+>), (<>)) +import Reporting.Doc (Doc, (<+>)) import qualified Reporting.Render.Code as Code import qualified Reporting.Render.Type as RT import qualified Reporting.Report as Report diff --git a/compiler/src/Reporting/Error/Docs.hs b/compiler/src/Reporting/Error/Docs.hs index 310b3260..1f3496a1 100644 --- a/compiler/src/Reporting/Error/Docs.hs +++ b/compiler/src/Reporting/Error/Docs.hs @@ -16,7 +16,6 @@ import qualified Data.NonEmptyList as NE import Parse.Primitives (Row, Col) import Parse.Symbol (BadOperator(..)) import qualified Reporting.Annotation as A -import Reporting.Doc ((<>)) import qualified Reporting.Doc as D import qualified Reporting.Render.Code as Code import qualified Reporting.Error.Syntax as E diff --git a/compiler/src/Reporting/Error/Pattern.hs b/compiler/src/Reporting/Error/Pattern.hs index 72b76869..2cf5cfa6 100644 --- a/compiler/src/Reporting/Error/Pattern.hs +++ b/compiler/src/Reporting/Error/Pattern.hs @@ -10,7 +10,6 @@ import qualified Data.List as List import qualified Elm.String as ES import qualified Nitpick.PatternMatches as P -import Reporting.Doc ((<>)) import qualified Reporting.Doc as D import qualified Reporting.Report as Report import qualified Reporting.Render.Code as Code diff --git a/compiler/src/Reporting/Error/Type.hs b/compiler/src/Reporting/Error/Type.hs index 4ee1580f..1beb8536 100644 --- a/compiler/src/Reporting/Error/Type.hs +++ b/compiler/src/Reporting/Error/Type.hs @@ -21,7 +21,6 @@ module Reporting.Error.Type import Prelude hiding (round) import qualified Data.Map as Map -import Data.Monoid ((<>)) import qualified Data.Name as Name import qualified AST.Canonical as Can diff --git a/compiler/src/Reporting/Render/Type.hs b/compiler/src/Reporting/Render/Type.hs index 4433d72c..6bfe15fb 100644 --- a/compiler/src/Reporting/Render/Type.hs +++ b/compiler/src/Reporting/Render/Type.hs @@ -21,7 +21,7 @@ import qualified AST.Source as Src import qualified AST.Canonical as Can import qualified Reporting.Annotation as A import qualified Reporting.Doc as D -import Reporting.Doc ( Doc, (<+>), (<>) ) +import Reporting.Doc ( Doc, (<+>) ) import qualified Reporting.Render.Type.Localizer as L diff --git a/compiler/src/Reporting/Render/Type/Localizer.hs b/compiler/src/Reporting/Render/Type/Localizer.hs index aa5956d8..e2307ed2 100644 --- a/compiler/src/Reporting/Render/Type/Localizer.hs +++ b/compiler/src/Reporting/Render/Type/Localizer.hs @@ -17,7 +17,6 @@ import qualified Data.Set as Set import qualified AST.Source as Src import qualified Elm.ModuleName as ModuleName -import Reporting.Doc ((<>)) import qualified Reporting.Doc as D import qualified Reporting.Annotation as A diff --git a/compiler/src/Reporting/Warning.hs b/compiler/src/Reporting/Warning.hs index dc696014..8cfff999 100644 --- a/compiler/src/Reporting/Warning.hs +++ b/compiler/src/Reporting/Warning.hs @@ -8,7 +8,6 @@ module Reporting.Warning where -import Data.Monoid ((<>)) import qualified Data.Name as Name import qualified AST.Canonical as Can diff --git a/compiler/src/Type/Error.hs b/compiler/src/Type/Error.hs index f1342993..fdfa9244 100644 --- a/compiler/src/Type/Error.hs +++ b/compiler/src/Type/Error.hs @@ -20,7 +20,6 @@ module Type.Error import qualified Data.Map as Map import qualified Data.Maybe as Maybe -import Data.Monoid ((<>)) import qualified Data.Name as Name import qualified Data.Bag as Bag diff --git a/gren.cabal b/gren.cabal index aa105977..0a3e24a7 100644 --- a/gren.cabal +++ b/gren.cabal @@ -78,6 +78,7 @@ Executable gren Build BackgroundWriter Deps.Diff + Deps.Package Deps.Solver File Generate diff --git a/terminal/impl/Terminal/Error.hs b/terminal/impl/Terminal/Error.hs index 44f0838a..4a7845d4 100644 --- a/terminal/impl/Terminal/Error.hs +++ b/terminal/impl/Terminal/Error.hs @@ -12,7 +12,6 @@ module Terminal.Error where -import Data.Monoid ((<>)) import qualified Data.List as List import qualified Data.Maybe as Maybe import GHC.IO.Handle (hIsTerminalDevice) diff --git a/terminal/impl/Terminal/Helpers.hs b/terminal/impl/Terminal/Helpers.hs index ad763613..f6759c3a 100644 --- a/terminal/impl/Terminal/Helpers.hs +++ b/terminal/impl/Terminal/Helpers.hs @@ -9,8 +9,6 @@ module Terminal.Helpers import qualified Data.ByteString.UTF8 as BS_UTF8 import qualified Data.Char as Char -import qualified Data.List as List -import qualified Data.Map as Map import qualified Data.Utf8 as Utf8 import qualified System.FilePath as FP @@ -18,8 +16,6 @@ import Terminal (Parser(..)) import qualified Elm.Package as Pkg import qualified Elm.Version as V import qualified Parse.Primitives as P -import qualified Directories as Dirs -import qualified Reporting.Suggest as Suggest diff --git a/terminal/src/Develop/Generate/Help.hs b/terminal/src/Develop/Generate/Help.hs index f6fb996a..07f40eca 100644 --- a/terminal/src/Develop/Generate/Help.hs +++ b/terminal/src/Develop/Generate/Help.hs @@ -9,7 +9,6 @@ module Develop.Generate.Help import qualified Data.ByteString.Builder as B -import Data.Monoid ((<>)) import qualified Data.Name as Name import Text.RawString.QQ (r)