Skip to content

Commit

Permalink
Update to latest eslint major version
Browse files Browse the repository at this point in the history
  • Loading branch information
garrettjstevens committed Nov 18, 2024
1 parent 99da59f commit b9c9bab
Show file tree
Hide file tree
Showing 16 changed files with 396 additions and 285 deletions.
5 changes: 0 additions & 5 deletions .eslintignore

This file was deleted.

147 changes: 0 additions & 147 deletions .eslintrc.js

This file was deleted.

4 changes: 1 addition & 3 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@ jobs:
run: yarn build
working-directory: packages/apollo-shared
- name: Lint codebase
run:
yarn eslint --report-unused-disable-directives --max-warnings 0 --ext
.js,.ts,.jsx,.tsx .
run: yarn eslint --max-warnings 0
- name: Run Jest tests
run: yarn test
- name: Get latest JBrowse
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
run: yarn build
working-directory: packages/apollo-shared
- name: Lint codebase
run: yarn eslint --ext .js,.ts,.jsx,.tsx .
run: yarn eslint
docker:
if: ${{ github.ref == 'refs/heads/main' }}
uses: ./.github/workflows/docker.yml
Expand Down
2 changes: 1 addition & 1 deletion .husky/pre-commit.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* JS/TS files ignored since ESLint provides formatting feedback for those
*/

// eslint-disable-next-line @typescript-eslint/no-var-requires, no-undef
// eslint-disable-next-line @typescript-eslint/no-require-imports
const spawn = require('cross-spawn')

function main() {
Expand Down
127 changes: 127 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
import js from '@eslint/js'
import pluginCypress from 'eslint-plugin-cypress/flat'
import pluginImport from 'eslint-plugin-import'
import pluginJSXA11y from 'eslint-plugin-jsx-a11y'
import pluginReact from 'eslint-plugin-react'
import pluginReactHooks from 'eslint-plugin-react-hooks'
import pluginTSDoc from 'eslint-plugin-tsdoc'
import pluginUnicorn from 'eslint-plugin-unicorn'
import globals from 'globals'
import tseslint from 'typescript-eslint'

/** @type {import('eslint').Linter.Config[]} */
export default [
{
ignores: [
'.pnp.*',
'.yarn/',
'**/bin/',
'**/build/',
'**/coverage/',
'**/dist/',
'packages/website/.docusaurus/',
'packages/jbrowse-plugin-apollo/.jbrowse/',
],
},
js.configs.recommended,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
pluginUnicorn.configs['flat/recommended'],
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
pluginImport.flatConfigs.typescript,
...tseslint.configs.strictTypeChecked,
...tseslint.configs.stylisticTypeChecked,
pluginReact.configs.flat.recommended,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
pluginJSXA11y.flatConfigs.recommended,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
pluginCypress.configs.recommended,
{
languageOptions: {
globals: { ...globals.browser, ...globals.node },
parserOptions: {
projectService: {
allowDefaultProject: ['packages/jbrowse-plugin-apollo/*.js'],
},
defaultProject: 'tsconfig.json',
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
tsconfigRootDir: import.meta.dirname,
},
},
settings: { react: { version: '18.2.0' } },
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
plugins: { tsdoc: pluginTSDoc, import: pluginImport },
rules: {
// eslint built-in rules (override recommended)
curly: 'warn',
'new-cap': [
'error',
{
newIsCap: true,
newIsCapExceptions: [],
capIsNew: false,
capIsNewExceptions: [
'Immutable.Map',
'Immutable.Set',
'Immutable.List',
],
},
],
'no-console': ['warn', { allow: ['error', 'warn', 'debug'] }],
'no-else-return': ['error', { allowElseIf: false }],
'no-extra-semi': 'off',
'object-shorthand': 'warn',
'prefer-destructuring': 'warn',
'prefer-template': 'warn',
radix: 'error',
// @typescript-eslint/eslint-plugin rules (override recommended)
'@typescript-eslint/no-extraneous-class': [
'error',
{ allowWithDecorator: true },
],
'@typescript-eslint/no-unused-vars': [
'warn',
{ argsIgnorePattern: '^_', ignoreRestSiblings: true },
],
'@typescript-eslint/restrict-template-expressions': [
'warn',
{ allowNumber: true },
],
'@typescript-eslint/return-await': 'error',
// eslint-plugin-import rules
'import/export': 'error',
'import/no-duplicates': 'warn',
'import/no-extraneous-dependencies': 'error',
'import/no-named-as-default': 'warn',
// eslint-plugin-tsdoc rules
'tsdoc/syntax': 'warn',
// eslint-plugin-unicorn rules (override recommended)
'unicorn/filename-case': 'off', // Doesn't match our file naming, maybe can be configured later
'unicorn/no-empty-file': 'off', // False positives
'unicorn/no-null': 'off', // A lot of null in React and other libraries
'unicorn/prefer-module': 'off', // Cypress and apollo-collaboration-server need this
'unicorn/prevent-abbreviations': 'off', // Doesn't guess a lot of abbreviations correctly
},
},
{
name: 'eslint-plugin-react-hooks/recommended',
files: [
'packages/jbrowse-plugin-apollo/src/**/*.{jsx,tsx}',
'packages/website/src/**/*.{jsx,tsx}',
],
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
plugins: { 'react-hooks': pluginReactHooks },
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
rules: { ...pluginReactHooks.configs.recommended.rules },
},
// Don't enforce tsdoc syntax in JS files
{
files: ['*.{c,m,}js', '**/*.{c,m,}js'],
rules: {
'tsdoc/syntax': 'off',
},
},
{
files: ['packages/apollo-cli/src/**/*.ts'],
rules: { '@typescript-eslint/no-deprecated': 'off' },
},
]
12 changes: 7 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"packages/*"
],
"scripts": {
"lint": "cross-env NODE_OPTIONS='--max-old-space-size=4096' yarn eslint --report-unused-disable-directives --max-warnings 0 --ext .js,.ts,.jsx,.tsx .",
"lint": "cross-env NODE_OPTIONS='--max-old-space-size=4096' yarn eslint --max-warnings 0",
"build:shared": "yarn workspace @apollo-annotation/shared run build",
"release": "tsx scripts/makeGitTag.ts",
"start:shared": "yarn workspace @apollo-annotation/shared run start",
Expand All @@ -17,24 +17,25 @@
"postinstall": "husky"
},
"devDependencies": {
"@eslint/js": "^9.14.0",
"@types/cross-spawn": "^6.0.6",
"@types/node": "^18.14.2",
"@types/semver": "^7",
"@types/yargs": "^17.0.32",
"@typescript-eslint/eslint-plugin": "^8.14.0",
"@typescript-eslint/parser": "^8.14.0",
"@yarnpkg/types": "^4.0.0",
"cross-env": "^7.0.3",
"cross-spawn": "^7.0.3",
"eslint": "^8.57.1",
"eslint": "9.14.0",
"eslint-import-resolver-typescript": "^3.6.3",
"eslint-plugin-cypress": "^4.1.0",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-hooks": "5.1.0-rc-4beb1fd8-20241118",
"eslint-plugin-tsdoc": "^0.3.0",
"eslint-plugin-unicorn": "^56.0.0",
"eslint-plugin-unicorn": "^50.0.0",
"globals": "^15.12.0",
"husky": "^9.0.11",
"lint-staged": "^15.2.2",
"npm-run-all": "^4.1.5",
Expand All @@ -44,6 +45,7 @@
"tslib": "^2.3.1",
"tsx": "^4.6.2",
"typescript": "^5.5.3",
"typescript-eslint": "^8.14.0",
"yargs": "^17.7.2"
},
"packageManager": "[email protected]"
Expand Down
6 changes: 3 additions & 3 deletions packages/apollo-cli/src/commands/feature/add-child.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ to retrive the parent ID of interest and to populate the child feature with attr
}
const res = await queryApollo(address, accessToken, 'refSeqs')
const refSeqs = (await res.json()) as object[]
const { refSeq } = parentFeature
const { refSeq, _id } = parentFeature
let assembly = ''
for (const x of refSeqs) {
if (x['_id' as keyof typeof x] === refSeq) {
Expand All @@ -131,7 +131,7 @@ to retrive the parent ID of interest and to populate the child feature with attr
const change: SerializedAddFeatureChange = {
typeName: 'AddFeatureChange',

changedIds: [parentFeature._id],
changedIds: [_id],
assembly,
addedFeature: {
_id: new ObjectId().toHexString(),
Expand All @@ -141,7 +141,7 @@ to retrive the parent ID of interest and to populate the child feature with attr
type,
},

parentFeatureId: parentFeature._id,
parentFeatureId: _id,
}
const url = new URL(localhostToAddress(`${address}/changes`))
const auth = {
Expand Down
Loading

0 comments on commit b9c9bab

Please sign in to comment.