summaryrefslogtreecommitdiff
path: root/.eslintrc.yml
blob: 7f45fd912a91cd531c04a989854f3a2d357d7116 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
extends:
  - plugin:@gitlab/default
  - plugin:@gitlab/i18n
  - plugin:no-jquery/slim
  - plugin:no-jquery/deprecated-3.4
  - ./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
  # 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
  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: ~/**
          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.'
overrides:
  - files:
    - '{,ee/,jh/}spec/frontend*/**/*'
    rules:
      '@gitlab/require-i18n-strings': off
      '@gitlab/no-runtime-template-compiler': 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.'
  - 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
  - files:
      - '*.graphql'
    plugins:
      - '@graphql-eslint'
    parserOptions:
      parser: '@graphql-eslint/eslint-plugin'
      operations:
        - '{,ee/,jh/}app/**/*.graphql'
        # You can run `bundle exec rake gitlab:graphql:schema:dump` and then uncomment this line
        # schema: './tmp/tests/graphql/gitlab_schema.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