Skip to content

Commit

Permalink
added eslint workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
sakithb committed Nov 19, 2023
1 parent ec79f5e commit 4867888
Show file tree
Hide file tree
Showing 12 changed files with 582 additions and 432 deletions.
280 changes: 19 additions & 261 deletions .eslintrc.yml
Original file line number Diff line number Diff line change
@@ -1,273 +1,31 @@
---
# 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
extends: # Imports upstream linting rules
- ./lint/eslintrc-gjs.yml
- ./lint/eslintrc-shell.yml
parserOptions:
sourceType: module
rules: # Override some of the upstream rules to match this codebase
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
- always
curly:
- error
- multi-or-nest
- consistent
dot-location:
- all
quotes:
- error
- double
object-curly-spacing:
- error
- property
eol-last: error
eqeqeq: error
func-call-spacing: error
func-name-matching: error
func-style:
- always
no-unused-vars:
- error
- declaration
- allowArrowFunctions: true
- vars: all
args: none
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
SwitchCase: 1
consistent-return: off
no-await-in-loop: off
15 changes: 15 additions & 0 deletions .github/workflows/linter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: Lint codebase

on:
pull_request:
branches: "**"
push:
branches: "**"

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Lint
run: ./debug.sh -l
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
*.compiled
*.zip
.vscode
builds
node_modules
pnpm-lock.yaml
builds
4 changes: 2 additions & 2 deletions .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
"indent_size": 4,
"semi": true,
"singleQuote": false,
"jsxSingleQuote": false,
"indent_style": "space",
"useTabs": false,
"printWidth": 150
"printWidth": 120,
"arrowParens": "always"
}

14 changes: 4 additions & 10 deletions dbus.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,10 @@ const ifacesXml = `

const nodeInfo = Gio.DBusNodeInfo.new_for_xml(ifacesXml);

export const createProxy = (
ifaceName,
busName,
objectPath,
flags = Gio.DBusProxyFlags.NONE
) => {
export const createProxy = (ifaceName, busName, objectPath, flags = Gio.DBusProxyFlags.NONE) => {
return new Promise((resolve, reject) => {
let ifaceInfo = nodeInfo.interfaces.find(
(iface) => iface.name == ifaceName
);
const ifaceInfo = nodeInfo.interfaces.find((iface) => iface.name === ifaceName);

if (ifaceInfo) {
Gio.DBusProxy.new(
Gio.DBus.session,
Expand All @@ -67,7 +61,7 @@ export const createProxy = (
null,
(source, result) => {
try {
let proxy = Gio.DBusProxy.new_finish(result);
const proxy = Gio.DBusProxy.new_finish(result);
resolve(proxy);
} catch (error) {
reject(error);
Expand Down
9 changes: 9 additions & 0 deletions debug.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ update_po_files() {
echo "Done."
}

lint() {
npx eslint -c .eslintrc.yml *.js
}

PARAMS=();

for i in $@
Expand All @@ -57,6 +61,7 @@ if [[ " ${PARAMS[*]} " =~ " -h" ]]; then
echo " -u Update extension source files";
echo " -d Debug extension";
echo " -t Update translation po files";
echo " -l Lint codebase";
exit;
fi

Expand All @@ -74,4 +79,8 @@ fi

if [[ " ${PARAMS[*]} " =~ " -t " ]]; then
update_po_files;
fi

if [[ " ${PARAMS[*]} " =~ " -l " ]]; then
lint;
fi
Loading

0 comments on commit 4867888

Please sign in to comment.