[gnome-characters/bilelmoussaoui/gtk4: 29/76] CI: introduce a eslint job




commit 88be480500b885c5d5b06af5411eeae3eb38c305
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]