Skip to content

move censorTestWarnings from test to build in spago.yaml #1332

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
115 changes: 110 additions & 5 deletions CHANGELOG.md

Large diffs are not rendered by default.

38 changes: 20 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1451,6 +1451,26 @@ package:
# see https://yaml-multiline.info/
- byPrefix: >
"Data.Map"'s `Semigroup instance`

# Specify whether to censor warnings coming from the compiler
# for files from this package's test code.
# Optional and can be one of two possible values
censorTestWarnings:
# Value 1: "all" - All warnings are censored
all

# Value 2: `NonEmptyArray (Either String { byPrefix :: String })`
# - String values:
# censor warnings if the code matches this code
# - { byPrefix } values:
# censor warnings if the warning's message
# starts with the given text
- CodeName
# Note: when using `byPrefix`, use the `>` for block-string:
# see https://yaml-multiline.info/
- byPrefix: >
"Data.Map"'s `Semigroup instance`

# Convert compiler warnings for files in this package's src code
# into errors that can fail the build.
# Optional and defaults to false
@@ -1501,24 +1521,6 @@ package:
# Optional boolean that defaults to `false`.
pedanticPackages: false

# Specify whether to censor warnings coming from the compiler
# for files from this package's test code.
# Optional and can be one of two possible values
censorTestWarnings:
# Value 1: "all" - All warnings are censored
all

# Value 2: `NonEmptyArray (Either String { byPrefix :: String })`
# - String values:
# censor warnings if the code matches this code
# - { byPrefix } values:
# censor warnings if the warning's message
# starts with the given text
- CodeName
# Note: when using `byPrefix`, use the `>` for block-string:
# see https://yaml-multiline.info/
- byPrefix: >
"Data.Map"'s `Semigroup instance`
# Convert compiler warnings for files from this package's test code
# into errors that can fail the build.
# Optional and defaults to false
4 changes: 2 additions & 2 deletions core/src/Config.purs
Original file line number Diff line number Diff line change
@@ -168,7 +168,6 @@ type TestConfig =
{ main :: String
, execArgs :: Maybe (Array String)
, dependencies :: Dependencies
, censorTestWarnings :: Maybe CensorBuildWarnings
, strict :: Maybe Boolean
, pedanticPackages :: Maybe Boolean
}
@@ -177,7 +176,6 @@ testConfigCodec :: CJ.Codec TestConfig
testConfigCodec = CJ.named "TestConfig" $ CJS.objectStrict
$ CJS.recordProp @"main" CJ.string
$ CJS.recordPropOptional @"execArgs" (CJ.array CJ.string)
$ CJS.recordPropOptional @"censorTestWarnings" censorBuildWarningsCodec
$ CJS.recordPropOptional @"strict" CJ.boolean
$ CJS.recordPropOptional @"pedanticPackages" CJ.boolean
$ CJS.recordProp @"dependencies" dependenciesCodec
@@ -196,13 +194,15 @@ backendConfigCodec = CJ.named "BackendConfig" $ CJS.objectStrict

type PackageBuildOptionsInput =
{ censorProjectWarnings :: Maybe CensorBuildWarnings
, censorTestWarnings :: Maybe CensorBuildWarnings
, strict :: Maybe Boolean
, pedanticPackages :: Maybe Boolean
}

packageBuildOptionsCodec :: CJ.Codec PackageBuildOptionsInput
packageBuildOptionsCodec = CJ.named "PackageBuildOptionsInput" $ CJS.objectStrict
$ CJS.recordPropOptional @"censorProjectWarnings" censorBuildWarningsCodec
$ CJS.recordPropOptional @"censorTestWarnings" censorBuildWarningsCodec
$ CJS.recordPropOptional @"strict" CJ.boolean
$ CJS.recordPropOptional @"pedanticPackages" CJ.boolean
$ CJS.record
6 changes: 3 additions & 3 deletions spago.yaml
Original file line number Diff line number Diff line change
@@ -11,6 +11,9 @@ package:
censorProjectWarnings:
- WildcardInferredType
- ImplicitQualifiedImportReExport
censorTestWarnings:
- ImplicitQualifiedImportReExport
- ImplicitQualifiedImport
dependencies:
- aff
- aff-promise
@@ -73,9 +76,6 @@ package:
- unsafe-coerce
test:
main: Test.Spago
censorTestWarnings:
- ImplicitQualifiedImportReExport
- ImplicitQualifiedImport
dependencies:
- exceptions
- quickcheck
10 changes: 5 additions & 5 deletions src/Spago/Command/Init.purs
Original file line number Diff line number Diff line change
@@ -159,7 +159,7 @@ defaultConfig { name, withWorkspace, testModuleName } = do
pkg =
{ name
, dependencies: [ "effect", "console", "prelude" ]
, test: Just { moduleMain: testModuleName, strict: Nothing, censorTestWarnings: Nothing, pedanticPackages: Nothing, dependencies: Nothing }
, test: Just { moduleMain: testModuleName, strict: Nothing, pedanticPackages: Nothing, dependencies: Nothing }
, build: Nothing
}
defaultConfig' case withWorkspace of
@@ -173,14 +173,14 @@ type DefaultConfigPackageOptions =
Maybe
{ moduleMain :: String
, strict :: Maybe Boolean
, censorTestWarnings :: Maybe Config.CensorBuildWarnings
, pedanticPackages :: Maybe Boolean
, dependencies :: Maybe Config.Dependencies
}
, build ::
Maybe
{ strict :: Maybe Boolean
, censorProjectWarnings :: Maybe Config.CensorBuildWarnings
, censorTestWarnings :: Maybe Config.CensorBuildWarnings
, pedanticPackages :: Maybe Boolean
}
}
@@ -212,17 +212,17 @@ defaultConfig' opts =
{ name
, dependencies: Dependencies $ Map.fromFoldable $ map mkDep dependencies
, description: Nothing
, build: build <#> \{ censorProjectWarnings, strict, pedanticPackages } ->
, build: build <#> \{ censorProjectWarnings, censorTestWarnings, strict, pedanticPackages } ->
{ censorProjectWarnings
, censorTestWarnings
, strict
, pedanticPackages
}
, run: Nothing
, test: test <#> \{ moduleMain, censorTestWarnings, strict, pedanticPackages, dependencies: testDeps } ->
, test: test <#> \{ moduleMain, strict, pedanticPackages, dependencies: testDeps } ->
{ dependencies: fromMaybe (Dependencies Map.empty) testDeps
, execArgs: Nothing
, main: moduleMain
, censorTestWarnings
, strict
, pedanticPackages
}
30 changes: 25 additions & 5 deletions src/Spago/Config.js
Original file line number Diff line number Diff line change
@@ -5,17 +5,21 @@ const getOrElse = (node, key, fallback) => {
node.set(key, fallback);
}
return node.get(key);
}
};

export function addPackagesToConfigImpl(doc, isTest, newPkgs) {
const pkg = doc.get("package");

const deps = (() => {
if (isTest) {
const test = getOrElse(pkg, "test", doc.createNode({ main: "Test.Main", dependencies: [] }));
const test = getOrElse(
pkg,
"test",
doc.createNode({ main: "Test.Main", dependencies: [] }),
);
return getOrElse(test, "dependencies", doc.createNode([]));
} else {
return getOrElse(pkg, "dependencies", doc.createNode([]))
return getOrElse(pkg, "dependencies", doc.createNode([]));
}
})();

@@ -59,7 +63,9 @@ export function addPackagesToConfigImpl(doc, isTest, newPkgs) {
export function removePackagesFromConfigImpl(doc, isTest, shouldRemove) {
const pkg = doc.get("package");

const deps = isTest ? pkg.get("test").get("dependencies") : pkg.get("dependencies");
const deps = isTest
? pkg.get("test").get("dependencies")
: pkg.get("dependencies");
let newItems = [];
for (const el of deps.items) {
if (
@@ -124,8 +130,22 @@ export function migrateV1ConfigImpl(doc) {
return match.charAt(1).toUpperCase();
});
}
}

// move censorTestWarnings from test to build map
if (pair.key.value === "censorTestWarnings") {
const parent = _path.at(-2);
if (parent.key && parent.key.value === "test") {
hasChanged = true;
const root = _path.at(0);
const build = root.get("package").get("build");
build.set("censorTestWarnings", pair.value);

return Yaml.visit.REMOVE;
}
}
},
});

if (hasChanged) {
return doc;
}
2 changes: 1 addition & 1 deletion src/Spago/Psa.purs
Original file line number Diff line number Diff line change
@@ -160,7 +160,7 @@ toWorkspacePackagePathDecision { selected: { path, package }, psaCliFlags } = do
{ pathIsFromPackage: (testPath `Path.isPrefixOf` _)
, pathType: IsSrc
, strict: fromMaybe false $ psaCliFlags.strict <|> (package.test >>= _.strict)
, censorWarnings: package.test >>= _.censorTestWarnings
, censorWarnings: package.build >>= _.censorTestWarnings
}
]

2 changes: 1 addition & 1 deletion test-fixtures/build/migrate-config/migrated-spago.yaml
Original file line number Diff line number Diff line change
@@ -10,11 +10,11 @@ package:
main: Test.Main
execArgs: []
dependencies: []
censorTestWarnings: all
pedanticPackages: false
build:
censorProjectWarnings: all
pedanticPackages: false
censorTestWarnings: all
workspace:
packageSet:
registry: 50.4.0
90 changes: 35 additions & 55 deletions test/Prelude.purs
Original file line number Diff line number Diff line change
@@ -106,20 +106,20 @@ shouldEqualStr v1 v2 =
let
renderNonPrinting =
String.replaceAll (String.Pattern "\r") (String.Replacement "␍")
>>> String.replaceAll (String.Pattern "\t") (String.Replacement "␉-->")
>>> String.replaceAll (String.Pattern "\t") (String.Replacement "␉-->")
in
when (v1 /= v2) do
fail $ Array.intercalate "\n"
[ ""
, "===== (Actual)"
, renderNonPrinting v1
, "====="
, " ≠"
, "===== (Expected)"
, renderNonPrinting v2
, "====="
, ""
]
when (v1 /= v2) do
fail $ Array.intercalate "\n"
[ ""
, "===== (Actual)"
, renderNonPrinting v1
, "====="
, " ≠"
, "===== (Expected)"
, renderNonPrinting v2
, "====="
, ""
]

checkFixture :: ∀ path. IsPath path => path -> FixturePath -> Aff Unit
checkFixture filepath fixturePath = checkFixture' filepath fixturePath (shouldEqualStr `on` String.trim)
@@ -325,83 +325,63 @@ configurePackageSection initialOptions = snd <<< Array.foldl (\c f -> f c)

configAddSrcStrict :: Tuple String Init.DefaultConfigPackageOptions -> Tuple String Init.DefaultConfigPackageOptions
configAddSrcStrict = map \r -> r
{ build = Just
{ strict: Just true
, censorProjectWarnings: r.build >>= _.censorProjectWarnings
, pedanticPackages: r.build >>= _.pedanticPackages
{ build = r.build <#> _
{ strict = Just true
}
}

configAddSrcPedantic :: Tuple String Init.DefaultConfigPackageOptions -> Tuple String Init.DefaultConfigPackageOptions
configAddSrcPedantic = map \r -> r
{ build = Just
{ strict: r.build >>= _.strict
, censorProjectWarnings: r.build >>= _.censorProjectWarnings
, pedanticPackages: Just true
{ build = r.build <#> _
{ pedanticPackages = Just true
}
}

configAddSrcCensor :: Config.CensorBuildWarnings -> Tuple String Init.DefaultConfigPackageOptions -> Tuple String Init.DefaultConfigPackageOptions
configAddSrcCensor censors = map \r -> r
{ build = Just
{ strict: r.build >>= _.strict
, censorProjectWarnings: Just censors
, pedanticPackages: r.build >>= _.pedanticPackages
{ build = r.build <#> _
{ censorProjectWarnings = Just censors
}
}

configAddTestMain :: Tuple String Init.DefaultConfigPackageOptions -> Tuple String Init.DefaultConfigPackageOptions
configAddTestMain (Tuple packageName r) = Tuple packageName $ r
{ test = Just
{ moduleMain: mkTestModuleName packageName
, strict: r.test >>= _.strict
, censorTestWarnings: r.test >>= _.censorTestWarnings
, pedanticPackages: r.test >>= _.pedanticPackages
, dependencies: r.test >>= _.dependencies
{ test = r.test <#> _
{ moduleMain = mkTestModuleName packageName
}
}

configAddTestStrict :: Tuple String Init.DefaultConfigPackageOptions -> Tuple String Init.DefaultConfigPackageOptions
configAddTestStrict (Tuple packageName r) = Tuple packageName $ r
{ test = Just
{ moduleMain: mkTestModuleName packageName
, strict: Just true
, censorTestWarnings: r.test >>= _.censorTestWarnings
, pedanticPackages: r.test >>= _.pedanticPackages
, dependencies: r.test >>= _.dependencies
{ test = r.test <#> _
{ moduleMain = mkTestModuleName packageName
, strict = Just true
}
}

configAddTestPedantic :: Tuple String Init.DefaultConfigPackageOptions -> Tuple String Init.DefaultConfigPackageOptions
configAddTestPedantic (Tuple packageName r) = Tuple packageName $ r
{ test = Just
{ moduleMain: mkTestModuleName packageName
, strict: r.test >>= _.strict
, censorTestWarnings: r.test >>= _.censorTestWarnings
, pedanticPackages: Just true
, dependencies: r.test >>= _.dependencies
{ test = r.test <#> _
{ moduleMain = mkTestModuleName packageName
, pedanticPackages = Just true
}
}

configAddTestCensor :: Config.CensorBuildWarnings -> Tuple String Init.DefaultConfigPackageOptions -> Tuple String Init.DefaultConfigPackageOptions
configAddTestCensor censors (Tuple packageName r) = Tuple packageName $ r
{ test = Just
{ moduleMain: mkTestModuleName packageName
, strict: r.test >>= _.strict
, censorTestWarnings: Just censors
, pedanticPackages: r.test >>= _.pedanticPackages
, dependencies: r.test >>= _.dependencies
{ test = r.test <#> _
{ moduleMain = mkTestModuleName packageName
}
, build = r.build <#> _
{ censorTestWarnings = Just censors
}
}

configAddTestDependencies :: Array String -> Tuple String Init.DefaultConfigPackageOptions -> Tuple String Init.DefaultConfigPackageOptions
configAddTestDependencies deps (Tuple packageName r) = Tuple packageName $ r
{ test = Just
{ moduleMain: mkTestModuleName packageName
, strict: r.test >>= _.strict
, censorTestWarnings: r.test >>= _.censorTestWarnings
, pedanticPackages: r.test >>= _.pedanticPackages
, dependencies: Just $ maybe (mkDependencies deps) (append (mkDependencies deps)) $ r.test >>= _.dependencies
{ test = r.test <#> _
{ moduleMain = mkTestModuleName packageName
, dependencies = Just $ maybe (mkDependencies deps) (append (mkDependencies deps)) $ r.test >>= _.dependencies
}
}

4 changes: 2 additions & 2 deletions test/Spago/Build.purs
Original file line number Diff line number Diff line change
@@ -39,8 +39,8 @@ spec = Spec.around withTempDir do
, result: isLeft
, sanitize:
String.trim
>>> String.replaceAll (String.Pattern "Usage: purs.bin") (String.Replacement "Usage: purs")
>>> String.replaceAll (String.Pattern "\r\n") (String.Replacement "\n")
>>> String.replaceAll (String.Pattern "Usage: purs.bin") (String.Replacement "Usage: purs")
>>> String.replaceAll (String.Pattern "\r\n") (String.Replacement "\n")
}

Spec.it "passes options to purs" \{ spago } -> do
Loading
Oops, something went wrong.
Loading
Oops, something went wrong.