settings:
  import/parsers:
    '@typescript-eslint/parser': ['.ts']
  import/resolver:
    typescript:
      project:
      - tsconfig.json
      - tabby-*/tsconfig.json
    node: true

env:
  browser: true
  es6: true
  node: true
  commonjs: true

overrides:
- files: '*.mjs'
  plugins:
    - 'import'
  parserOptions:
    sourceType: module
    ecmaVersion: latest

- files: '*.ts'
  parser: '@typescript-eslint/parser'
  parserOptions:
    project:
    - tsconfig.json
    - '*/tsconfig.typings.json'
  extends:
    - 'plugin:@typescript-eslint/all'
    - plugin:import/recommended
    - plugin:import/typescript
  plugins:
    - '@typescript-eslint'
    - import
  rules:
    '@typescript-eslint/semi':
    - error
    - never
    '@typescript-eslint/indent':
    - error
    - 4
    '@typescript-eslint/explicit-member-accessibility':
    - error
    - accessibility: no-public
      overrides:
        parameterProperties: explicit
    '@typescript-eslint/no-require-imports': off
    '@typescript-eslint/no-parameter-properties': off
    '@typescript-eslint/explicit-function-return-type': off
    '@typescript-eslint/no-explicit-any': off
    '@typescript-eslint/no-magic-numbers': off
    '@typescript-eslint/member-delimiter-style': off
    '@typescript-eslint/promise-function-async': off
    '@typescript-eslint/require-array-sort-compare': off
    '@typescript-eslint/no-floating-promises': off
    '@typescript-eslint/prefer-readonly': off
    '@typescript-eslint/require-await': off
    '@typescript-eslint/strict-boolean-expressions': off
    '@typescript-eslint/no-misused-promises':
    - error
    - checksVoidReturn: false
    '@typescript-eslint/typedef': off
    '@typescript-eslint/consistent-type-imports': off
    '@typescript-eslint/sort-type-union-intersection-members': off
    '@typescript-eslint/no-use-before-define':
    - error
    - classes: false
    no-duplicate-imports: error
    array-bracket-spacing:
    - error
    - never
    block-scoped-var: error
    brace-style: off
    '@typescript-eslint/brace-style':
    - error
    - 1tbs
    - allowSingleLine: true
    computed-property-spacing:
    - error
    - never
    comma-dangle: off
    '@typescript-eslint/comma-dangle':
    - error
    - always-multiline
    curly: error
    eol-last: error
    eqeqeq:
    - error
    - smart
    max-depth:
    - 1
    - 5
    max-statements:
    - 1
    - 80
    no-multiple-empty-lines: error
    no-mixed-spaces-and-tabs: error
    no-trailing-spaces: error
    '@typescript-eslint/no-unused-vars':
      - error
      - vars: all
        args: after-used
        argsIgnorePattern: ^_
    no-undef: error
    no-var: error
    object-curly-spacing: off
    '@typescript-eslint/object-curly-spacing':
    - error
    - always
    quote-props:
    - warn
    - as-needed
    - keywords: true
      numbers: true
    quotes: off
    '@typescript-eslint/quotes':
    - error
    - single
    - allowTemplateLiterals: true
    '@typescript-eslint/no-confusing-void-expression':
    - error
    - ignoreArrowShorthand: true
    '@typescript-eslint/no-non-null-assertion': off
    '@typescript-eslint/no-unnecessary-condition':
    - error
    - allowConstantLoopConditions: true
    '@typescript-eslint/restrict-template-expressions': off
    '@typescript-eslint/prefer-readonly-parameter-types': off
    '@typescript-eslint/no-unsafe-member-access': off
    '@typescript-eslint/no-unsafe-call': off
    '@typescript-eslint/no-unsafe-return': off
    '@typescript-eslint/no-unsafe-assignment': off
    '@typescript-eslint/naming-convention': off
    '@typescript-eslint/lines-between-class-members':
    - error
    - always
    - exceptAfterSingleLine: true
    '@typescript-eslint/dot-notation': off
    '@typescript-eslint/no-implicit-any-catch': off
    '@typescript-eslint/member-ordering': off
    '@typescript-eslint/no-var-requires': off
    '@typescript-eslint/no-unsafe-argument': off
    '@typescript-eslint/restrict-plus-operands': off
    '@typescript-eslint/space-infix-ops': off
    '@typescript-eslint/no-type-alias':
    - error
    - allowAliases: in-unions-and-intersections
      allowLiterals: always
      allowCallbacks: always
    '@typescript-eslint/sort-type-constituents': off
    '@typescript-eslint/parameter-properties':
    - error
    - prefer: parameter-property
    'import/no-named-as-default-member': off
    '@typescript-eslint/consistent-type-exports': off
    '@typescript-eslint/consistent-generic-constructors': off
    'keyword-spacing': off
    '@typescript-eslint/keyword-spacing': off
    '@typescript-eslint/class-methods-use-this': off
    '@typescript-eslint/lines-around-comment': off
    '@typescript-eslint/no-redundant-type-constituents': off # broken
