Skip to content

Commit 2622727

Browse files
authored
Upgrade ESLint to v9 (#334)
* Upgrade to Eslint 9 * Fix new linting errors * Adjust configs * Use tseslint.config helper * Update eslint.config.mjs * Update turbo.json * Enable @typescript-eslint/no-unsafe-return * Enable @typescript-eslint/unbound-method * Enable @typescript-eslint/no-base-to-string * Enable @typescript-eslint/no-unsafe-argument * Enable @typescript-eslint/no-unsafe-assignment * Enable @typescript-eslint/no-unsafe-call * Enable @typescript-eslint/no-unsafe-enum-comparison * Enable @typescript-eslint/no-unsafe-member-access * Enable @typescript-eslint/only-throw-error * Enable @typescript-eslint/prefer-promise-reject-errors * Enable @typescript-eslint/restrict-plus-operands * Enable @typescript-eslint/restrict-template-expressions * Update index.ts * Add changeset * Try disabling new rules again for CI Despite it working locally... 😭 * Revert "Try disabling new rules again for CI" This reverts commit 88bab9e. * Fix @typescript-eslint/no-unused-vars * Update tsconfig.json * Build before lint in CI * Update tsconfig.json * Simplify script
1 parent 7aad1b6 commit 2622727

40 files changed

+2407
-502
lines changed

.changeset/rich-pans-cough.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
'@codama/nodes-from-anchor': patch
3+
'@codama/renderers-js-umi': patch
4+
'@codama/dynamic-parsers': patch
5+
'@codama/dynamic-codecs': patch
6+
'@codama/renderers-rust': patch
7+
'@codama/visitors-core': patch
8+
'@codama/renderers-js': patch
9+
'@codama/visitors': patch
10+
'@codama/errors': patch
11+
---
12+
13+
Bump dependencies

.eslintrc.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

.github/workflows/main.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ jobs:
3232
- name: Install dependencies
3333
run: pnpm install --frozen-lockfile
3434

35+
- name: Compile JS and types
36+
run: pnpm run build
37+
3538
- name: Check linting
3639
run: pnpm run lint
3740

eslint.config.mjs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import solanaConfig from '@solana/eslint-config-solana';
2+
import tseslint from 'typescript-eslint';
3+
4+
export default tseslint.config([
5+
{
6+
files: ['**/*.ts', '**/*.(c|m)?js'],
7+
ignores: ['**/dist/**', '**/e2e/**'],
8+
extends: [solanaConfig],
9+
},
10+
{
11+
files: ['packages/nodes/**', 'packages/node-types/**'],
12+
rules: {
13+
'sort-keys-fix/sort-keys-fix': 'off',
14+
'typescript-sort-keys/interface': 'off',
15+
},
16+
},
17+
]);

package.json

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@
1515
"@changesets/changelog-github": "^0.5.0",
1616
"@changesets/cli": "^2.27.10",
1717
"@codama/internals": "workspace:*",
18-
"@solana/eslint-config-solana": "^3.0.3",
18+
"@eslint/js": "^9.13.0",
19+
"@eslint/json": "^0.8.0",
20+
"@solana/eslint-config-solana": "^4.0.0",
1921
"@solana/prettier-config-solana": "0.0.5",
20-
"@types/node": "^20",
21-
"@typescript-eslint/eslint-plugin": "^6.21.0",
22-
"@typescript-eslint/parser": "^6.0.0",
22+
"@types/node": "^22",
23+
"@typescript-eslint/eslint-plugin": "^8.16.0",
24+
"@typescript-eslint/parser": "^8.16.0",
2325
"agadoo": "^3.0.0",
24-
"eslint": "^8.57.1",
25-
"eslint-config-turbo": "^2.3.3",
26-
"eslint-plugin-simple-import-sort": "^10.0.0",
26+
"eslint": "^9.15.0",
27+
"eslint-plugin-simple-import-sort": "^12.1.1",
2728
"eslint-plugin-sort-keys-fix": "^1.1.2",
2829
"eslint-plugin-typescript-sort-keys": "^3.3.0",
2930
"happy-dom": "^15.11.7",

packages/dynamic-codecs/src/codecs.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ export function getNodeCodecVisitor(
249249
return transformCodec(
250250
getMapCodec(key, value, { size }),
251251
(value: object) => new Map(Object.entries(value)),
252-
(map: Map<unknown, unknown>): object => Object.fromEntries(map),
252+
(map: Map<unknown, unknown>) => Object.fromEntries(map) as object,
253253
) as Codec<unknown>;
254254
},
255255
visitNumberType(node) {

packages/dynamic-codecs/src/values.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export function getValueNodeVisitor(
6767
const value = visit(entry.value, this);
6868
return [key, value];
6969
}),
70-
);
70+
) as unknown;
7171
},
7272
visitNoneValue() {
7373
return { __option: 'None' };

packages/dynamic-parsers/src/parsers.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ export function parseInstruction(
5353
): ParsedInstruction | undefined {
5454
const parsedData = parseInstructionData(root, instruction.data);
5555
if (!parsedData) return undefined;
56-
instruction.accounts;
5756
const instructionNode = getLastNodeFromPath(parsedData.path);
5857
const accounts: ParsedInstructionAccounts = instructionNode.accounts.flatMap((account, index) => {
5958
const accountMeta = instruction.accounts[index];

packages/errors/src/cli.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ program
3232
.argument('[encodedContext]', 'encoded context to interpolate into the error message', encodedContext => {
3333
try {
3434
return decodeEncodedContext(encodedContext);
35-
} catch (e) {
35+
} catch {
3636
throw new InvalidArgumentError('Encoded context malformed');
3737
}
3838
})
39-
.action((code: number, context) => {
39+
.action((code: number, context: object | undefined) => {
4040
const message = getHumanReadableErrorMessage(code as CodamaErrorCode, context);
4141
console.log(`
4242
${

packages/errors/src/codes.ts

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,46 +25,45 @@
2525
* - `_MISSING`: Some required input is missing. E.g. `TRANSACTION_FEE_PAYER_MISSING`.
2626
* - `_UNIMPLEMENTED`: Some required component is not available in the environment. E.g. `SUBTLE_CRYPTO_VERIFY_FUNCTION_UNIMPLEMENTED`.
2727
*/
28-
export const CODAMA_ERROR__UNRECOGNIZED_NODE_KIND = 1 as const;
29-
export const CODAMA_ERROR__UNEXPECTED_NODE_KIND = 2 as const;
30-
export const CODAMA_ERROR__UNEXPECTED_NESTED_NODE_KIND = 3 as const;
31-
export const CODAMA_ERROR__LINKED_NODE_NOT_FOUND = 4 as const;
32-
export const CODAMA_ERROR__NODE_FILESYSTEM_FUNCTION_UNAVAILABLE = 5 as const;
33-
export const CODAMA_ERROR__VERSION_MISMATCH = 6 as const;
34-
export const CODAMA_ERROR__UNRECOGNIZED_NUMBER_FORMAT = 7 as const;
35-
export const CODAMA_ERROR__UNRECOGNIZED_BYTES_ENCODING = 8 as const;
36-
export const CODAMA_ERROR__ENUM_VARIANT_NOT_FOUND = 9 as const;
37-
export const CODAMA_ERROR__DISCRIMINATOR_FIELD_NOT_FOUND = 10 as const;
38-
export const CODAMA_ERROR__DISCRIMINATOR_FIELD_HAS_NO_DEFAULT_VALUE = 11 as const;
28+
export const CODAMA_ERROR__UNRECOGNIZED_NODE_KIND = 1;
29+
export const CODAMA_ERROR__UNEXPECTED_NODE_KIND = 2;
30+
export const CODAMA_ERROR__UNEXPECTED_NESTED_NODE_KIND = 3;
31+
export const CODAMA_ERROR__LINKED_NODE_NOT_FOUND = 4;
32+
export const CODAMA_ERROR__NODE_FILESYSTEM_FUNCTION_UNAVAILABLE = 5;
33+
export const CODAMA_ERROR__VERSION_MISMATCH = 6;
34+
export const CODAMA_ERROR__UNRECOGNIZED_NUMBER_FORMAT = 7;
35+
export const CODAMA_ERROR__UNRECOGNIZED_BYTES_ENCODING = 8;
36+
export const CODAMA_ERROR__ENUM_VARIANT_NOT_FOUND = 9;
37+
export const CODAMA_ERROR__DISCRIMINATOR_FIELD_NOT_FOUND = 10;
38+
export const CODAMA_ERROR__DISCRIMINATOR_FIELD_HAS_NO_DEFAULT_VALUE = 11;
3939

4040
// Visitors-related errors.
4141
// Reserve error codes in the range [1200000-1200999].
42-
export const CODAMA_ERROR__VISITORS__CANNOT_ADD_DUPLICATED_PDA_NAMES = 1200000 as const;
43-
export const CODAMA_ERROR__VISITORS__INVALID_PDA_SEED_VALUES = 1200001 as const;
44-
export const CODAMA_ERROR__VISITORS__CYCLIC_DEPENDENCY_DETECTED_WHEN_RESOLVING_INSTRUCTION_DEFAULT_VALUES =
45-
1200002 as const;
46-
export const CODAMA_ERROR__VISITORS__CANNOT_USE_OPTIONAL_ACCOUNT_AS_PDA_SEED_VALUE = 1200003 as const;
47-
export const CODAMA_ERROR__VISITORS__INVALID_INSTRUCTION_DEFAULT_VALUE_DEPENDENCY = 1200004 as const;
48-
export const CODAMA_ERROR__VISITORS__ACCOUNT_FIELD_NOT_FOUND = 1200005 as const;
49-
export const CODAMA_ERROR__VISITORS__INVALID_NUMBER_WRAPPER = 1200006 as const;
50-
export const CODAMA_ERROR__VISITORS__CANNOT_EXTEND_MISSING_VISIT_FUNCTION = 1200007 as const;
51-
export const CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE = 1200008 as const;
52-
export const CODAMA_ERROR__VISITORS__INSTRUCTION_ENUM_ARGUMENT_NOT_FOUND = 1200009 as const;
53-
export const CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES = 1200010 as const;
54-
export const CODAMA_ERROR__VISITORS__RENDER_MAP_KEY_NOT_FOUND = 1200011 as const;
55-
export const CODAMA_ERROR__VISITORS__CANNOT_REMOVE_LAST_PATH_IN_NODE_STACK = 1200012 as const;
42+
export const CODAMA_ERROR__VISITORS__CANNOT_ADD_DUPLICATED_PDA_NAMES = 1200000;
43+
export const CODAMA_ERROR__VISITORS__INVALID_PDA_SEED_VALUES = 1200001;
44+
export const CODAMA_ERROR__VISITORS__CYCLIC_DEPENDENCY_DETECTED_WHEN_RESOLVING_INSTRUCTION_DEFAULT_VALUES = 1200002;
45+
export const CODAMA_ERROR__VISITORS__CANNOT_USE_OPTIONAL_ACCOUNT_AS_PDA_SEED_VALUE = 1200003;
46+
export const CODAMA_ERROR__VISITORS__INVALID_INSTRUCTION_DEFAULT_VALUE_DEPENDENCY = 1200004;
47+
export const CODAMA_ERROR__VISITORS__ACCOUNT_FIELD_NOT_FOUND = 1200005;
48+
export const CODAMA_ERROR__VISITORS__INVALID_NUMBER_WRAPPER = 1200006;
49+
export const CODAMA_ERROR__VISITORS__CANNOT_EXTEND_MISSING_VISIT_FUNCTION = 1200007;
50+
export const CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE = 1200008;
51+
export const CODAMA_ERROR__VISITORS__INSTRUCTION_ENUM_ARGUMENT_NOT_FOUND = 1200009;
52+
export const CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES = 1200010;
53+
export const CODAMA_ERROR__VISITORS__RENDER_MAP_KEY_NOT_FOUND = 1200011;
54+
export const CODAMA_ERROR__VISITORS__CANNOT_REMOVE_LAST_PATH_IN_NODE_STACK = 1200012;
5655

5756
// Anchor-related errors.
5857
// Reserve error codes in the range [2100000-2100999].
59-
export const CODAMA_ERROR__ANCHOR__UNRECOGNIZED_IDL_TYPE = 2100000 as const;
60-
export const CODAMA_ERROR__ANCHOR__ACCOUNT_TYPE_MISSING = 2100001 as const;
61-
export const CODAMA_ERROR__ANCHOR__ARGUMENT_TYPE_MISSING = 2100002 as const;
62-
export const CODAMA_ERROR__ANCHOR__TYPE_PATH_MISSING = 2100003 as const;
63-
export const CODAMA_ERROR__ANCHOR__SEED_KIND_UNIMPLEMENTED = 2100004 as const;
58+
export const CODAMA_ERROR__ANCHOR__UNRECOGNIZED_IDL_TYPE = 2100000;
59+
export const CODAMA_ERROR__ANCHOR__ACCOUNT_TYPE_MISSING = 2100001;
60+
export const CODAMA_ERROR__ANCHOR__ARGUMENT_TYPE_MISSING = 2100002;
61+
export const CODAMA_ERROR__ANCHOR__TYPE_PATH_MISSING = 2100003;
62+
export const CODAMA_ERROR__ANCHOR__SEED_KIND_UNIMPLEMENTED = 2100004;
6463

6564
// Renderers-related errors.
6665
// Reserve error codes in the range [2800000-2800999].
67-
export const CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE = 2800000 as const;
66+
export const CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE = 2800000;
6867

6968
/**
7069
* A union of every Codama error code

0 commit comments

Comments
 (0)