Skip to content

Commit f0113de

Browse files
committed
add section
the constraints are missing? make a non trival test pass remove unused imports
1 parent d12c1cd commit f0113de

File tree

4 files changed

+45
-58
lines changed

4 files changed

+45
-58
lines changed

Cabal-syntax/src/Distribution/PackageDescription/ExactPrint.hs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
{-# LANGUAGE LambdaCase #-}
22
{-# LANGUAGE RecordWildCards #-}
33
{-# LANGUAGE OverloadedStrings #-}
4+
5+
-- I suppose this is currently more of an exact-ish print
6+
-- anything that makes it warn for example is neglected.
47
module Distribution.PackageDescription.ExactPrint
58
(exactPrint
69
) where
@@ -9,7 +12,7 @@ import Distribution.Types.GenericPackageDescription
912
import Distribution.PackageDescription.PrettyPrint
1013
import Data.Text(Text, pack, unpack)
1114
import qualified Text.PrettyPrint as PP
12-
import Text.PrettyPrint(Doc, ($+$), ($$), (<+>))
15+
import Text.PrettyPrint(Doc, ($+$), ($$))
1316
import qualified Data.Map as Map
1417
import Data.Map(Map)
1518
import Distribution.Fields.Pretty
@@ -19,6 +22,7 @@ import Distribution.Parsec.Position
1922
import Data.List(sortOn)
2023
import Control.Monad(join)
2124
import Distribution.PackageDescription(specVersion)
25+
import Data.Foldable(fold)
2226

2327
exactPrint :: GenericPackageDescription -> Text
2428
exactPrint package = foldExactly (exactPrintMeta package) fields
@@ -56,45 +60,55 @@ renderLine :: PrettyField (Maybe ExactPosition) -> RenderState -> RenderState
5660
renderLine field (previous@MkRenderState {..}) = case field of
5761
PrettyField mAnn name' doc ->
5862
let
59-
6063
newPosition = case mAnn of
6164
Just position -> retPos (namePosition position)
6265
Nothing -> retPos currentPosition
6366

6467
in MkRenderState {
65-
currentDoc = currentDoc $+$ renderWithPositionAdjustment mAnn currentPosition name' doc,
68+
currentDoc = currentDoc $+$ renderWithPositionAdjustment mAnn currentPosition ((decodeFieldname name') <> ":") [doc],
6669
currentPosition = newPosition
6770
}
68-
PrettySection ann name' ppDoc sectionFields -> previous -- TODO render section
71+
PrettySection mAnn name' ppDocs sectionFields ->
72+
let
73+
newPosition = case mAnn of
74+
Just position -> retPos (namePosition position)
75+
Nothing -> retPos currentPosition
76+
77+
result = MkRenderState {
78+
currentDoc = currentDoc $+$ renderWithPositionAdjustment mAnn currentPosition (decodeFieldname name') ppDocs,
79+
currentPosition = newPosition
80+
}
81+
in renderLines result $ sortFields sectionFields
82+
6983
PrettyEmpty -> previous
7084

71-
renderWithPositionAdjustment :: (Maybe ExactPosition) -> Position -> FieldName -> Doc -> Doc
72-
renderWithPositionAdjustment mAnn current name doc =
73-
if rows < 0 then error "unexpected empty negative rows"
85+
decodeFieldname :: FieldName -> String
86+
decodeFieldname = unpack . Text.decodeUtf8
87+
88+
renderWithPositionAdjustment :: (Maybe ExactPosition) -> Position -> String -> [Doc] -> Doc
89+
renderWithPositionAdjustment mAnn current fieldName doc =
90+
if rows < 0 then error ("unexpected empty negative rows" <> show (mAnn, current, fieldName, res))
7491
else
7592
let
7693
spacing :: Doc
7794
spacing = foldr ($+$) mempty ("" <$ [1..rows])
7895
in
7996
spacing $$
8097
(PP.nest columns
81-
(PP.text fieldName ) <> ((PP.hsep ("" <$ [0..offset])) <> doc))
98+
(PP.text fieldName ) <> ((PP.hsep ("" <$ [1..offset])) <> fold doc))
8299
-- <+> "--" <+> PP.text (show ((rows, columns), mAnn, current, offset)) -- DEBUG
83100
where
84-
(Position rows columns) = case mAnn of
101+
res@(Position rows columns) = case mAnn of
85102
Just position -> (namePosition position) `difference` current
86103
Nothing -> zeroPos
87104

88105
arguments :: [Position]
89106
arguments = foldMap argumentPosition mAnn
90107

91-
fieldName :: String
92-
fieldName = unpack (Text.decodeUtf8 name) <> ":"
93-
94108
offset :: Int
95109
offset = (case arguments of
96110
((Position _ cols):_) -> cols
97-
[] -> 0) - length fieldName - 1
111+
[] -> 0) - length fieldName - columns
98112

99113
-- pp randomly changes ordering, this undoes that
100114
sortFields :: [PrettyField (Maybe ExactPosition)] -> [PrettyField (Maybe ExactPosition)]

Cabal-syntax/src/Distribution/Types/GenericPackageDescription.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import Distribution.Types.Library
3131
import Distribution.Types.TestSuite
3232
import Distribution.Types.UnqualComponentName
3333
import Distribution.Version
34-
import Data.Text(Text, pack)
34+
import Data.Text(Text)
3535
import Distribution.Fields.Field(FieldName)
3636
import Distribution.Parsec.Position(Position)
3737

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
cabal-version: 3.0
2+
name: bounded
3+
version: 0
4+
synopsis: The -any none demo
5+
build-type: Simple
6+
7+
library
8+
default-language: Haskell2010
9+
exposed-modules: AnyNone
10+
build-depends: base <5

Cabal-tests/tests/PrinterTests.hs

Lines changed: 7 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,23 @@ module Main
66
import Prelude ()
77
import Prelude.Compat
88

9-
import Data.Foldable(fold)
109
import Data.Maybe(catMaybes)
1110
import Test.Tasty
1211
import Data.Text(unpack)
13-
import Test.Tasty.Golden.Advanced (goldenTest)
1412
import Test.Tasty.HUnit
1513

16-
import Control.Monad (unless, void)
17-
import Data.Algorithm.Diff (PolyDiff (..), getGroupedDiff)
18-
import Data.Maybe (isNothing)
14+
import Control.Monad (unless)
1915
import Distribution.Fields (runParseResult)
20-
import Distribution.PackageDescription (GenericPackageDescription)
2116
import Distribution.PackageDescription.Parsec (parseGenericPackageDescription)
22-
import Distribution.PackageDescription.PrettyPrint (showGenericPackageDescription)
23-
import Distribution.Parsec (PWarnType (..), PWarning (..), showPError, showPWarning)
24-
import Distribution.Pretty (prettyShow)
25-
import Distribution.Utils.Generic (fromUTF8BS, toUTF8BS)
2617
import System.Directory (setCurrentDirectory)
2718
import System.Environment (getArgs, withArgs)
28-
import System.FilePath (replaceExtension, (</>))
29-
import Data.Text.Encoding(encodeUtf8, decodeUtf8)
19+
import System.FilePath ((</>))
20+
import Data.Text.Encoding(decodeUtf8)
3021
import Distribution.PackageDescription.ExactPrint(exactPrint)
3122
import Data.TreeDiff
3223
import Text.PrettyPrint hiding ((<>))
3324

3425
import qualified Data.ByteString as BS
35-
import qualified Data.ByteString.Char8 as BS8
36-
import qualified Data.List.NonEmpty as NE
37-
38-
import qualified Distribution.InstalledPackageInfo as IPI
39-
40-
#ifdef MIN_VERSION_tree_diff
41-
import Data.TreeDiff (ansiWlEditExpr, ediff, toExpr)
42-
import Data.TreeDiff.Golden (ediffGolden)
43-
import Data.TreeDiff.Instances.Cabal ()
44-
#endif
4526

4627
tests :: TestTree
4728
tests = testGroup "printer tests"
@@ -55,28 +36,10 @@ tests = testGroup "printer tests"
5536
-- Parse some cabal file - print it like cabal file
5637
printExact :: TestTree
5738
printExact = testGroup "printExact"
58-
[ testParsePrintExact "anynone.cabal"
59-
-- , warningTest "nbsp.cabal"
60-
-- , warningTest "tab.cabal"
61-
-- , warningTest "utf8.cabal"
62-
-- , warningTest "bool.cabal"
63-
-- , warningTest "versiontag.cabal"
64-
-- , warningTest "newsyntax.cabal"
65-
-- , warningTest "oldsyntax.cabal"
66-
-- , warningTest "deprecatedfield.cabal"
67-
-- , warningTest "subsection.cabal"
68-
-- , warningTest "unknownfield.cabal"
69-
-- , warningTest "unknownsection.cabal"
70-
-- , warningTest "trailingfield.cabal"
71-
-- , warningTest "doubledash.cabal"
72-
-- , warningTest "multiplesingular.cabal"
73-
-- , warningTest "wildcard.cabal"
74-
-- , warningTest "operator.cabal"
75-
-- , warningTest "specversion-a.cabal"
76-
-- , warningTest "specversion-b.cabal"
77-
-- , warningTest "specversion-c.cabal"
78-
-- -- TODO: not implemented yet
79-
-- , warningTest PWTExtraTestModule "extratestmodule.cabal"
39+
[ testParsePrintExact "bounded.cabal"
40+
-- , testParsePrintExact "anynone.cabal" -- TODO version ranges
41+
-- instance Pretty VersionRange where fucks this up
42+
-- however we currently don't retain enough information to do this exact!
8043
]
8144

8245
testParsePrintExact :: FilePath -> TestTree

0 commit comments

Comments
 (0)