ZaiZai 11 months ago
parent
commit
c14e87ef5e
4 changed files with 235 additions and 0 deletions
  1. 8 0
      .editorconfig
  2. 10 0
      .eslintignore
  3. 195 0
      .eslintrc.cjs
  4. 22 0
      .gitignore

+ 8 - 0
.editorconfig

@@ -0,0 +1,8 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true

+ 10 - 0
.eslintignore

@@ -0,0 +1,10 @@
+node_modules
+dist
+public
+scripts
+zip
+assets
+styles
+README.md
+yarn.lock
+!.*

+ 195 - 0
.eslintrc.cjs

@@ -0,0 +1,195 @@
+/* eslint-env node */
+module.exports = {
+    root: true,
+    env: {
+        browser: true,
+        es2021: true,
+        node: true,
+    },
+    parser: "vue-eslint-parser",
+    extends: [
+        "plugin:vue/vue3-recommended",
+        'eslint:recommended',
+        '@unocss'
+    ],
+    parserOptions: {
+        ecmaVersion: "latest",
+        sourceType: "module",
+    },
+    globals: {},
+    plugins: ['vue'],
+    rules: {
+        // Common
+        'semi': ['error', 'never'],
+        'curly': 'off',
+        'quotes': ['error', 'single'],
+        'quote-props': ['error', 'consistent-as-needed'],
+        'no-console': 'off',
+
+        // best-practice
+        'array-callback-return': 'error',
+        'block-scoped-var': 'error',
+        'consistent-return': 'off',
+        'complexity': 'off',
+        'eqeqeq': ['error', 'smart'],
+        'no-alert': 'warn',
+        'no-case-declarations': 'error',
+        'no-multi-spaces': 'error',
+        'no-multi-str': 'error',
+        'no-with': 'error',
+        'no-void': 'error',
+        'no-useless-escape': 'off',
+        'vars-on-top': 'error',
+        'require-await': 'off',
+        'no-return-assign': 'off',
+        'operator-linebreak': ['error', 'before'],
+        'max-statements-per-line': ['error', {
+            max: 1
+        }],
+        'vue/singleline-html-element-content-newline': 'off',
+
+        'sort-imports': [
+            'error',
+            {
+                ignoreCase: false,
+                ignoreDeclarationSort: true,
+                ignoreMemberSort: false,
+                memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
+                allowSeparatedGroups: false,
+            },
+        ],
+
+        // typescript
+        'import/named': 'off',
+
+        // Override JS
+        'no-useless-constructor': 'off',
+        'indent': 'off',
+        'no-invalid-this': 'off',
+        'no-redeclare': 'off',
+        "no-use-before-define": 'off',
+        'brace-style': 'error',
+        'comma-dangle': ['error', 'always-multiline'],
+        'object-curly-spacing': ['error', 'always'],
+        'space-before-blocks': ['error', 'always'],
+        'space-before-function-paren': [
+            'error',
+            {
+                anonymous: 'always',
+                named: 'never',
+                asyncArrow: 'always',
+            },
+        ],
+        'space-infix-ops': 'error',
+        'keyword-spacing': ['error', {
+            before: true,
+            after: true
+        }],
+        'comma-spacing': ['error', {
+            before: false,
+            after: true
+        }],
+        'no-extra-parens': ['error', 'functions'],
+        'no-dupe-class-members': 'error',
+        'no-loss-of-precision': 'error',
+        'lines-between-class-members': ['error', 'always', {
+            exceptAfterSingleLine: true
+        }],
+
+        // vue
+        "vue/html-indent": ["error", 4],
+        'vue/max-attributes-per-line': 'off',
+        'vue/no-v-html': 'off',
+        'vue/require-prop-types': 'off',
+        'vue/require-default-prop': 'off',
+        'vue/multi-word-component-names': 'off',
+        'vue/prefer-import-from-vue': 'off',
+        'vue/no-v-text-v-html-on-component': 'off',
+        'vue/no-dupe-keys': 'off',
+
+        // reactivity transform
+        'vue/no-setup-props-destructure': 'off',
+
+        'vue/component-tags-order': ['error', {
+            order: ['template', 'script', 'style'],
+        }],
+        'vue/block-tag-newline': ['error', {
+            singleline: 'always',
+            multiline: 'always',
+        }],
+        'vue/component-name-in-template-casing': ['error', 'PascalCase' || 'kebab-case'],
+        'vue/component-options-name-casing': ['error', 'PascalCase'],
+        'vue/custom-event-name-casing': ['error', 'camelCase'],
+        'vue/define-macros-order': ['error', {
+            order: ['defineProps', 'defineEmits'],
+        }],
+        'vue/html-comment-content-spacing': ['error', 'always', {
+            exceptions: ['-'],
+        }],
+        'vue/no-restricted-v-bind': ['error', '/^v-/'],
+        'vue/no-useless-v-bind': 'error',
+        'vue/no-unused-refs': 'error',
+        'vue/padding-line-between-blocks': ['error', 'always'],
+        'vue/prefer-separate-static-class': 'error',
+
+        // extensions
+        'vue/array-bracket-spacing': ['error', 'never'],
+        'vue/arrow-spacing': ['error', {
+            before: true,
+            after: true
+        }],
+        'vue/block-spacing': ['error', 'always'],
+        'vue/brace-style': ['error', 'stroustrup', {
+            allowSingleLine: true
+        }],
+        'vue/comma-dangle': ['error', 'always-multiline'],
+        'vue/comma-spacing': ['error', {
+            before: false,
+            after: true
+        }],
+        'vue/comma-style': ['error', 'last'],
+        'vue/dot-location': ['error', 'property'],
+        'vue/dot-notation': ['error', {
+            allowKeywords: true
+        }],
+        'vue/eqeqeq': ['error', 'smart'],
+        // 'vue/func-call-spacing': ['off', 'never'],
+        'vue/key-spacing': ['error', {
+            beforeColon: false,
+            afterColon: true
+        }],
+        'vue/keyword-spacing': ['error', {
+            before: true,
+            after: true
+        }],
+        'vue/no-constant-condition': 'warn',
+        'vue/no-empty-pattern': 'error',
+        'vue/no-extra-parens': ['error', 'functions'],
+        'vue/no-irregular-whitespace': 'error',
+        'vue/no-loss-of-precision': 'error',
+        'vue/no-restricted-syntax': ['error', 'DebuggerStatement', 'LabeledStatement', 'WithStatement'],
+        'vue/no-sparse-arrays': 'error',
+        'vue/object-curly-newline': ['error', {
+            multiline: true,
+            consistent: true
+        }],
+        'vue/object-curly-spacing': ['error', 'always'],
+        'vue/object-property-newline': ['error', {
+            allowMultiplePropertiesPerLine: true
+        }],
+        'vue/object-shorthand': ['error', 'always', {
+            ignoreConstructors: false,
+            avoidQuotes: true,
+        }],
+        'vue/operator-linebreak': ['error', 'before'],
+        'vue/prefer-template': 'error',
+        'vue/quote-props': ['error', 'consistent-as-needed'],
+        'vue/space-in-parens': ['error', 'never'],
+        'vue/space-infix-ops': 'error',
+        'vue/space-unary-ops': ['error', {
+            words: true,
+            nonwords: false
+        }],
+        'vue/template-curly-spacing': 'error',
+    },
+};

+ 22 - 0
.gitignore

@@ -0,0 +1,22 @@
+.DS_Store
+node_modules
+dist
+zip
+
+# local env files
+.env.local
+.env.*.local
+
+# log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw*