bf5129adc1
In addition to the changes in this commit, gjs now restricts the use of the Format module and initFormat. We can't really replace those for translatable strings until xgettext gains support for template strings, so leave that bit out for now. The other notable change is that gjs now requires jsdoc comments. We can't plainly enable those options without a massive amount of work first, but let's see how requiring doc comments for new code goes. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1949>
258 lines
6.4 KiB
YAML
258 lines
6.4 KiB
YAML
---
|
|
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
|
|
# SPDX-FileCopyrightText: 2018 Claudio André <claudioandre.br@gmail.com>
|
|
env:
|
|
es6: true
|
|
es2020: true
|
|
extends: 'eslint:recommended'
|
|
plugins:
|
|
- jsdoc
|
|
rules:
|
|
array-bracket-newline:
|
|
- error
|
|
- consistent
|
|
array-bracket-spacing:
|
|
- error
|
|
- never
|
|
array-callback-return: error
|
|
arrow-parens:
|
|
- error
|
|
- as-needed
|
|
arrow-spacing: error
|
|
block-scoped-var: error
|
|
block-spacing: error
|
|
brace-style: error
|
|
# Waiting for this to have matured a bit in eslint
|
|
# camelcase:
|
|
# - error
|
|
# - properties: never
|
|
# allow: [^vfunc_, ^on_, _instance_init]
|
|
comma-dangle:
|
|
- error
|
|
- arrays: always-multiline
|
|
objects: always-multiline
|
|
functions: never
|
|
comma-spacing:
|
|
- error
|
|
- before: false
|
|
after: true
|
|
comma-style:
|
|
- error
|
|
- last
|
|
computed-property-spacing: error
|
|
curly:
|
|
- error
|
|
- multi-or-nest
|
|
- consistent
|
|
dot-location:
|
|
- error
|
|
- property
|
|
eol-last: error
|
|
eqeqeq: error
|
|
func-call-spacing: error
|
|
func-name-matching: error
|
|
func-style:
|
|
- error
|
|
- declaration
|
|
- allowArrowFunctions: true
|
|
indent:
|
|
- error
|
|
- 4
|
|
- ignoredNodes:
|
|
# Allow not indenting the body of GObject.registerClass, since in the
|
|
# future it's intended to be a decorator
|
|
- 'CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child'
|
|
# Allow dedenting chained member expressions
|
|
MemberExpression: 'off'
|
|
jsdoc/check-alignment: error
|
|
jsdoc/check-param-names: error
|
|
jsdoc/check-tag-names: error
|
|
jsdoc/check-types: error
|
|
jsdoc/implements-on-classes: error
|
|
jsdoc/newline-after-description: error
|
|
jsdoc/require-jsdoc: error
|
|
jsdoc/require-param: error
|
|
jsdoc/require-param-description: error
|
|
jsdoc/require-param-name: error
|
|
jsdoc/require-param-type: error
|
|
key-spacing:
|
|
- error
|
|
- beforeColon: false
|
|
afterColon: true
|
|
keyword-spacing:
|
|
- error
|
|
- before: true
|
|
after: true
|
|
linebreak-style:
|
|
- error
|
|
- unix
|
|
lines-between-class-members: error
|
|
max-nested-callbacks: error
|
|
max-statements-per-line: error
|
|
new-parens: error
|
|
no-array-constructor: error
|
|
no-await-in-loop: error
|
|
no-caller: error
|
|
no-constant-condition:
|
|
- error
|
|
- checkLoops: false
|
|
no-div-regex: error
|
|
no-empty:
|
|
- error
|
|
- allowEmptyCatch: true
|
|
no-extra-bind: error
|
|
no-extra-parens:
|
|
- error
|
|
- all
|
|
- conditionalAssign: false
|
|
nestedBinaryExpressions: false
|
|
returnAssign: false
|
|
no-implicit-coercion:
|
|
- error
|
|
- allow:
|
|
- '!!'
|
|
no-invalid-this: error
|
|
no-iterator: error
|
|
no-label-var: error
|
|
no-lonely-if: error
|
|
no-loop-func: error
|
|
no-nested-ternary: error
|
|
no-new-object: error
|
|
no-new-wrappers: error
|
|
no-octal-escape: error
|
|
no-proto: error
|
|
no-prototype-builtins: 'off'
|
|
no-restricted-globals: [error, window]
|
|
no-restricted-properties:
|
|
- error
|
|
- object: Lang
|
|
property: copyProperties
|
|
message: Use Object.assign()
|
|
- object: Lang
|
|
property: bind
|
|
message: Use arrow notation or Function.prototype.bind()
|
|
- object: Lang
|
|
property: Class
|
|
message: Use ES6 classes
|
|
no-restricted-syntax:
|
|
- error
|
|
- selector: >-
|
|
MethodDefinition[key.name="_init"] >
|
|
FunctionExpression[params.length=1] >
|
|
BlockStatement[body.length=1]
|
|
CallExpression[arguments.length=1][callee.object.type="Super"][callee.property.name="_init"] >
|
|
Identifier:first-child
|
|
message: _init() that only calls super._init() is unnecessary
|
|
- selector: >-
|
|
MethodDefinition[key.name="_init"] >
|
|
FunctionExpression[params.length=0] >
|
|
BlockStatement[body.length=1]
|
|
CallExpression[arguments.length=0][callee.object.type="Super"][callee.property.name="_init"]
|
|
message: _init() that only calls super._init() is unnecessary
|
|
- selector: BinaryExpression[operator="instanceof"][right.name="Array"]
|
|
message: Use Array.isArray()
|
|
no-return-assign: error
|
|
no-return-await: error
|
|
no-self-compare: error
|
|
no-shadow: error
|
|
no-shadow-restricted-names: error
|
|
no-spaced-func: error
|
|
no-tabs: error
|
|
no-template-curly-in-string: error
|
|
no-throw-literal: error
|
|
no-trailing-spaces: error
|
|
no-undef-init: error
|
|
no-unneeded-ternary: error
|
|
no-unused-expressions: error
|
|
no-unused-vars:
|
|
- error
|
|
# Vars use a suffix _ instead of a prefix because of file-scope private vars
|
|
- varsIgnorePattern: (^unused|_$)
|
|
argsIgnorePattern: ^(unused|_)
|
|
no-useless-call: error
|
|
no-useless-computed-key: error
|
|
no-useless-concat: error
|
|
no-useless-constructor: error
|
|
no-useless-rename: error
|
|
no-useless-return: error
|
|
no-whitespace-before-property: error
|
|
no-with: error
|
|
nonblock-statement-body-position:
|
|
- error
|
|
- below
|
|
object-curly-newline:
|
|
- error
|
|
- consistent: true
|
|
multiline: true
|
|
object-curly-spacing: error
|
|
object-shorthand: error
|
|
operator-assignment: error
|
|
operator-linebreak: error
|
|
padded-blocks:
|
|
- error
|
|
- never
|
|
# These may be a bit controversial, we can try them out and enable them later
|
|
# prefer-const: error
|
|
# prefer-destructuring: error
|
|
prefer-numeric-literals: error
|
|
prefer-promise-reject-errors: error
|
|
prefer-rest-params: error
|
|
prefer-spread: error
|
|
prefer-template: error
|
|
quotes:
|
|
- error
|
|
- single
|
|
- avoidEscape: true
|
|
require-await: error
|
|
rest-spread-spacing: error
|
|
semi:
|
|
- error
|
|
- always
|
|
semi-spacing:
|
|
- error
|
|
- before: false
|
|
after: true
|
|
semi-style: error
|
|
space-before-blocks: error
|
|
space-before-function-paren:
|
|
- error
|
|
- named: never
|
|
# for `function ()` and `async () =>`, preserve space around keywords
|
|
anonymous: always
|
|
asyncArrow: always
|
|
space-in-parens: error
|
|
space-infix-ops:
|
|
- error
|
|
- int32Hint: false
|
|
space-unary-ops: error
|
|
spaced-comment: error
|
|
switch-colon-spacing: error
|
|
symbol-description: error
|
|
template-curly-spacing: error
|
|
template-tag-spacing: error
|
|
unicode-bom: error
|
|
wrap-iife:
|
|
- error
|
|
- inside
|
|
yield-star-spacing: error
|
|
yoda: error
|
|
settings:
|
|
jsdoc:
|
|
mode: typescript
|
|
globals:
|
|
ARGV: readonly
|
|
Debugger: readonly
|
|
GIRepositoryGType: readonly
|
|
globalThis: readonly
|
|
imports: readonly
|
|
Intl: readonly
|
|
log: readonly
|
|
logError: readonly
|
|
print: readonly
|
|
printerr: readonly
|
|
window: readonly
|
|
TextEncoder: readonly
|
|
TextDecoder: readonly
|
|
parserOptions:
|
|
ecmaVersion: 2020
|