From 92c3de5587131a38d801c458904f3e9812c512c3 Mon Sep 17 00:00:00 2001 From: Kirill Andreev Date: Mon, 26 Jul 2021 12:05:00 +0400 Subject: [PATCH] Improve readability of imports Problem: In ``` import qualified Foo.Bar as Bar import Foo.Bar (Bar) ``` names of the imported modules are on different vertical lines, which disables autosorting, and makes it harder to read. Solution: Use `ImportQualifiedPost` --- exec/Main.hs | 2 +- package.yaml | 1 + src/Xrefcheck/CLI.hs | 6 +++--- src/Xrefcheck/Config.hs | 8 ++++---- src/Xrefcheck/Core.hs | 8 ++++---- src/Xrefcheck/Scan.hs | 6 +++--- src/Xrefcheck/Scanners/Markdown.hs | 6 +++--- src/Xrefcheck/System.hs | 4 ++-- src/Xrefcheck/Util.hs | 2 +- src/Xrefcheck/Verify.hs | 10 +++++----- tests/Test/Xrefcheck/AnchorsInHeadersSpec.hs | 2 +- tests/Test/Xrefcheck/ConfigSpec.hs | 4 ++-- tests/Test/Xrefcheck/Util.hs | 2 +- 13 files changed, 31 insertions(+), 30 deletions(-) diff --git a/exec/Main.hs b/exec/Main.hs index 173616e..f9b83cf 100644 --- a/exec/Main.hs +++ b/exec/Main.hs @@ -7,7 +7,7 @@ module Main where import Universum -import qualified Data.ByteString as BS +import Data.ByteString qualified as BS import Main.Utf8 (withUtf8) import Xrefcheck.CLI (Command (..), getCommand) diff --git a/package.yaml b/package.yaml index 8910779..18745b6 100644 --- a/package.yaml +++ b/package.yaml @@ -31,6 +31,7 @@ default-extensions: - FlexibleInstances - FunctionalDependencies - GeneralizedNewtypeDeriving + - ImportQualifiedPost - LambdaCase - MultiParamTypeClasses - MultiWayIf diff --git a/src/Xrefcheck/CLI.hs b/src/Xrefcheck/CLI.hs index a94ed25..af9baa3 100644 --- a/src/Xrefcheck/CLI.hs +++ b/src/Xrefcheck/CLI.hs @@ -21,9 +21,9 @@ module Xrefcheck.CLI import Universum -import qualified Data.Char as C -import qualified Data.List as L -import qualified Data.Text as T +import Data.Char qualified as C +import Data.List qualified as L +import Data.Text qualified as T import Data.Version (showVersion) import Options.Applicative (Parser, ReadM, command, eitherReader, execParser, flag, flag', footerDoc, fullDesc, help, helper, diff --git a/src/Xrefcheck/Config.hs b/src/Xrefcheck/Config.hs index 2f6efeb..118fa05 100644 --- a/src/Xrefcheck/Config.hs +++ b/src/Xrefcheck/Config.hs @@ -14,14 +14,14 @@ import Universum import Control.Exception (assert) import Control.Lens (makeLensesWith) import Data.Aeson.TH (deriveFromJSON) -import qualified Data.ByteString as BS -import qualified Data.Map as Map +import Data.ByteString qualified as BS +import Data.Map qualified as Map import Data.Yaml (FromJSON (..), decodeEither', prettyPrintParseException, withText) import Instances.TH.Lift () import Text.Regex.TDFA (CompOption (..), ExecOption (..), Regex) -import qualified Text.Regex.TDFA as R +import Text.Regex.TDFA qualified as R import Text.Regex.TDFA.ByteString () -import qualified Text.Regex.TDFA.Text as R +import Text.Regex.TDFA.Text qualified as R -- FIXME: Use from System.FilePath -- from Posix is used only because we cross-compile to Windows and \ doesn't work on Linux diff --git a/src/Xrefcheck/Core.hs b/src/Xrefcheck/Core.hs index b62f524..08f3d6a 100644 --- a/src/Xrefcheck/Core.hs +++ b/src/Xrefcheck/Core.hs @@ -14,11 +14,11 @@ import Universum import Control.Lens (makeLenses, (%=)) import Data.Aeson (FromJSON (..), withText) import Data.Char (isAlphaNum) -import qualified Data.Char as C +import Data.Char qualified as C import Data.Default (Default (..)) -import qualified Data.List as L -import qualified Data.Map as M -import qualified Data.Text as T +import Data.List qualified as L +import Data.Map qualified as M +import Data.Text qualified as T import Fmt (Buildable (..), blockListF, blockListF', nameF, (+|), (|+)) import System.Console.Pretty (Color (..), Style (..), color, style) import System.FilePath (isPathSeparator, pathSeparator) diff --git a/src/Xrefcheck/Scan.hs b/src/Xrefcheck/Scan.hs index edf03da..4f20221 100644 --- a/src/Xrefcheck/Scan.hs +++ b/src/Xrefcheck/Scan.hs @@ -19,10 +19,10 @@ module Xrefcheck.Scan import Universum import Data.Aeson.TH (deriveFromJSON) -import qualified Data.Foldable as F -import qualified Data.Map as M +import Data.Foldable qualified as F +import Data.Map qualified as M import GHC.Err (errorWithoutStackTrace) -import qualified System.Directory.Tree as Tree +import System.Directory.Tree qualified as Tree import System.FilePath (dropTrailingPathSeparator, takeDirectory, takeExtension, ()) import Xrefcheck.Core diff --git a/src/Xrefcheck/Scanners/Markdown.hs b/src/Xrefcheck/Scanners/Markdown.hs index fec47d8..e06b3d4 100644 --- a/src/Xrefcheck/Scanners/Markdown.hs +++ b/src/Xrefcheck/Scanners/Markdown.hs @@ -21,11 +21,11 @@ import CMarkGFM (Node (..), NodeType (..), PosInfo (..), commonmarkToNode) import Control.Lens ((%=)) import Control.Monad.Trans.Except (Except, runExcept, throwE) import Data.Aeson.TH (deriveFromJSON) -import qualified Data.ByteString.Lazy as BSL +import Data.ByteString.Lazy qualified as BSL import Data.Char (isSpace) import Data.Default (Default (..)) -import qualified Data.Text as T -import qualified Data.Text.Lazy as LT +import Data.Text qualified as T +import Data.Text.Lazy qualified as LT import Fmt (Buildable (..), blockListF, nameF, (+|), (|+)) import Xrefcheck.Core diff --git a/src/Xrefcheck/System.hs b/src/Xrefcheck/System.hs index e64f7ad..4f20bff 100644 --- a/src/Xrefcheck/System.hs +++ b/src/Xrefcheck/System.hs @@ -13,12 +13,12 @@ module Xrefcheck.System import Universum import Data.Aeson (FromJSON (..), withText) -import qualified Data.Char as C +import Data.Char qualified as C import GHC.IO.Unsafe (unsafePerformIO) import System.Directory (canonicalizePath) import System.Environment (lookupEnv) import System.FilePath (()) -import qualified System.FilePath.Glob as Glob +import System.FilePath.Glob qualified as Glob -- | We can quite safely treat surrounding filesystem as frozen, -- so IO reading operations can be turned into pure values. diff --git a/src/Xrefcheck/Util.hs b/src/Xrefcheck/Util.hs index ebb4bb7..8954ed5 100644 --- a/src/Xrefcheck/Util.hs +++ b/src/Xrefcheck/Util.hs @@ -16,7 +16,7 @@ module Xrefcheck.Util import Universum import Control.Lens (LensRules, lensField, lensRules, mappingNamer) -import qualified Data.Aeson as Aeson +import Data.Aeson qualified as Aeson import Data.Aeson.Casing (aesonPrefix, camelCase) import Fmt (Builder, build, fmt, nameF) import System.Console.Pretty (Pretty (..), Style (Faint)) diff --git a/src/Xrefcheck/Verify.hs b/src/Xrefcheck/Verify.hs index 923cb1b..c54f84a 100644 --- a/src/Xrefcheck/Verify.hs +++ b/src/Xrefcheck/Verify.hs @@ -27,13 +27,13 @@ import Universum import Control.Concurrent.Async (wait, withAsync) import Control.Exception (throwIO) import Control.Monad.Except (MonadError (..)) -import qualified Data.ByteString as BS -import qualified Data.Map as M -import qualified Data.Text as T +import Data.ByteString qualified as BS +import Data.Map qualified as M +import Data.Text qualified as T import Data.Text.Metrics (damerauLevenshteinNorm) import Data.Traversable (for) import Fmt (Buildable (..), blockListF', listF, (+|), (|+)) -import qualified GHC.Exts as Exts +import GHC.Exts qualified as Exts import Network.FTP.Client (FTPException (..), FTPResponse (..), ResponseStatus (..), login, nlst, size, withFTP, withFTPS) import Network.HTTP.Client (HttpException (..), HttpExceptionContent (..), responseStatus) @@ -44,7 +44,7 @@ import Network.HTTP.Types.Status (Status, statusCode, statusMessage) import System.Console.Pretty (Style (..), style) import System.Directory (canonicalizePath, doesDirectoryExist, doesFileExist) import System.FilePath (takeDirectory, ()) -import qualified System.FilePath.Glob as Glob +import System.FilePath.Glob qualified as Glob import Text.Regex.TDFA.Text (Regex, regexec) import Text.URI (Authority (..), URI (..), mkURI) import Time (RatioNat, Second, Time (..), ms, threadDelay, timeout) diff --git a/tests/Test/Xrefcheck/AnchorsInHeadersSpec.hs b/tests/Test/Xrefcheck/AnchorsInHeadersSpec.hs index 15188d4..4663ca5 100644 --- a/tests/Test/Xrefcheck/AnchorsInHeadersSpec.hs +++ b/tests/Test/Xrefcheck/AnchorsInHeadersSpec.hs @@ -7,7 +7,7 @@ module Test.Xrefcheck.AnchorsInHeadersSpec where import Universum -import qualified Data.ByteString.Lazy as BSL +import Data.ByteString.Lazy qualified as BSL import Test.Hspec (Spec, describe, it, shouldBe) import Xrefcheck.Core diff --git a/tests/Test/Xrefcheck/ConfigSpec.hs b/tests/Test/Xrefcheck/ConfigSpec.hs index eb2dc61..5630ca3 100644 --- a/tests/Test/Xrefcheck/ConfigSpec.hs +++ b/tests/Test/Xrefcheck/ConfigSpec.hs @@ -8,9 +8,9 @@ module Test.Xrefcheck.ConfigSpec where import Universum import Control.Concurrent (forkIO, killThread) -import qualified Control.Exception as E +import Control.Exception qualified as E -import qualified Data.ByteString as BS +import Data.ByteString qualified as BS import Network.HTTP.Types (Status (..)) import Test.Hspec (Spec, before, describe, it, shouldBe) import Test.QuickCheck (counterexample, ioProperty, once) diff --git a/tests/Test/Xrefcheck/Util.hs b/tests/Test/Xrefcheck/Util.hs index 587902a..74f43ac 100644 --- a/tests/Test/Xrefcheck/Util.hs +++ b/tests/Test/Xrefcheck/Util.hs @@ -7,7 +7,7 @@ module Test.Xrefcheck.Util where import Universum -import qualified Data.ByteString.Lazy as BSL +import Data.ByteString.Lazy qualified as BSL import Network.HTTP.Types (forbidden403, unauthorized401) import Web.Firefly (ToResponse (..), route, run)