Skip to content

Commit

Permalink
test: migrate to GJS' & GNOME Shell's ESLint configuration
Browse files Browse the repository at this point in the history
Use a top-level `.eslintrc.yml` file that includes GJS's ESLint
configuration (actually GNOME Shell's copy) with GNOME Shell's
configuration as an override.
  • Loading branch information
andyholmes committed Aug 2, 2023
1 parent e3a55c5 commit 21f21f9
Show file tree
Hide file tree
Showing 9 changed files with 314 additions and 302 deletions.
312 changes: 306 additions & 6 deletions .eslintrc.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,307 @@
# SPDX-License-Identifier: CC0-1.0
# SPDX-FileCopyrightText: No rights reserved
---
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
# SPDX-FileCopyrightText: 2018 Claudio André <[email protected]>
env:
es2021: 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/tag-lines:
- error
- any
- startLines: 1
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
- always
- exceptAfterSingleLine: true
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: imports
property: format
message: Use template strings
- object: pkg
property: initFormat
message: Use template strings
- 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
console: readonly
setTimeout: readonly
setInterval: readonly
clearTimeout: readonly
clearInterval: readonly
parserOptions:
ecmaVersion: 2022

overrides:
# GNOME Shell's `.eslintrc-shell.yml`
- files: src/**
rules:
camelcase:
- error
- properties: never
allow: [^vfunc_, ^on_]
consistent-return: error
eqeqeq:
- error
- smart
key-spacing:
- error
- mode: minimum
beforeColon: false
afterColon: true
prefer-arrow-callback: error
jsdoc/require-param-description: off
globals:
global: readonly
_: readonly
C_: readonly
N_: readonly
ngettext: readonly

- files: src/**
globals:
_: off
C_: off
N_: off
ngettext: off

extends:
- ./tests/lint/eslintrc-extra.yml
- ./tests/lint/eslintrc-gjs.yml
- ./tests/lint/eslintrc-shell.yml
4 changes: 2 additions & 2 deletions src/extension.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

/* exported init */

const { Gio } = imports.gi;
const {Gio} = imports.gi;

const ExtensionUtils = imports.misc.extensionUtils;
const ExtensionMeta = ExtensionUtils.getCurrentExtension();
Expand Down Expand Up @@ -57,7 +57,7 @@ class Extension {


/** */
function init(meta) {
function init() {
ExtensionUtils.initTranslations();

return new Extension();
Expand Down
2 changes: 1 addition & 1 deletion src/notification.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

/* exported patchNotificationSources, unpatchNotificationSources */

const { Gio, GLib, GObject, St } = imports.gi;
const {Gio, GLib, GObject, St} = imports.gi;

const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
Expand Down
4 changes: 2 additions & 2 deletions src/remote.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

/* exported Service, Device, DeviceState */

const { Gio, GLib, GObject } = imports.gi;
const {Gio, GLib, GObject} = imports.gi;

const APPLICATION_ID = 'ca.andyholmes.Valent';
const APPLICATION_PATH = '/ca/andyholmes/Valent';
Expand Down Expand Up @@ -233,7 +233,7 @@ var Service = GObject.registerClass({
this._deviceInitCallback.bind(this));
}

_onInterfacesRemoved(objectPath, interfaces) {
_onInterfacesRemoved(objectPath, _interfaces) {
const position = this._items.findIndex(
item => item.g_object_path === objectPath);

Expand Down
2 changes: 1 addition & 1 deletion src/session.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

/* exported enable, disable */

const { ScreenShield } = imports.ui.screenShield;
const {ScreenShield} = imports.ui.screenShield;

// Overridden methods
const _deactivate = ScreenShield.prototype.deactivate;
Expand Down
4 changes: 2 additions & 2 deletions src/status.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

/* exported Indicator */

const { Clutter, Gio, GLib, GObject, Pango, Shell, St } = imports.gi;
const {Clutter, Gio, GLib, GObject, Pango, Shell, St} = imports.gi;

const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
Expand Down Expand Up @@ -199,7 +199,7 @@ const DeviceMenuItem = GObject.registerClass({
this.add_child(this._label);
this.label_actor = this._label;

this._battery = new DeviceBattery({ visible: false });
this._battery = new DeviceBattery({visible: false});
this.add_child(this._battery);

this.bind_property('device', this._battery, 'device',
Expand Down
5 changes: 0 additions & 5 deletions tests/lint/eslintrc-extra.yml

This file was deleted.

Loading

0 comments on commit 21f21f9

Please sign in to comment.