mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-29 18:22:53 +00:00
# Pull Request Template ## Description This PR adds new eslint rules to the code base. **Error rules** | Rule name | Type | Files updated | | ----------------- | --- | - | | `vue/block-order` | error | ✅ | | `vue/component-name-in-template-casing` | error | ✅ | | `vue/component-options-name-casing` | error | ✅ | | `vue/custom-event-name-casing` | error | ✅ | | `vue/define-emits-declaration` | error | ✅ | | `vue/no-unused-properties` | error | ✅ | | `vue/define-macros-order` | error | ✅ | | `vue/define-props-declaration` | error | ✅ | | `vue/match-component-import-name` | error | ✅ | | `vue/next-tick-style` | error | ✅ | | `vue/no-bare-strings-in-template` | error | ✅ | | `vue/no-empty-component-block` | error | ✅ | | `vue/no-multiple-objects-in-class` | error | ✅ | | `vue/no-required-prop-with-default` | error | ✅ | | `vue/no-static-inline-styles` | error | ✅ | | `vue/no-template-target-blank` | error | ✅ | | `vue/no-this-in-before-route-enter` | error | ✅ | | `vue/no-undef-components` | error | ✅ | | `vue/no-unused-emit-declarations` | error | ✅ | | `vue/no-unused-refs` | error | ✅ | | `vue/no-use-v-else-with-v-for` | error | ✅ | | `vue/no-useless-v-bind` | error | ✅ | | `vue/no-v-text` | error | ✅ | | `vue/padding-line-between-blocks` | error | ✅ | | ~`vue/prefer-prop-type-boolean-first`~ | ~error~ | ❌ (removed this rule, cause a bug in displaying custom attributes) | | `vue/prefer-separate-static-class` | error | ✅ | | `vue/prefer-true-attribute-shorthand` | error | ✅ | | `vue/require-explicit-slots` | error | ✅ | | `vue/require-macro-variable-name` | error | ✅ | **Warn rules** | Rule name | Type | Files updated | | ---- | ------------- | ------------- | | `vue/no-root-v-if` | warn | ❎ | Fixes https://linear.app/chatwoot/issue/CW-3492/vue-eslint-rules ## Type of change - [x] New feature (non-breaking change which adds functionality) ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Fayaz Ahmed <fayazara@gmail.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> Co-authored-by: Shivam Mishra <scm.mymail@gmail.com> Co-authored-by: Pranav <pranav@chatwoot.com>
229 lines
5.1 KiB
JavaScript
229 lines
5.1 KiB
JavaScript
module.exports = {
|
|
extends: [
|
|
'airbnb-base/legacy',
|
|
'prettier',
|
|
'plugin:vue/recommended',
|
|
'plugin:storybook/recommended',
|
|
'plugin:cypress/recommended',
|
|
],
|
|
parserOptions: {
|
|
parser: '@babel/eslint-parser',
|
|
ecmaVersion: 2020,
|
|
sourceType: 'module',
|
|
},
|
|
plugins: ['html', 'prettier', 'babel'],
|
|
rules: {
|
|
'prettier/prettier': ['error'],
|
|
camelcase: 'off',
|
|
'no-param-reassign': 'off',
|
|
'import/no-extraneous-dependencies': 'off',
|
|
'import/prefer-default-export': 'off',
|
|
'import/no-named-as-default': 'off',
|
|
'jsx-a11y/no-static-element-interactions': 'off',
|
|
'jsx-a11y/click-events-have-key-events': 'off',
|
|
'jsx-a11y/label-has-associated-control': 'off',
|
|
'jsx-a11y/label-has-for': 'off',
|
|
'jsx-a11y/anchor-is-valid': 'off',
|
|
'import/no-unresolved': 'off',
|
|
'vue/html-indent': 'off',
|
|
'vue/multi-word-component-names': 'off',
|
|
'vue/next-tick-style': ['error', 'callback'],
|
|
'vue/block-order': [
|
|
'error',
|
|
{
|
|
order: ['script', 'template', 'style'],
|
|
},
|
|
],
|
|
'vue/component-name-in-template-casing': [
|
|
'error',
|
|
'PascalCase',
|
|
{
|
|
registeredComponentsOnly: true,
|
|
},
|
|
],
|
|
'vue/component-options-name-casing': ['error', 'PascalCase'],
|
|
'vue/custom-event-name-casing': ['error', 'camelCase'],
|
|
'vue/define-emits-declaration': ['error'],
|
|
'vue/define-macros-order': [
|
|
'error',
|
|
{
|
|
order: ['defineProps', 'defineEmits'],
|
|
defineExposeLast: false,
|
|
},
|
|
],
|
|
'vue/define-props-declaration': ['error', 'runtime'],
|
|
'vue/match-component-import-name': ['error'],
|
|
'vue/no-bare-strings-in-template': [
|
|
'error',
|
|
{
|
|
allowlist: [
|
|
'(',
|
|
')',
|
|
',',
|
|
'.',
|
|
'&',
|
|
'+',
|
|
'-',
|
|
'=',
|
|
'*',
|
|
'/',
|
|
'#',
|
|
'%',
|
|
'!',
|
|
'?',
|
|
':',
|
|
'[',
|
|
']',
|
|
'{',
|
|
'}',
|
|
'<',
|
|
'>',
|
|
'⌘',
|
|
'📄',
|
|
'🎉',
|
|
'💬',
|
|
'👥',
|
|
'📥',
|
|
'🔖',
|
|
'❌',
|
|
'✅',
|
|
'\u00b7',
|
|
'\u2022',
|
|
'\u2010',
|
|
'\u2013',
|
|
'\u2014',
|
|
'\u2212',
|
|
'|',
|
|
],
|
|
attributes: {
|
|
'/.+/': [
|
|
'title',
|
|
'aria-label',
|
|
'aria-placeholder',
|
|
'aria-roledescription',
|
|
'aria-valuetext',
|
|
],
|
|
input: ['placeholder'],
|
|
},
|
|
directives: ['v-text'],
|
|
},
|
|
],
|
|
'vue/no-empty-component-block': 'error',
|
|
'vue/no-multiple-objects-in-class': 'error',
|
|
'vue/no-root-v-if': 'warn',
|
|
'vue/no-static-inline-styles': [
|
|
'error',
|
|
{
|
|
allowBinding: false,
|
|
},
|
|
],
|
|
'vue/no-template-target-blank': [
|
|
'error',
|
|
{
|
|
allowReferrer: false,
|
|
enforceDynamicLinks: 'always',
|
|
},
|
|
],
|
|
'vue/no-required-prop-with-default': [
|
|
'error',
|
|
{
|
|
autofix: false,
|
|
},
|
|
],
|
|
'vue/no-this-in-before-route-enter': 'error',
|
|
'vue/no-undef-components': [
|
|
'error',
|
|
{
|
|
ignorePatterns: [
|
|
'^woot-',
|
|
'^fluent-',
|
|
'^multiselect',
|
|
'^router-link',
|
|
'^router-view',
|
|
'^ninja-keys',
|
|
'^FormulateForm',
|
|
'^FormulateInput',
|
|
'^highlightjs',
|
|
],
|
|
},
|
|
],
|
|
'vue/no-unused-emit-declarations': 'error',
|
|
'vue/no-unused-refs': 'error',
|
|
'vue/no-use-v-else-with-v-for': 'error',
|
|
'vue/prefer-true-attribute-shorthand': 'error',
|
|
'vue/no-useless-v-bind': [
|
|
'error',
|
|
{
|
|
ignoreIncludesComment: false,
|
|
ignoreStringEscape: false,
|
|
},
|
|
],
|
|
'vue/no-v-text': 'error',
|
|
'vue/padding-line-between-blocks': ['error', 'always'],
|
|
'vue/prefer-separate-static-class': 'error',
|
|
'vue/require-explicit-slots': 'error',
|
|
'vue/require-macro-variable-name': [
|
|
'error',
|
|
{
|
|
defineProps: 'props',
|
|
defineEmits: 'emit',
|
|
defineSlots: 'slots',
|
|
useSlots: 'slots',
|
|
useAttrs: 'attrs',
|
|
},
|
|
],
|
|
'vue/no-unused-properties': [
|
|
'error',
|
|
{
|
|
groups: ['props'],
|
|
deepData: false,
|
|
ignorePublicMembers: false,
|
|
unreferencedOptions: [],
|
|
},
|
|
],
|
|
'vue/max-attributes-per-line': [
|
|
'error',
|
|
{
|
|
singleline: {
|
|
max: 20,
|
|
},
|
|
multiline: {
|
|
max: 1,
|
|
},
|
|
},
|
|
],
|
|
'vue/html-self-closing': [
|
|
'error',
|
|
{
|
|
html: {
|
|
void: 'always',
|
|
normal: 'always',
|
|
component: 'always',
|
|
},
|
|
svg: 'always',
|
|
math: 'always',
|
|
},
|
|
],
|
|
'vue/no-v-html': 'off',
|
|
'vue/component-definition-name-casing': 'off',
|
|
'vue/singleline-html-element-content-newline': 'off',
|
|
'import/extensions': ['off'],
|
|
'no-console': 'error',
|
|
},
|
|
settings: {
|
|
'import/resolver': {
|
|
webpack: {
|
|
config: 'config/webpack/resolve.js',
|
|
},
|
|
},
|
|
},
|
|
env: {
|
|
browser: true,
|
|
node: true,
|
|
},
|
|
globals: {
|
|
bus: true,
|
|
vi: true,
|
|
},
|
|
};
|