/*
 * Copyright (C) Sapphirecode - All Rights Reserved
 * This file is part of SCode-Eslint-Config which is released under BSD-3-Clause.
 * See file 'LICENSE' for full license details.
 * Created by Timo Hocker <timo@scode.ovh>, March 2020
 */

module.exports = {

  globals: {},

  parser: '@typescript-eslint/parser',

  extends: [
    '@scode/eslint-config-es6',
    'plugin:@typescript-eslint/eslint-recommended',
    'plugin:@typescript-eslint/recommended'
  ],

  plugins: [
    '@typescript-eslint'
  ],

  parserOptions: {
    sourceType: 'module',
    parser: 'babel-eslint'
  },

  settings: {
    'import/parsers': {
      '@typescript-eslint/parser': ['.ts', '.tsx']
    }
  },

  rules: {
    '@typescript-eslint/camelcase': 'off',
    '@typescript-eslint/naming-convention': ['error',
      { selector: 'default', format: ['snake_case'] },
      { selector: 'memberLike', modifiers: ['private'], format: ['snake_case'], leadingUnderscore: 'require' },
      { selector: 'method', format: ['snake_case'], leadingUnderscore: 'forbid' },
      { selector: 'function', format: ['snake_case'], leadingUnderscore: 'forbid' },
      { selector: 'typeLike', format: ['PascalCase'] }
    ],
    'id-match': ['error', '^([a-z][a-z0-9_]*|[A-Z][a-zA-Z]*)$', { onlyDeclarations: true }]
  }
}