From e22efd74ec22976fa241588c52413dcb10c1fa00 Mon Sep 17 00:00:00 2001 From: Matt Kantor Date: Wed, 29 Jan 2025 16:47:08 -0500 Subject: [PATCH 1/2] Tighten up tsconfig --- tsconfig.base.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tsconfig.base.json b/tsconfig.base.json index 3ebf5e8..c18188c 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -4,7 +4,9 @@ "exactOptionalPropertyTypes": true, "module": "node16", "noUncheckedIndexedAccess": true, + "noUncheckedSideEffectImports": true, "rootDir": "./src", + "skipLibCheck": true, "strict": true, "target": "es2023", "verbatimModuleSyntax": true From c2f23d6f1b170dd481110e379024d347706bf45a Mon Sep 17 00:00:00 2001 From: Matt Kantor Date: Wed, 29 Jan 2025 16:50:48 -0500 Subject: [PATCH 2/2] Enable noPropertyAccessFromIndexSignature in tsconfig --- src/end-to-end.test.ts | 18 +++++++++--------- src/language/compiling/semantics.test.ts | 2 +- src/language/runtime/evaluator.test.ts | 4 ++-- src/language/semantics/prelude.ts | 8 ++++---- tsconfig.base.json | 1 + 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/end-to-end.test.ts b/src/end-to-end.test.ts index 3f8477f..16c7541 100644 --- a/src/end-to-end.test.ts +++ b/src/end-to-end.test.ts @@ -41,7 +41,7 @@ testCases(endToEnd, code => code)('end-to-end tests', [ assert.fail(result.value.message) } assert(typeof result.value === 'object') - assert.deepEqual(result.value.b, 'A') + assert.deepEqual(result.value['b'], 'A') }, ], [ @@ -143,8 +143,8 @@ testCases(endToEnd, code => code)('end-to-end tests', [ assert.fail(output.value.message) } assert(typeof output.value === 'object') - assert.deepEqual(output.value.tag, 'some') - assert.deepEqual(typeof output.value.value, 'string') + assert.deepEqual(output.value['tag'], 'some') + assert.deepEqual(typeof output.value['value'], 'string') }, ], [ @@ -166,8 +166,8 @@ testCases(endToEnd, code => code)('end-to-end tests', [ assert.fail(output.value.message) } assert(typeof output.value === 'object') - assert.deepEqual(output.value.tag, 'some') - assert.deepEqual(typeof output.value.value, 'string') + assert.deepEqual(output.value['tag'], 'some') + assert.deepEqual(typeof output.value['value'], 'string') }, ], [ @@ -189,8 +189,8 @@ testCases(endToEnd, code => code)('end-to-end tests', [ assert.fail(output.value.message) } assert(typeof output.value === 'object') - assert.deepEqual(output.value.tag, 'some') - assert.deepEqual(typeof output.value.value, 'string') + assert.deepEqual(output.value['tag'], 'some') + assert.deepEqual(typeof output.value['value'], 'string') }, ], [ @@ -202,8 +202,8 @@ testCases(endToEnd, code => code)('end-to-end tests', [ assert.fail(output.value.message) } assert(typeof output.value === 'object') - assert.deepEqual(output.value.tag, 'some') - assert.deepEqual(typeof output.value.value, 'string') + assert.deepEqual(output.value['tag'], 'some') + assert.deepEqual(typeof output.value['value'], 'string') }, ], [`:natural_number.add(1)(1)`, either.makeRight('2')], diff --git a/src/language/compiling/semantics.test.ts b/src/language/compiling/semantics.test.ts index 6f4c86d..2b37e21 100644 --- a/src/language/compiling/semantics.test.ts +++ b/src/language/compiling/semantics.test.ts @@ -587,7 +587,7 @@ elaborationSuite('@runtime', [ { 0: '@runtime', 1: { 0: '@lookup', query: { 0: 'identity' } } }, either.makeRight( withPhantomData()( - makeObjectNode({ 0: '@runtime', function: prelude.identity! }), + makeObjectNode({ 0: '@runtime', function: prelude['identity']! }), ), ), ], diff --git a/src/language/runtime/evaluator.test.ts b/src/language/runtime/evaluator.test.ts index 80357ab..009ae82 100644 --- a/src/language/runtime/evaluator.test.ts +++ b/src/language/runtime/evaluator.test.ts @@ -53,8 +53,8 @@ testCases(evaluate, input => `evaluating \`${JSON.stringify(input)}\``)( output => { assert(!either.isLeft(output)) assert(typeof output.value === 'object') - assert(output.value.tag === 'some') - assert(typeof output.value.value === 'string') + assert(output.value['tag'] === 'some') + assert(typeof output.value['value'] === 'string') }, ], [ diff --git a/src/language/semantics/prelude.ts b/src/language/semantics/prelude.ts index e245f6d..deb697d 100644 --- a/src/language/semantics/prelude.ts +++ b/src/language/semantics/prelude.ts @@ -580,7 +580,7 @@ type TaggedNode = ObjectNode & { } const nodeIsTagged = (node: SemanticGraph): node is TaggedNode => isObjectNode(node) && - node.tag !== undefined && - (typeof node.tag === 'string' || - (isSemanticGraph(node.tag) && typeof node.tag === 'string')) && - node.value !== undefined + node['tag'] !== undefined && + (typeof node['tag'] === 'string' || + (isSemanticGraph(node['tag']) && typeof node['tag'] === 'string')) && + node['value'] !== undefined diff --git a/tsconfig.base.json b/tsconfig.base.json index c18188c..9bd1dd9 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -3,6 +3,7 @@ "composite": true, "exactOptionalPropertyTypes": true, "module": "node16", + "noPropertyAccessFromIndexSignature": true, "noUncheckedIndexedAccess": true, "noUncheckedSideEffectImports": true, "rootDir": "./src",