Skip to content

Commit a1cdc0b

Browse files
committed
Add a README to the files generated by cabal init
See #11231
1 parent 8365cec commit a1cdc0b

File tree

7 files changed

+34
-6
lines changed

7 files changed

+34
-6
lines changed

cabal-install/src/Distribution/Client/Init/Defaults.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ module Distribution.Client.Init.Defaults
2323
, defaultLicenseIds
2424
, defaultMainIs
2525
, defaultChangelog
26+
, defaultReadme
2627
, defaultCategories
2728
, defaultInitFlags
2829
, defaultLanguage
@@ -75,6 +76,9 @@ defaultPackageType = Executable
7576
defaultChangelog :: FilePath
7677
defaultChangelog = "CHANGELOG.md"
7778

79+
defaultReadme :: FilePath
80+
defaultReadme = "README.md"
81+
7882
defaultLicense :: CabalSpecVersion -> SpecLicense
7983
defaultLicense csv
8084
| csv < CabalSpecV2_2 = SpecLicense $ Right AllRightsReserved

cabal-install/src/Distribution/Client/Init/FileCreators.hs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module Distribution.Client.Init.FileCreators
1818
( -- * Commands
1919
writeProject
2020
, writeLicense
21+
, writeReadme
2122
, writeChangeLog
2223
, prepareLibTarget
2324
, prepareExeTarget
@@ -70,6 +71,7 @@ writeProject (ProjectSettings opts pkgDesc libTarget exeTarget testTarget)
7071

7172
writeLicense opts pkgDesc
7273
writeChangeLog opts pkgDesc
74+
writeReadme opts pkgDesc
7375

7476
let pkgFields = mkPkgDescription opts pkgDesc
7577
commonStanza = mkCommonStanza opts
@@ -240,6 +242,28 @@ writeChangeLog opts pkgDesc
240242
go =
241243
void $ writeFileSafe opts defaultChangelog changeLog
242244

245+
writeReadme :: Interactive m => WriteOpts -> PkgDescription -> m ()
246+
writeReadme opts pkgDesc
247+
| Just docs <- _pkgExtraDocFiles pkgDesc
248+
, defaultReadme `Set.member` docs =
249+
go
250+
| defaultReadme `elem` _pkgExtraSrcFiles pkgDesc = go
251+
| otherwise = return ()
252+
where
253+
readme =
254+
unlines
255+
[ "# " ++ prettyShow (_pkgName pkgDesc)
256+
, ""
257+
, "## Build"
258+
, ""
259+
, "Run `$ cabal build` to build the project"
260+
, "## Documentation"
261+
, ""
262+
, "Run `$ cabal haddock --open` to generate a reference for the API of the project."
263+
]
264+
go =
265+
void $ writeFileSafe opts defaultReadme readme
266+
243267
-- -------------------------------------------------------------------- --
244268
-- Utilities
245269

cabal-install/src/Distribution/Client/Init/FlagExtractors.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ getExtraDocFiles :: Interactive m => InitFlags -> m (Maybe (Set String))
138138
getExtraDocFiles =
139139
pure
140140
. Just
141-
. flagElim (Set.singleton defaultChangelog) Set.fromList
141+
. flagElim (Set.fromList [defaultChangelog, defaultReadme]) Set.fromList
142142
. extraDoc
143143

144144
-- | Ask whether the project builds a library or executable.

cabal-install/src/Distribution/Client/Init/NonInteractive/Heuristics.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ guessExtraDocFiles flags = do
101101
return $
102102
Just $
103103
if null extraDocs
104-
then Set.singleton defaultChangelog
104+
then Set.fromList [defaultChangelog, defaultReadme]
105105
else Set.fromList extraDocs
106106

107107
-- | Try to guess the package type from the files in the package directory,

cabal-install/src/Distribution/Client/Init/Simple.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ createProject v pkgIx _srcDb initFlags = do
112112
genSimplePkgDesc :: Interactive m => InitFlags -> m PkgDescription
113113
genSimplePkgDesc flags = mkPkgDesc <$> currentDirPkgName
114114
where
115-
defaultExtraDoc = Just $ Set.singleton defaultChangelog
115+
defaultExtraDoc = Just $ Set.fromList [defaultChangelog, defaultReadme]
116116

117117
extractExtraDoc [] = defaultExtraDoc
118118
extractExtraDoc fs = Just $ Set.fromList fs

cabal-install/tests/UnitTests/Distribution/Client/Init/Interactive.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ createProjectTest pkgIx srcDb =
627627
flags =
628628
emptyFlags
629629
{ cabalVersion = Flag CabalSpecV1_10
630-
, extraDoc = Flag [defaultChangelog]
630+
, extraDoc = Flag [defaultChangelog, defaultReadme]
631631
, extraSrc = Flag ["README.md"]
632632
}
633633

@@ -650,7 +650,7 @@ createProjectTest pkgIx srcDb =
650650
_pkgHomePage desc @?= "qux.com"
651651
_pkgSynopsis desc @?= "Qux's package"
652652
_pkgCategory desc @?= "Control"
653-
_pkgExtraSrcFiles desc @?= Set.fromList [defaultChangelog, "README.md"]
653+
_pkgExtraSrcFiles desc @?= Set.fromList [defaultChangelog, defaultReadme]
654654
_pkgExtraDocFiles desc @?= Nothing
655655

656656
_libSourceDirs lib @?= ["src"]

cabal-install/tests/UnitTests/Distribution/Client/Init/Simple.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ simplePkgDesc pkgName =
168168
""
169169
""
170170
mempty
171-
(Just $ Set.singleton defaultChangelog)
171+
(Just $ Set.fromList [defaultReadme, defaultChangelog])
172172

173173
simpleLibTarget :: [Dependency] -> LibTarget
174174
simpleLibTarget baseDep =

0 commit comments

Comments
 (0)