Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 5 additions & 1 deletion Cabal/src/Distribution/PackageDescription/Check.hs
Original file line number Diff line number Diff line change
Expand Up @@ -413,9 +413,13 @@ checkPackageDescription
checkPackageId package_
-- TODO `name` is caught at parse level, remove this test.
let pn = packageName package_
pns = unPackageName pn
checkP
(null . unPackageName $ pn)
(null pns)
(PackageBuildImpossible NoNameField)
checkP
(any (not . isAscii) pns)
(PackageDistInexcusable NonASCIIName)
-- TODO `version` is caught at parse level, remove this test.
checkP
(nullVersion == packageVersion package_)
Expand Down
5 changes: 5 additions & 0 deletions Cabal/src/Distribution/PackageDescription/Check/Warning.hs
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ filterPackageChecksByIdString cs ss =
data CheckExplanation
= ParseWarning FilePath PWarning
| NoNameField
| NonASCIIName
| NoVersionField
| NoTarget
| UnnamedInternal
Expand Down Expand Up @@ -309,6 +310,7 @@ extractCheckExplanation (PackageDistInexcusable e) = e
data CheckExplanationID
= CIParseWarning
| CINoNameField
| CINonASCIIName
| CINoVersionField
| CINoTarget
| CIUnnamedInternal
Expand Down Expand Up @@ -455,6 +457,7 @@ data CheckExplanationID
checkExplanationId :: CheckExplanation -> CheckExplanationID
checkExplanationId (ParseWarning{}) = CIParseWarning
checkExplanationId (NoNameField{}) = CINoNameField
checkExplanationId (NonASCIIName{}) = CINonASCIIName
checkExplanationId (NoVersionField{}) = CINoVersionField
checkExplanationId (NoTarget{}) = CINoTarget
checkExplanationId (UnnamedInternal{}) = CIUnnamedInternal
Expand Down Expand Up @@ -608,6 +611,7 @@ ppCheckExplanationId :: CheckExplanationID -> CheckExplanationIDString
-- $ cabal run Cabal-tests:unit-tests -- --pattern=Parsimonious
ppCheckExplanationId CIParseWarning = "parser-warning"
ppCheckExplanationId CINoNameField = "no-name-field"
ppCheckExplanationId CINonASCIIName = "non-ascii-name"
ppCheckExplanationId CINoVersionField = "no-version-field"
ppCheckExplanationId CINoTarget = "no-target"
ppCheckExplanationId CIUnnamedInternal = "unnamed-internal-library"
Expand Down Expand Up @@ -795,6 +799,7 @@ ppWarnLang LangCPlusPlus = "C++"
ppExplanation :: CheckExplanation -> String
ppExplanation (ParseWarning fp pp) = showPWarning fp pp
ppExplanation NoNameField = "No 'name' field."
ppExplanation NonASCIIName = "Non-ASCII characters in 'name' field."
ppExplanation NoVersionField = "No 'version' field."
ppExplanation NoTarget =
"No executables, libraries, tests, or benchmarks found. Nothing to do."
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# cabal check
The following errors will cause portability problems on other environments:
Error: [name-no-match] The filename './pkg.cabal' does not match package name (expected: 'pkg-?.cabal')
Error: [non-ascii-name] Non-ASCII characters in 'name' field.
Error: Hackage would reject this package.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Test.Cabal.Prelude

-- Non ASCII charaters in package name.
main = cabalTest $
fails $ cabal "check" []
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
cabal-version: 3.0
name: pkg-α
-- Cabal testsuite sadly chokes when copying files with
-- non-ASCII characters in them. So for this test, in
-- the output file, you will get an error for filename/
-- name mismatch, too.
description: description
synopsis: synopsis
version: 0
category: example
maintainer: [email protected]
license: GPL-3.0-or-later

library
exposed-modules: Module
default-language: Haskell2010
9 changes: 9 additions & 0 deletions changelog.d/pr-11198
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
synopsis: Warn on non-ASCII characters in `name`
packages: [Cabal, cabal-install]
prs: 11198
issues: 11197
---

`cabal check` now warns about packages with non-ASCII characters
in their name (they are not accepted by Hackage).
1 change: 1 addition & 0 deletions doc/cabal-commands.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1385,6 +1385,7 @@ A list of all warnings with their constructor:

- ``parser-warning``: inherited from parser.
- ``no-name-field``: missing ``name`` field.
- ``non-ascii-name``: non-ASCII characters in ``name`` field.
- ``no-version-field``: missing ``version`` field.
- ``no-target``: missing target in ``.cabal``.
- ``unnamed-internal-library``: unnamed internal library.
Expand Down
Loading