From e67d542a9ddb66386356ea0cd097568c3278f74a Mon Sep 17 00:00:00 2001 From: Nicolas DUBIEN Date: Wed, 17 Feb 2021 22:28:26 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Enable=20strict=20mode=20in=20ts?= =?UTF-8?q?config=20(#1521)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../arbitrary/AsyncSchedulerArbitrary.ts | 2 +- src/check/arbitrary/RecordArbitrary.ts | 3 ++- src/check/arbitrary/SubarrayArbitrary.ts | 2 +- src/check/model/ModelRunner.ts | 2 +- src/check/runner/Runner.ts | 5 ++--- src/check/runner/Sampler.ts | 8 ++++---- src/check/runner/reporter/RunExecution.ts | 8 +------- test/e2e/Shadows.spec.ts | 2 +- .../SparseArrayArbitrary.itest.spec.ts | 2 +- .../arbitrary/UuidArbitrary.itest.spec.ts | 2 +- .../generic/GenericArbitraryHelper.ts | 10 +++++----- .../runner/reporter/RunExecution.spec.ts | 14 ++++---------- tsconfig.json | 19 ++++++++----------- 13 files changed, 32 insertions(+), 47 deletions(-) diff --git a/src/check/arbitrary/AsyncSchedulerArbitrary.ts b/src/check/arbitrary/AsyncSchedulerArbitrary.ts index f19860de926..9b223d26cb8 100644 --- a/src/check/arbitrary/AsyncSchedulerArbitrary.ts +++ b/src/check/arbitrary/AsyncSchedulerArbitrary.ts @@ -281,7 +281,7 @@ class SchedulerImplem implements Scheduler { ); } - scheduleSequence(sequenceBuilders: SchedulerSequenceItem[]) { + scheduleSequence(sequenceBuilders: SchedulerSequenceItem[]) { // We run all the builders sequencially // BUT we allow tasks scheduled outside of this sequence // to be called between two of our builders diff --git a/src/check/arbitrary/RecordArbitrary.ts b/src/check/arbitrary/RecordArbitrary.ts index 0cde68d35f0..1174db5bdc2 100644 --- a/src/check/arbitrary/RecordArbitrary.ts +++ b/src/check/arbitrary/RecordArbitrary.ts @@ -154,7 +154,8 @@ function record( if (requiredKeys.indexOf(k) !== -1) updatedRecordModel[k] = requiredArbitrary; else updatedRecordModel[k] = option(requiredArbitrary); } - return rawRecord(updatedRecordModel as any).map((obj: { [K in keyof T]: { value: T[keyof T] } | null }) => { + return rawRecord(updatedRecordModel as any).map((rawObj) => { + const obj = rawObj as { [K in keyof T]: { value: T[keyof T] } | null }; const nobj: { [K in keyof T]?: T[keyof T] } = {}; for (let index = 0; index !== keys.length; ++index) { const k = keys[index]; diff --git a/src/check/arbitrary/SubarrayArbitrary.ts b/src/check/arbitrary/SubarrayArbitrary.ts index beb612b8403..00e08a694b1 100644 --- a/src/check/arbitrary/SubarrayArbitrary.ts +++ b/src/check/arbitrary/SubarrayArbitrary.ts @@ -37,7 +37,7 @@ class SubarrayArbitrary extends Arbitrary { ); } generate(mrng: Random): Shrinkable { - const remainingElements = this.originalArray.map((v, idx) => idx); + const remainingElements = this.originalArray.map((_v, idx) => idx); const size = this.lengthArb.generate(mrng).value; const ids: number[] = []; for (let idx = 0; idx !== size; ++idx) { diff --git a/src/check/model/ModelRunner.ts b/src/check/model/ModelRunner.ts index 1c3cca102cf..fb1ef430318 100644 --- a/src/check/model/ModelRunner.ts +++ b/src/check/model/ModelRunner.ts @@ -54,7 +54,7 @@ const internalModelRun = ( s: ModelRunSetup, cmds: Iterable> ): void => { - const then = (p: undefined, c: () => undefined) => c(); + const then = (_p: undefined, c: () => undefined) => c(); const setupProducer: SetupProducer = { then: (fun: SetupFun) => { fun(s()); diff --git a/src/check/runner/Runner.ts b/src/check/runner/Runner.ts index 5054dbda83e..9848a79cf1f 100644 --- a/src/check/runner/Runner.ts +++ b/src/check/runner/Runner.ts @@ -119,7 +119,7 @@ function check(rawProperty: IRawProperty, params?: Parameters): unkn if (rawProperty.run == null) throw new Error('Invalid property encountered, please use a valid property not an arbitrary'); const qParams: QualifiedParameters = QualifiedParameters.read({ - ...readConfigureGlobal(), + ...(readConfigureGlobal() as Parameters), ...params, }); if (qParams.reporter !== null && qParams.asyncReporter !== null) @@ -135,12 +135,11 @@ function check(rawProperty: IRawProperty, params?: Parameters): unkn const sourceValues = new SourceValuesIterator(initialValues, maxInitialIterations, maxSkips); return property.isAsync() ? asyncRunIt(property, sourceValues, qParams.verbose, qParams.markInterruptAsFailure).then((e) => - e.toRunDetails(qParams.seed, qParams.path, qParams.numRuns, maxSkips, qParams) + e.toRunDetails(qParams.seed, qParams.path, maxSkips, qParams) ) : runIt(property, sourceValues, qParams.verbose, qParams.markInterruptAsFailure).toRunDetails( qParams.seed, qParams.path, - qParams.numRuns, maxSkips, qParams ); diff --git a/src/check/runner/Sampler.ts b/src/check/runner/Sampler.ts index 0817f095235..f501ec3a15c 100644 --- a/src/check/runner/Sampler.ts +++ b/src/check/runner/Sampler.ts @@ -28,8 +28,8 @@ function streamSample( ): IterableIterator { const extendedParams = typeof params === 'number' - ? { ...readConfigureGlobal(), numRuns: params } - : { ...readConfigureGlobal(), ...params }; + ? { ...(readConfigureGlobal() as Parameters), numRuns: params } + : { ...(readConfigureGlobal() as Parameters), ...params }; const qParams: QualifiedParameters = QualifiedParameters.read(extendedParams); const tossedValues: Stream<() => Shrinkable> = stream( toss(toProperty(generator, qParams), qParams.seed, qParams.randomType, qParams.examples) @@ -97,8 +97,8 @@ function statistics( ): void { const extendedParams = typeof params === 'number' - ? { ...readConfigureGlobal(), numRuns: params } - : { ...readConfigureGlobal(), ...params }; + ? { ...(readConfigureGlobal() as Parameters), numRuns: params } + : { ...(readConfigureGlobal() as Parameters), ...params }; const qParams: QualifiedParameters = QualifiedParameters.read(extendedParams); const recorded: { [key: string]: number } = {}; for (const g of streamSample(generator, params)) { diff --git a/src/check/runner/reporter/RunExecution.ts b/src/check/runner/reporter/RunExecution.ts index f91f278697d..f8ff66ffc11 100644 --- a/src/check/runner/reporter/RunExecution.ts +++ b/src/check/runner/reporter/RunExecution.ts @@ -92,13 +92,7 @@ export class RunExecution { return [...offsetItems.slice(0, offsetItems.length - 1), `${middle}`, ...remainingItems.slice(1)].join(':'); }; - toRunDetails( - seed: number, - basePath: string, - numRuns: number, - maxSkips: number, - qParams: QualifiedParameters - ): RunDetails { + toRunDetails(seed: number, basePath: string, maxSkips: number, qParams: QualifiedParameters): RunDetails { if (!this.isSuccess()) { // encountered a property failure return { diff --git a/test/e2e/Shadows.spec.ts b/test/e2e/Shadows.spec.ts index 048fc5ce117..2efaa768c58 100644 --- a/test/e2e/Shadows.spec.ts +++ b/test/e2e/Shadows.spec.ts @@ -151,7 +151,7 @@ const SpaceArbitrary = fc .map(({ w, h, cx, cy, sx, sy }) => new SpaceBuilder().withDimension(w, h).withSolution(cx, cy).withCurrent(sx, sy).build() ) - .map((space: Space) => [space, Math.ceil(Math.log(Math.max(space.dimX, space.dimY)) / Math.log(2))]); + .map((space: Space): [Space, number] => [space, Math.ceil(Math.log(Math.max(space.dimX, space.dimY)) / Math.log(2))]); // Test diff --git a/test/unit/check/arbitrary/SparseArrayArbitrary.itest.spec.ts b/test/unit/check/arbitrary/SparseArrayArbitrary.itest.spec.ts index b6e80cf7426..727f2adfe1e 100644 --- a/test/unit/check/arbitrary/SparseArrayArbitrary.itest.spec.ts +++ b/test/unit/check/arbitrary/SparseArrayArbitrary.itest.spec.ts @@ -31,7 +31,7 @@ const validSparseArrayConstraints = () => describe('SparseArrayArbitrary', () => { describe('sparseArray', () => { - genericHelper.isValidArbitrary((ct: SparseArrayConstraints) => sparseArray(nat(), ct), { + genericHelper.isValidArbitrary((ct: SparseArrayConstraints | undefined) => sparseArray(nat(), ct), { seedGenerator: fc.option(validSparseArrayConstraints(), { nil: undefined }), isEqual: (g1, g2) => { // WARNING: Very long loops in Jest when comparing two very large sparse arrays diff --git a/test/unit/check/arbitrary/UuidArbitrary.itest.spec.ts b/test/unit/check/arbitrary/UuidArbitrary.itest.spec.ts index a640eeec953..64cfeeb3233 100644 --- a/test/unit/check/arbitrary/UuidArbitrary.itest.spec.ts +++ b/test/unit/check/arbitrary/UuidArbitrary.itest.spec.ts @@ -11,7 +11,7 @@ describe('UuidArbitrary', () => { }); describe('uuidV', () => { genericHelper.isValidArbitrary((constraint: 1 | 2 | 3 | 4 | 5) => uuidV(constraint), { - seedGenerator: fc.constantFrom(1, 2, 3, 4, 5), + seedGenerator: fc.constantFrom(...([1, 2, 3, 4, 5] as const)), isValidValue: (g: string, constraint: 1 | 2 | 3 | 4 | 5) => /[0-9a-f]{8}-[0-9a-f]{4}-[12345][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/.test(g) && g[14] === String(constraint), diff --git a/test/unit/check/arbitrary/generic/GenericArbitraryHelper.ts b/test/unit/check/arbitrary/generic/GenericArbitraryHelper.ts index 8ccdf7aedc3..c916d51b696 100644 --- a/test/unit/check/arbitrary/generic/GenericArbitraryHelper.ts +++ b/test/unit/check/arbitrary/generic/GenericArbitraryHelper.ts @@ -145,19 +145,19 @@ export const isValidArbitrary = function ( }, parameters?: fc.Parameters ): void { - const seedGenerator = settings.seedGenerator || fc.constant(undefined); + const seedGenerator = settings.seedGenerator || fc.constant((undefined as unknown) as U); const biasedSeedGenerator = fc.tuple(fc.option(fc.integer(2, 100), { freq: 2 }), seedGenerator); const biasedArbitraryBuilder = ([biasedFactor, u]: [number | null, U]) => { return biasedFactor != null ? arbitraryBuilder(u).withBias(biasedFactor) : arbitraryBuilder(u); }; const biasedIsValidValue = (g: T, [_biasedFactor, u]: [number | null, U]) => { - return settings.isValidValue(g, u); + return settings.isValidValue(g, u!); }; - const assertEquality = (v1: T, v2: T, [, seed]: [number, U]) => { + const assertEquality = (v1: T, v2: T, [, seed]: [number | null, U]) => { if (settings.isEqual) { - if (!settings.isEqual(v1, v2, seed)) { + if (!settings.isEqual(v1, v2, seed!)) { throw new Error(`Expect: ${fc.stringify(v1)} to be equal to ${fc.stringify(v2)}`); } } else expect(v1).toStrictEqual(v2); @@ -167,7 +167,7 @@ export const isValidArbitrary = function ( if (settings.isStrictlySmallerValue != null) { const isStrictlySmallerValue = settings.isStrictlySmallerValue; const biasedIsStrictlySmallerValue = (g1: T, g2: T, [_biasedFactor, u]: [number | null, U]) => { - return isStrictlySmallerValue(g1, g2, u); + return isStrictlySmallerValue(g1, g2, u!); }; testShrinkPathStrictlyDecreasing( biasedSeedGenerator, diff --git a/test/unit/check/runner/reporter/RunExecution.spec.ts b/test/unit/check/runner/reporter/RunExecution.spec.ts index 60814a5afc6..00665648809 100644 --- a/test/unit/check/runner/reporter/RunExecution.spec.ts +++ b/test/unit/check/runner/reporter/RunExecution.spec.ts @@ -30,7 +30,7 @@ describe('RunExecution', () => { } // Assert the value const lastFailure = failuresDesc[failuresDesc.length - 1]; - const details = run.toRunDetails(seed, '', 42, 10000, QualifiedParameters.read({})); + const details = run.toRunDetails(seed, '', 10000, QualifiedParameters.read({})); expect(details.failed).toBe(true); expect(details.interrupted).toBe(false); expect(details.counterexamplePath).not.toBe(null); @@ -64,7 +64,7 @@ describe('RunExecution', () => { run.fail(42, failureId, 'Failed'); } // Assert the value - expect(run.toRunDetails(seed, '', 42, 10000, QualifiedParameters.read({})).counterexamplePath).toEqual( + expect(run.toRunDetails(seed, '', 10000, QualifiedParameters.read({})).counterexamplePath).toEqual( path.join(':') ); }) @@ -89,7 +89,7 @@ describe('RunExecution', () => { joinedPath[offsetPath.length - 1] += addedPath[0]; // Assert the value expect( - run.toRunDetails(seed, offsetPath.join(':'), 42, 10000, QualifiedParameters.read({})).counterexamplePath + run.toRunDetails(seed, offsetPath.join(':'), 10000, QualifiedParameters.read({})).counterexamplePath ).toEqual(joinedPath.join(':')); } ) @@ -123,13 +123,7 @@ describe('RunExecution', () => { break; } } - const details = run.toRunDetails( - 0, - '', - executionStatuses.length + 1, - executionStatuses.length + 1, - QualifiedParameters.read({}) - ); + const details = run.toRunDetails(0, '', executionStatuses.length + 1, QualifiedParameters.read({})); let currentExecutionTrees = details.executionSummary; for (let idx = 0, idxInTrees = 0; idx !== executionStatuses.length; ++idx, ++idxInTrees) { // Ordered like execution: same value and status diff --git a/tsconfig.json b/tsconfig.json index e5ae74c36d5..20e530faa93 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,19 @@ { "compilerOptions": { - "incremental": true, "declaration": true, - "sourceMap": true, - "alwaysStrict": true, - "noImplicitAny": true, - "noImplicitThis": true, + "importHelpers": false, + "incremental": true, + "noFallthroughCasesInSwitch": true, "noUnusedLocals": true, - "removeComments": false, "preserveConstEnums": true, - "strictNullChecks": true, + "removeComments": false, + "sourceMap": true, + "strict": true, "stripInternal": true, - "downlevelIteration": true, - "importHelpers": false, + "lib": ["es2017", "es2019.Symbol"], "module": "commonjs", "target": "es2017", - "lib": ["es2017", "es2019.Symbol"], - "outDir": "lib/" + "outDir": "lib/", }, "include": [ "src/**/*"