[gnome-characters/bilelmoussaoui/gtk4] CI: introduce a eslint job
- From: Bilal Elmoussaoui <bilelmoussaoui src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-characters/bilelmoussaoui/gtk4] CI: introduce a eslint job
- Date: Sun, 21 Nov 2021 14:41:23 +0000 (UTC)
commit 6e05205b78cafedaa5384f7694ea7d524ffd17a9
Author: Bilal Elmoussaoui <bil elmoussaoui gmail com>
Date: Sun Nov 21 15:41:04 2021 +0100
CI: introduce a eslint job
Based on the one used in gnome-sound-recorder
This to ensure new code follows some kind of guidline to make it easier for future contributors
.eslintrc.yml | 4 +
.gitlab-ci.yml | 13 +++
lint/eslintrc-characters.yml | 21 ++++
lint/eslintrc-gjs.yml | 229 +++++++++++++++++++++++++++++++++++++++++++
4 files changed, 267 insertions(+)
---
diff --git a/.eslintrc.yml b/.eslintrc.yml
new file mode 100644
index 0000000..77f0de7
--- /dev/null
+++ b/.eslintrc.yml
@@ -0,0 +1,4 @@
+extends:
+ - ./lint/eslintrc-gjs.yml
+ - ./lint/eslintrc-characters.yml
+
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index acce1ec..16b53a1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -30,3 +30,16 @@ fedora:latest:
script:
- meson _build .
- ninja -C _build
+
+eslint:
+ image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/33:2020-11-17.0
+
+ variables:
+ LINT_LOG: "eslint-report.txt"
+ script:
+ - eslint -o $LINT_LOG --no-color src || { cat $LINT_LOG; false; }
+ artifacts:
+ paths:
+ - ${LINT_LOG}
+ when: on_failure
+
diff --git a/lint/eslintrc-characters.yml b/lint/eslintrc-characters.yml
new file mode 100644
index 0000000..75fcd4b
--- /dev/null
+++ b/lint/eslintrc-characters.yml
@@ -0,0 +1,21 @@
+rules:
+ camelcase:
+ - error
+ - properties: never
+ allow: [^vfunc_, ^on_]
+ object-curly-spacing:
+ - error
+ - always
+ prefer-arrow-callback: error
+globals:
+ debug: readonly
+ info: readonly
+ warning: readonly
+ critical: readonly
+ error: readonly
+ pkg: readonly
+ _: readonly
+ C_: readonly
+ N_: readonly
+ ngettext: readonly
+
diff --git a/lint/eslintrc-gjs.yml b/lint/eslintrc-gjs.yml
new file mode 100644
index 0000000..d18d204
--- /dev/null
+++ b/lint/eslintrc-gjs.yml
@@ -0,0 +1,229 @@
+---
+env:
+ es6: true
+extends: 'eslint:recommended'
+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
+ - always-multiline
+ 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'
+ 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
+ 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-properties:
+ - error
+ - object: Lang
+ property: bind
+ message: Use arrow notation or Function.prototype.bind()
+ - object: Lang
+ property: Class
+ message: Use ES6 classes
+ - object: imports
+ property: mainloop
+ message: Use GLib main loops and timeouts
+ 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
+ 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
+ object-curly-spacing: error
+ object-shorthand: error
+ operator-assignment: error
+ operator-linebreak: error
+ # 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
+ valid-jsdoc:
+ - error
+ - requireReturn: false
+ wrap-iife:
+ - error
+ - inside
+ yield-star-spacing: error
+ yoda: error
+globals:
+ ARGV: readonly
+ Debugger: readonly
+ GIRepositoryGType: readonly
+ imports: readonly
+ Intl: readonly
+ log: readonly
+ logError: readonly
+ print: readonly
+ printerr: readonly
+ window: readonly
+parserOptions:
+ ecmaVersion: 2017
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]