Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
b82fb85
Strip trailing whitespace
sjakobi Oct 16, 2019
6ba2924
cabal.project: Temporary modifications
sjakobi Oct 16, 2019
bb39d0b
Update format test output
sjakobi Oct 16, 2019
5b9c62e
cabal.project: Use prettyprinter-master
sjakobi Oct 18, 2019
162bcdf
Update prettyprinter to 1.4.0
sjakobi Oct 21, 2019
6da9dd2
Merge branch 'master' into sjakobi/183-trailing-whitespace
sjakobi Oct 21, 2019
658bedf
Update nix/prettyprinter.nix
sjakobi Oct 21, 2019
5f5d97a
dhall-lsp-server: Allow prettyprinter-1.4.0
sjakobi Oct 21, 2019
a17ebc1
Apply removeTrailingWhitespace wherever we use layoutSmart
sjakobi Oct 21, 2019
bb45f8c
Refactor using a new util Dhall.Pretty.layout
sjakobi Oct 21, 2019
18bd8bc
Revert changes to cabal.project
sjakobi Oct 21, 2019
74f2026
Bump lower bounds for prettyprinter
sjakobi Oct 21, 2019
ae5531e
Use D.P.layout for the repl too
sjakobi Oct 21, 2019
3ba2faa
Merge remote-tracking branch 'origin/master' into sjakobi/183-trailin…
sjakobi Nov 4, 2019
32d9887
Remove redundant newline
sjakobi Nov 4, 2019
3664f04
Strip unwanted trailing whitespace in multi-line strings
sjakobi Nov 4, 2019
8066b85
Fix whitespace removal for first line of multi-line string
sjakobi Nov 4, 2019
de90247
Bump prettyprinter, fix a test
sjakobi Nov 13, 2019
636f15a
Merge remote-tracking branch 'origin/master' into sjakobi/183-trailin…
sjakobi Nov 13, 2019
013834e
Update nix/prettyprinter.nix
sjakobi Nov 13, 2019
5295e4c
Try something I've seen elsewhere
sjakobi Nov 13, 2019
884ce1e
Revert "Try something I've seen elsewhere"
sjakobi Nov 13, 2019
446710e
nix/hnix.nix: Use hnix master
sjakobi Nov 13, 2019
acdc663
Try "doJailbreak" instead
sjakobi Nov 13, 2019
37dd979
Fix Nix build of `dhall-nix`
Gabriella439 Nov 14, 2019
9259a3c
Merge branch 'master' into sjakobi/183-trailing-whitespace
sjakobi Nov 14, 2019
c318fb2
Fix dhall-lsp-server build
sjakobi Nov 14, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions cabal.project
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
packages: ./dhall ./dhall-bash ./dhall-json ./dhall-yaml ./dhall-lsp-server ./dhall-nix

-- While hnix doesn't allow prettyprinter > 1.3
-- https://github.com/haskell-nix/hnix/issues/524
allow-newer: hnix:prettyprinter
2 changes: 1 addition & 1 deletion dhall-json/dhall-json.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Library
exceptions >= 0.8.3 && < 0.11,
filepath < 1.5 ,
optparse-applicative >= 0.14.0.0 && < 0.16,
prettyprinter >= 1.2.0.1 && < 1.4 ,
prettyprinter >= 1.5.1 && < 1.6 ,
scientific >= 0.3.0.0 && < 0.4 ,
text >= 0.11.1.0 && < 1.3 ,
unordered-containers < 0.3 ,
Expand Down
2 changes: 1 addition & 1 deletion dhall-lsp-server/dhall-lsp-server.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ library
, megaparsec >= 7.0.2 && < 7.1
, mtl >= 2.2.2 && < 2.3
, network-uri >= 2.6.1.0 && < 2.7
, prettyprinter >= 1.2.1 && < 1.4
, prettyprinter >= 1.5.1 && < 1.6
, text >= 1.2.3.0 && < 1.3
, transformers >= 0.5.5.0 && < 0.6
, unordered-containers >= 0.2.9.0 && < 0.3
Expand Down
10 changes: 6 additions & 4 deletions dhall-lsp-server/src/Dhall/LSP/Backend/Formatting.hs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
module Dhall.LSP.Backend.Formatting (formatExpr, formatExprWithHeader) where

import Dhall.Core (Expr)
import Dhall.Pretty (CharacterSet(..))
import Dhall.Parser (Header(..))
import Dhall.Pretty (CharacterSet, prettyCharacterSet)
import qualified Dhall.Pretty
import Dhall.Src (Src)

Expand All @@ -13,8 +13,10 @@ import qualified Data.Text.Prettyprint.Doc.Render.Text as Pretty

-- | Pretty-print the given Dhall expression.
formatExpr :: Pretty.Pretty b => CharacterSet -> Expr Src b -> Text
formatExpr charSet expr = Pretty.renderStrict . Dhall.Pretty.layout
. Pretty.unAnnotate $ prettyCharacterSet charSet expr
formatExpr charSet expr =
Pretty.renderStrict
. Dhall.Pretty.layout
$ Dhall.Pretty.prettyCharacterSet charSet expr

-- | Pretty-print the given Dhall expression, prepending the given a "header"
-- (usually consisting of comments and whitespace).
Expand All @@ -24,6 +26,6 @@ formatExprWithHeader charSet expr (Header header) = Pretty.renderStrict
where
doc =
Pretty.pretty header
<> Pretty.unAnnotate (prettyCharacterSet charSet expr)
<> Dhall.Pretty.prettyCharacterSet charSet expr
<> "\n"

2 changes: 1 addition & 1 deletion dhall-try/dhall-try.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ executable dhall-try
, aeson-pretty >= 0.8.7 && < 0.9
, dhall >= 1.19.0 && < 1.28
, dhall-json >= 1.2.5 && < 1.6
, prettyprinter >= 1.2.1 && < 1.3
, prettyprinter >= 1.5.1 && < 1.6
, text >= 1.2.3.0 && < 1.3
, ghcjs-base >= 0.2.0.0 && < 0.3
hs-source-dirs: src
Expand Down
2 changes: 1 addition & 1 deletion dhall/dhall.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ Library
network-uri >= 2.6 && < 2.7 ,
optparse-applicative >= 0.14.0.0 && < 0.16,
parsers >= 0.12.4 && < 0.13,
prettyprinter >= 1.2.0.1 && < 1.4 ,
prettyprinter >= 1.5.1 && < 1.6 ,
prettyprinter-ansi-terminal >= 1.1.1 && < 1.2 ,
profunctors >= 3.1.2 && < 5.6 ,
repline >= 0.2.1.0 && < 0.3 ,
Expand Down
66 changes: 30 additions & 36 deletions dhall/src/Dhall/Format.hs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module Dhall.Format
import Control.Exception (Exception)
import Data.Monoid ((<>))
import Dhall.Pretty (CharacterSet(..), annToAnsiStyle)
import Dhall.Util (Censor, Input(..))
import Dhall.Util (Censor, Input(..), Header(..))

import qualified Data.Text.Prettyprint.Doc as Pretty
import qualified Data.Text.Prettyprint.Doc.Render.Terminal as Pretty.Terminal
Expand Down Expand Up @@ -50,54 +50,48 @@ data FormatMode
format
:: Format
-> IO ()
format (Format {..}) =
format (Format {..}) = do
let layoutHeaderAndExpr (Header header, expr) =
Dhall.Pretty.layout
( Pretty.pretty header
<> Dhall.Pretty.prettyCharacterSet characterSet expr
<> "\n")

let layoutInput input = do
headerAndExpr <- Dhall.Util.getExpressionAndHeader censor input

return (layoutHeaderAndExpr headerAndExpr)

case formatMode of
Modify {..} ->
Modify {..} -> do
docStream <- layoutInput inplace

case inplace of
InputFile file -> do
(Dhall.Util.Header header, expr) <-
Dhall.Util.getExpressionAndHeader censor (InputFile file)

let doc = Pretty.pretty header
<> Pretty.unAnnotate (Dhall.Pretty.prettyCharacterSet characterSet expr)
<> "\n"

System.IO.withFile file System.IO.WriteMode (\handle -> do
Pretty.Terminal.renderIO handle (Dhall.Pretty.layout doc))
StandardInput -> do
(Dhall.Util.Header header, expr) <-
Dhall.Util.getExpressionAndHeader censor StandardInput

let doc = Pretty.pretty header
<> Dhall.Pretty.prettyCharacterSet characterSet expr
<> "\n"
Pretty.Terminal.renderIO handle (Pretty.unAnnotateS docStream))

StandardInput -> do
supportsANSI <- System.Console.ANSI.hSupportsANSI System.IO.stdout

if supportsANSI
then
Pretty.Terminal.renderIO
System.IO.stdout
(fmap annToAnsiStyle (Dhall.Pretty.layout doc))
else
Pretty.Terminal.renderIO
System.IO.stdout
(Dhall.Pretty.layout (Pretty.unAnnotate doc))
Pretty.Terminal.renderIO
System.IO.stdout
(if supportsANSI
then (fmap annToAnsiStyle docStream)
else (Pretty.unAnnotateS docStream))

Check {..} -> do
originalText <- case path of
InputFile file -> Data.Text.IO.readFile file
StandardInput -> Data.Text.IO.getContents

(Dhall.Util.Header header, expr) <- case path of
InputFile _ -> Dhall.Util.getExpressionAndHeader censor path
StandardInput -> Dhall.Util.getExpressionAndHeaderFromStdinText censor originalText

let doc = Pretty.pretty header
<> Pretty.unAnnotate (Dhall.Pretty.prettyCharacterSet characterSet expr)
<> "\n"
docStream <- case path of
InputFile _ -> layoutInput path
StandardInput -> do
headerAndExpr <- Dhall.Util.getExpressionAndHeaderFromStdinText censor originalText
return (layoutHeaderAndExpr headerAndExpr)

let formattedText =
Pretty.Text.renderStrict (Dhall.Pretty.layout doc)
let formattedText = Pretty.Text.renderStrict docStream

if originalText == formattedText
then return ()
Expand Down
13 changes: 7 additions & 6 deletions dhall/src/Dhall/Freeze.hs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ module Dhall.Freeze
import Data.Monoid ((<>))
import Data.Text
import Dhall.Parser (Src)
import Dhall.Pretty (CharacterSet, annToAnsiStyle, prettyCharacterSet)
import Dhall.Pretty (CharacterSet)
import Dhall.Syntax (Expr(..), Import(..), ImportHashed(..), ImportType(..))
import Dhall.Util (Censor, Input(..))
import System.Console.ANSI (hSupportsANSI)
Expand All @@ -26,7 +26,6 @@ import qualified Control.Exception
import qualified Control.Monad.Trans.State.Strict as State
import qualified Data.Text.Prettyprint.Doc as Pretty
import qualified Data.Text.Prettyprint.Doc.Render.Terminal as Pretty
import qualified Data.Text.IO
import qualified Dhall.Core
import qualified Dhall.Import
import qualified Dhall.Optics
Expand Down Expand Up @@ -88,20 +87,22 @@ writeExpr :: Input -> (Text, Expr Src Import) -> CharacterSet -> IO ()
writeExpr inplace (header, expr) characterSet = do
let doc = Pretty.pretty header
<> Dhall.Pretty.prettyCharacterSet characterSet expr
<> "\n"

let unAnnotated = Dhall.Pretty.layout (Pretty.unAnnotate doc)
let stream = Dhall.Pretty.layout doc

let unAnnotated = Pretty.unAnnotateS stream

case inplace of
InputFile f ->
System.IO.withFile f System.IO.WriteMode (\handle -> do
Pretty.renderIO handle unAnnotated
Data.Text.IO.hPutStrLn handle "" )
Pretty.renderIO handle unAnnotated)

StandardInput -> do
supportsANSI <- System.Console.ANSI.hSupportsANSI System.IO.stdout
if supportsANSI
then
Pretty.renderIO System.IO.stdout (annToAnsiStyle <$> Dhall.Pretty.layout doc)
Pretty.renderIO System.IO.stdout (Dhall.Pretty.annToAnsiStyle <$> stream)
else
Pretty.renderIO System.IO.stdout unAnnotated

Expand Down
14 changes: 10 additions & 4 deletions dhall/src/Dhall/Pretty/Internal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1082,7 +1082,7 @@ prettyCharacterSet characterSet expression =
where
long =
Pretty.align
( literal ("''" <> Pretty.hardline)
( literal "''" <> Pretty.hardline
<> Pretty.align
(foldMap prettyMultilineChunk a <> prettyMultilineText b)
<> literal "''"
Expand All @@ -1100,12 +1100,18 @@ prettyCharacterSet characterSet expression =
<> prettyExpression d
<> rbrace

prettyMultilineText text = literal (mconcat docs)
prettyMultilineText text = mconcat docs
where
lines_ = Text.splitOn "\n" (escapeSingleQuotedText text)

-- Annotate only non-empty lines so trailing whitespace can be
-- removed on empty ones.
prettyLine line =
(if Text.null line then id else literal)
(Pretty.pretty line)

docs =
Data.List.intersperse Pretty.hardline (fmap Pretty.pretty lines_)
Data.List.intersperse Pretty.hardline (map prettyLine lines_)

prettyChunk (c, d) =
prettyText c
Expand Down Expand Up @@ -1177,7 +1183,7 @@ prettyToStrictText = docToStrictText . Pretty.pretty
--
-- Tries hard to fit the document into 80 columns.
layout :: Pretty.Doc ann -> Pretty.SimpleDocStream ann
layout = Pretty.layoutSmart layoutOpts
layout = Pretty.removeTrailingWhitespace . Pretty.layoutSmart layoutOpts

-- | Default layout options
layoutOpts :: Pretty.LayoutOptions
Expand Down
2 changes: 1 addition & 1 deletion dhall/tests/diff/function.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
→ …
→ …@- 1
+ 0

→ …
2 changes: 1 addition & 1 deletion dhall/tests/format/concatSepB.dhall
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ let concatSep
status
)
Status.Empty

in merge { Empty = "", NonEmpty = λ(result : Text) → result } status

let example0 = assert : concatSep ", " [ "ABC", "DEF", "GHI" ] ≡ "ABC, DEF, GHI"
Expand Down
2 changes: 1 addition & 1 deletion dhall/tests/format/headerB.dhall
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{- bla -}

True
8 changes: 4 additions & 4 deletions dhall/tests/format/innerMultilineB.dhall
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{ inner =
''

one

two

three

''
}
2 changes: 1 addition & 1 deletion dhall/tests/format/issue1413B.dhall
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
let foo =

{- test -}
"hello"

Expand Down
11 changes: 11 additions & 0 deletions dhall/tests/format/issue183A.dhall
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
let foo = 1

in λ(bar : Integer)
→ let exposePort =
λ(portSpec : { ext : Integer, int : Integer })
→ Integer/show portSpec.ext ++ ":" ++ Integer/show portSpec.int

in let exposeSamePort =
λ(port : Integer) → exposePort { ext = port, int = port }

in { blah = bar }
11 changes: 11 additions & 0 deletions dhall/tests/format/issue183B.dhall
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
let foo = 1

in λ(bar : Integer)
→ let exposePort =
λ(portSpec : { ext : Integer, int : Integer })
→ Integer/show portSpec.ext ++ ":" ++ Integer/show portSpec.int

in let exposeSamePort =
λ(port : Integer) → exposePort { ext = port, int = port }

in { blah = bar }
2 changes: 1 addition & 1 deletion dhall/tests/format/letNewlineCommentsB.dhall
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ in let {- aaaaaaaaaaaaaaaaaaa
: {- bbbbbbbbbbbbbbbbbbbbb
-} Natural
= {- ddddddddddddddddd -} 2

in x
1 change: 1 addition & 0 deletions dhall/tests/format/multilineTrailingWhitespaceA.dhall
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ x = " \n\nfoo \n" }
7 changes: 7 additions & 0 deletions dhall/tests/format/multilineTrailingWhitespaceB.dhall
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{ x =
''

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's trailing whitespace on this line, but GitHub doesn't seem to display it unlike the trailing whitespace after foo on line 5.


foo
''
}
18 changes: 9 additions & 9 deletions nix/prettyprinter.nix
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
{ mkDerivation, ansi-wl-pprint, base, bytestring, containers
, criterion, deepseq, doctest, mtl, pgp-wordlist, QuickCheck
, random, stdenv, tasty, tasty-hunit, tasty-quickcheck, text
, transformers
{ mkDerivation, ansi-wl-pprint, base, base-compat, bytestring
, containers, criterion, deepseq, doctest, mtl, pgp-wordlist
, QuickCheck, random, stdenv, tasty, tasty-hunit, tasty-quickcheck
, text, transformers
}:
mkDerivation {
pname = "prettyprinter";
version = "1.2.1";
sha256 = "e7653e0ba87cc06553a50e4780dde81c5dd156196c0199511d03d972e5517fcf";
version = "1.5.1";
sha256 = "fb66b498cdd46aa7f36abdaf0b49e88444a3e6ed9d04bec8924ed6355f393794";
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [ base text ];
testHaskellDepends = [
base bytestring doctest pgp-wordlist tasty tasty-hunit
base bytestring doctest pgp-wordlist QuickCheck tasty tasty-hunit
tasty-quickcheck text
];
benchmarkHaskellDepends = [
ansi-wl-pprint base containers criterion deepseq mtl QuickCheck
random text transformers
ansi-wl-pprint base base-compat containers criterion deepseq mtl
QuickCheck random text transformers
];
homepage = "http://github.com/quchen/prettyprinter";
description = "A modern, easy to use, well-documented, extensible pretty-printer";
Expand Down
6 changes: 6 additions & 0 deletions nix/shared.nix
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,11 @@ let
doBenchmarkExtension =
mass pkgsNew.haskell.lib.doBenchmark allDhallPackages;

doJailbreakExtension =
mass pkgsNew.haskell.lib.doJailbreak [
"hnix"
];

failOnAllWarningsExtension =
mass failOnAllWarnings [
"dhall"
Expand Down Expand Up @@ -266,6 +271,7 @@ let
extension
doCheckExtension
doBenchmarkExtension
doJailbreakExtension
failOnAllWarningsExtension
failOnMissingHaddocksExtension
];
Expand Down
2 changes: 1 addition & 1 deletion stack-lts-6.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ extra-deps:
- optparse-generic-1.3.0
- parsec-3.1.13.0
- parser-combinators-1.0.0
- prettyprinter-1.2.0.1
- prettyprinter-1.5.1@sha256:fca87c3e2611d3499a0341a59857e9b424a23f31646e4737d535a18582284f96,5375
- prettyprinter-ansi-terminal-1.1.1.2
- primitive-0.6.3.0
- process-1.6.2.0
Expand Down
Loading