department-of-veterans-affairs/vets-website

View on GitHub
.eslintrc.js

Summary

Maintainability
A
0 mins
Test Coverage
const babbleConfig = require('./babel.config.json');

const moduleResolverAlias =
  babbleConfig.plugins.find(plug => plug[0] === 'module-resolver')[1].alias ||
  {};
const aliasMap = Object.keys(moduleResolverAlias).map(alias => [
  alias,
  moduleResolverAlias[alias],
]);

module.exports = {
  // All rules should be disabled or they should produce errors. No warnings.
  parser: '@babel/eslint-parser',
  parserOptions: {
    ecmaVersion: 11,
    sourceType: 'module',
    requireConfigFile: false,
  },
  extends: [
    'plugin:@department-of-veterans-affairs/recommended',
    'plugin:you-dont-need-momentjs/recommended',
  ],
  globals: {
    __BUILDTYPE__: true,
    __API__: true,
    __MEGAMENU_CONFIG__: true,
    __REGISTRY__: true,
  },
  settings: {
    'import/resolver': {
      node: {
        moduleDirectory: ['node_modules', 'src/'],
      },
      alias: {
        map: aliasMap,
        extensions: ['.js', '.ts', '.tsx', '.jsx', '.json'],
      },
      'babel-module': {},
    },
  },
  rules: {
    /* || Eslint main rules || */
    camelcase: [2, { properties: 'always' }], // Override airbnb style.
    '@department-of-veterans-affairs/no-cross-app-imports': [
      'warn', // Warn for now, but after cleanup of imports, change to error
      {
        // Aliases copied from babel.config.json
        '~': './src',
        '@@vap-svc': './src/platform/user/profile/vap-svc',
        '@@profile': './src/applications/personalization/profile',
      },
    ],
    'deprecate/import': [
      'warn',
      {
        name: '@department-of-veterans-affairs/component-library/TextInput',
        use: '<va-text-input>',
      },
      {
        name:
          '@department-of-veterans-affairs/component-library/ExpandingGroup',
        use: 'a custom solution',
      },
      {
        name: '@department-of-veterans-affairs/component-library/Modal',
        use: '<va-modal>',
      },
      {
        name: '@department-of-veterans-affairs/component-library/FileInput',
        use: '<va-file-input>',
      },
    ],
    'jsx-a11y/control-has-associated-label': 1, // 2
    'jsx-a11y/click-events-have-key-events': 1, // 24
    'jsx-a11y/anchor-is-valid': 1, // 51
    'jsx-a11y/label-has-associated-control': [
      1,
      {
        controlComponents: ['select'],
      },
    ], // 40
    'jsx-a11y/no-static-element-interactions': 1, // 20
    'jsx-a11y/aria-role': [
      2,
      {
        allowedInvalidRoles: ['text'],
        ignoreNonDOM: true,
      },
    ],
  },
  overrides: [
    {
      files: ['*'],
      rules: {
        'cypress/unsafe-to-chain-command': 'warn',
        'no-plusplus': ['error', { allowForLoopAfterthoughts: true }],
        'you-dont-need-momentjs/no-dynamic-import-moment': 'warn',
        'you-dont-need-momentjs/no-import-moment': 'warn',
        'you-dont-need-momentjs/no-moment-constructor': 'warn',
        'you-dont-need-momentjs/no-require-moment': 'warn',
        'you-dont-need-momentjs/seconds': 'warn',
        'you-dont-need-momentjs/hours': 'warn',
        'you-dont-need-momentjs/date': 'warn',
        'you-dont-need-momentjs/day': 'warn',
        'you-dont-need-momentjs/day-of-year': 'warn',
        'you-dont-need-momentjs/week': 'warn',
        'you-dont-need-momentjs/iso-weeks-in-year': 'warn',
        'you-dont-need-momentjs/max': 'warn',
        'you-dont-need-momentjs/min': 'warn',
        'you-dont-need-momentjs/add': 'warn',
        'you-dont-need-momentjs/subtract': 'warn',
        'you-dont-need-momentjs/start-of': 'warn',
        'you-dont-need-momentjs/end-of': 'warn',
        'you-dont-need-momentjs/format': 'warn',
        'you-dont-need-momentjs/from-now': 'warn',
        'you-dont-need-momentjs/to': 'warn',
        'you-dont-need-momentjs/diff': 'warn',
        'you-dont-need-momentjs/days-in-month': 'warn',
        'you-dont-need-momentjs/is-before': 'warn',
        'you-dont-need-momentjs/is-same': 'warn',
        'you-dont-need-momentjs/is-after': 'warn',
        'you-dont-need-momentjs/is-between': 'warn',
        'you-dont-need-momentjs/is-leap-year': 'warn',
        'you-dont-need-momentjs/is-date': 'warn',
      },
    },
    {
      files: [
        '**/*.spec.jsx',
        '**/*.spec.js',
        'src/platform/testing/**/*.js',
        'src/platform/testing/**/*.jsx',
      ],
      rules: {
        'cypress/unsafe-to-chain-command': 'warn',
        'no-restricted-imports': ['error', 'raven'],
        'no-unused-expressions': 0,
        'react/no-find-dom-node': 0,
        '@department-of-veterans-affairs/axe-check-required': 0,
        '@department-of-veterans-affairs/cypress-viewport-deprecated': 0,
      },
    },
    {
      files: ['**/*.cypress.spec.js'],
      rules: {
        'cypress/unsafe-to-chain-command': 'warn',
        '@department-of-veterans-affairs/axe-check-required': 1,
        '@department-of-veterans-affairs/cypress-viewport-deprecated': 1,
      },
    },
  ],
};