extends: - plugin:@gitlab/default - plugin:@gitlab/i18n - plugin:no-jquery/slim - plugin:no-jquery/deprecated-3.4 - plugin:no-unsanitized/DOM - ./tooling/eslint-config/conditionally_ignore.js globals: __webpack_public_path__: true gl: false gon: false localStorage: false IS_EE: false plugins: - no-jquery settings: import/resolver: webpack: config: './config/webpack.config.js' rules: import/no-commonjs: error import/no-default-export: off no-underscore-dangle: - error - allow: - __ - _links import/no-unresolved: - error - ignore: # In FOSS, these import paths are rewritten using # NormalModuleReplacementPlugin, which import/no-unresolved doesn't # consider. See # https://gitlab.com/gitlab-org/gitlab/-/merge_requests/89831. - '^(ee|jh)_component/' # Disabled for now, to make the airbnb-base 12.1.0 -> 13.1.0 update smoother no-else-return: - error - allowElseIf: true lines-between-class-members: off # all offenses of no-jquery/no-animate-toggle are false positives ( $toast.show() ) no-jquery/no-animate-toggle: off no-jquery/no-event-shorthand: off no-jquery/no-serialize: error promise/always-return: off promise/no-callback-in-promise: off '@gitlab/no-global-event-off': error '@gitlab/vue-no-new-non-primitive-in-template': - error - allowNames: - 'class(es)?$' - '^style$' - '^to$' - '^$' - '^variables$' - 'attrs?$' no-param-reassign: - error - props: true ignorePropertyModificationsFor: - acc - accumulator - el - element - state ignorePropertyModificationsForRegex: - '^draft' import/order: - error - groups: - builtin - external - internal - parent - sibling - index pathGroups: - pattern: '@sentry/browser' group: external - pattern: ~/** group: internal - pattern: emojis/** group: internal - pattern: '{ee_,jh_,}empty_states/**' group: internal - pattern: '{ee_,jh_,}icons/**' group: internal - pattern: '{ee_,jh_,}images/**' group: internal - pattern: vendor/** group: internal - pattern: shared_queries/** group: internal - pattern: '{ee_,}spec/**' group: internal - pattern: '{ee_,jh_,}jest/**' group: internal - pattern: '{ee_,jh_,any_}else_ce/**' group: internal - pattern: ee/** group: internal - pattern: '{ee_,jh_,}component/**' group: internal - pattern: jh_else_ee/** group: internal - pattern: jh/** group: internal - pattern: '{test_,}helpers/**' group: internal - pattern: test_fixtures/** group: internal alphabetize: order: ignore 'no-restricted-syntax': - error - selector: ImportSpecifier[imported.name='GlSkeletonLoading'] message: 'Migrate to GlSkeletonLoader, or import GlDeprecatedSkeletonLoading.' - selector: ImportSpecifier[imported.name='GlSafeHtmlDirective'] message: 'Use directive at ~/vue_shared/directives/safe_html.js instead.' no-restricted-imports: - error - paths: - name: mousetrap message: 'Import { Mousetrap } from ~/lib/mousetrap instead.' # See https://gitlab.com/gitlab-org/gitlab/-/issues/360551 vue/multi-word-component-names: off unicorn/prefer-dom-node-dataset: - error no-unsanitized/method: - error - escape: methods: 'sanitize' no-unsanitized/property: - error - escape: methods: 'sanitize' overrides: - files: - '{,ee/,jh/}spec/frontend*/**/*' rules: '@gitlab/require-i18n-strings': off '@gitlab/no-runtime-template-compiler': off 'require-await': error 'import/no-dynamic-require': off 'no-import-assign': off 'no-restricted-syntax': - error - selector: CallExpression[callee.object.name=/(wrapper|vm)/][callee.property.name="setData"] message: 'Avoid using "setData" on VTU wrapper' - selector: MemberExpression[object.type!='ThisExpression'][property.type='Identifier'][property.name='$nextTick'] message: 'Using $nextTick from a component instance is discouraged. Import nextTick directly from the Vue package.' - selector: Identifier[name='setImmediate'] message: 'Prefer explicit waitForPromises (or equivalent), or jest.runAllTimers (or equivalent) to vague setImmediate calls.' - selector: ImportSpecifier[imported.name='GlSkeletonLoading'] message: 'Migrate to GlSkeletonLoader, or import GlDeprecatedSkeletonLoading.' - selector: CallExpression[arguments.length=1][arguments.0.type='Literal'] CallExpression[callee.property.name='toBe'] CallExpression[callee.property.name='attributes'][arguments.length=1][arguments.0.value='disabled'] message: Avoid asserting disabled attribute exact value, because Vue.js 2 and Vue.js 3 renders it differently. Use toBeDefined / toBeUndefined instead no-unsanitized/method: off no-unsanitized/property: off - files: - 'config/**/*' - 'scripts/**/*' - '*.config.js' - '*.config.*.js' - 'jest_resolver.js' - storybook/config/*.js rules: '@gitlab/require-i18n-strings': off import/no-extraneous-dependencies: off import/no-commonjs: off import/no-nodejs-modules: off filenames/match-regex: off no-console: off - files: - '*.stories.js' rules: filenames/match-regex: off '@gitlab/require-i18n-strings': off - files: - '*.graphql' plugins: - '@graphql-eslint' parserOptions: parser: '@graphql-eslint/eslint-plugin' operations: '{,ee/,jh/}app/**/*.graphql' schema: './tmp/tests/graphql/gitlab_schema_apollo.graphql' rules: filenames/match-regex: off spaced-comment: off # TODO: We need a way to include this rule + support ee_else_ce fragments #'@graphql-eslint/unique-fragment-name': error # TODO: Uncomment these rules when then `schema` is available #'@graphql-eslint/fragments-on-composite-type': error #'@graphql-eslint/known-argument-names': error #'@graphql-eslint/known-type-names': error '@graphql-eslint/no-anonymous-operations': error '@graphql-eslint/unique-operation-name': error '@graphql-eslint/require-id-when-available': error '@graphql-eslint/no-unused-variables': error '@graphql-eslint/no-unused-fragments': error '@graphql-eslint/no-duplicate-fields': error - files: - '{,ee/}spec/contracts/consumer/**/*' rules: '@gitlab/require-i18n-strings': off