From 7c47e240936b8706a888a46149ca399219caef03 Mon Sep 17 00:00:00 2001 From: silverwind Date: Sat, 7 Nov 2020 16:11:09 +0100 Subject: [PATCH] Add Vue linting (#13447) * Add Vue linting Turns out the .vue files were not linted at all, so I added that as well as re-indented the file to 2-space and fixed all reasonable issues that cam up except one case of a unintended side effect for which I have no idea how to fix it, so the rule was disabled. * misc tweaks * update lockfile * use overrides to include .vue files * treat warnings as errors on lint-frontend * also treat stylelint warnings as errors * use equal sign syntax Co-authored-by: Lauris BH Co-authored-by: Lunny Xiao --- .eslintrc | 11 +- Makefile | 4 +- package-lock.json | 63 +++++++ package.json | 1 + web_src/js/components/ActivityHeatmap.vue | 128 +++++++------ web_src/js/components/ActivityTopAuthors.vue | 179 +++++++++---------- web_src/js/index.js | 150 +++++++--------- 7 files changed, 294 insertions(+), 242 deletions(-) diff --git a/.eslintrc b/.eslintrc index 7b8376e8ea5..398d1a610f3 100644 --- a/.eslintrc +++ b/.eslintrc @@ -11,6 +11,10 @@ parserOptions: plugins: - eslint-plugin-unicorn - eslint-plugin-import + - eslint-plugin-vue + +extends: + - plugin:vue/recommended env: es2021: true @@ -24,7 +28,7 @@ globals: u2fApi: false overrides: - - files: ["web_src/**/*.js"] + - files: ["web_src/**/*.js", "web_src/**/*.vue"] env: browser: true jquery: true @@ -387,6 +391,11 @@ rules: use-isnan: [2] valid-typeof: [2, {requireStringLiterals: true}] vars-on-top: [0] + vue/attributes-order: [0] + vue/component-definition-name-casing: [0] + vue/html-closing-bracket-spacing: [0] + vue/max-attributes-per-line: [0] + vue/one-component-per-file: [0] wrap-iife: [2, inside] wrap-regex: [0] yield-star-spacing: [2, after] diff --git a/Makefile b/Makefile index 301a38f5073..a4b7c736383 100644 --- a/Makefile +++ b/Makefile @@ -312,8 +312,8 @@ lint: lint-frontend lint-backend .PHONY: lint-frontend lint-frontend: node_modules - npx eslint web_src/js build webpack.config.js - npx stylelint web_src/less + npx eslint --max-warnings=0 web_src/js build webpack.config.js + npx stylelint --max-warnings=0 web_src/less .PHONY: lint-backend lint-backend: golangci-lint revive vet diff --git a/package-lock.json b/package-lock.json index 05f47a153d1..0433c68fe44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5195,6 +5195,26 @@ } } }, + "eslint-plugin-vue": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.1.0.tgz", + "integrity": "sha512-9dW7kj8/d2IkDdgNpvIhJdJ3XzU3x4PThXYMzWt49taktYnGyrTY6/bXCYZ/VtQKU9kXPntPrZ41+8Pw0Nxblg==", + "dev": true, + "requires": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^7.3.2", + "vue-eslint-parser": "^7.1.1" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -14005,6 +14025,49 @@ "v-tooltip": "^2.0.0-rc.32" } }, + "vue-eslint-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.1.tgz", + "integrity": "sha512-8FdXi0gieEwh1IprIBafpiJWcApwrU+l2FEj8c1HtHFdNXMd0+2jUSjBVmcQYohf/E72irwAXEXLga6TQcB3FA==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.0.1", + "lodash": "^4.17.15" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + } + } + }, "vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", diff --git a/package.json b/package.json index 4d0a0552971..3c6013daf65 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "eslint": "7.11.0", "eslint-plugin-import": "2.22.1", "eslint-plugin-unicorn": "23.0.0", + "eslint-plugin-vue": "7.1.0", "stylelint": "13.7.2", "stylelint-config-standard": "20.0.0", "svgo": "1.3.2", diff --git a/web_src/js/components/ActivityHeatmap.vue b/web_src/js/components/ActivityHeatmap.vue index ec241b64fae..cfa28252442 100644 --- a/web_src/js/components/ActivityHeatmap.vue +++ b/web_src/js/components/ActivityHeatmap.vue @@ -1,79 +1,71 @@ - - - +