# eslint-plugin-wjs **Repository Path**: wjs0509/eslint-plugin-wjs ## Basic Information - **Project Name**: eslint-plugin-wjs - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-21 - **Last Updated**: 2023-12-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # eslint-plugin-wjs eslint-plugin-wjs 是基于公司定义的规范中能被eslint检查的条款生成的一份公共的eslint配置,方便不同的项目之间引用。 ## 1. 安装 ```bash npm install eslint-plugin-wjs --D or yarn add eslint-plugin-wjs --D ``` ## 2. 使用 ### 2.1 前置依赖项 本插件依赖以下npm库: | 库名称 | 推荐版本 | 说明 | |----|----|----| | [eslint](https://www.npmjs.com/package/eslint) | ^6.8.0 | - | | [eslint-plugin-simple-import-sort](https://www.npmjs.com/package/eslint-plugin-simple-import-sort) | ^10.0.0 | 这个主要是规范import语句的,涉及到import合并和排序,这个插件可以自动格式化 | | [eslint-plugin-vue](https://www.npmjs.com/package/eslint-plugin-vue) | ^6.2.2 | vue官方推荐的eslint插件,本插件在官方插件基础上做了一些定制化配置 | **说明:** 本插件库是一个eslint配置集合,虽然依赖于上面的库但不严格要求使用推荐版本,使用者可以自由更新依赖库的版本,自行处理好各版本之间的兼容性即可。 ### 2.2 使用指引 本插件和其他的eslint插件的使用并没有不同,直接在`.eslintrc.js`中继承即可: ```js module.exports = { root: true, env: { node: true }, extends: [ 'plugin:vue/recommended', 'eslint:recommended', 'plugin:wjs/vue2-recommended' ], parserOptions: { parser: 'babel-eslint' }, ignorePatterns: ["src/**/*.min.js"] } ``` 当前版本下只包含了一个 `vue2-recommended` 一个配置集合,如果后续有 `typescript-recommended`、`vue3-recommended` 的集合引入方式也类似,在 `.eslintrc.js` 的 `extends` 添加 `plugin:wjs/typescript-recommended` 和 `plugin:wjs/vue3-recommended` 即可。 ## 3. 配置集说明 ### 3.1 vue2-recommended + *generator-star-spacing*:off + *array-bracket-spacing*:[error, "never"] + *array-element-newline*: [error, "consistent"], //数字内容换行的时候报错并修复; + *array-callback-return*: error, //数组的form/every/filter/find/findIndex/reduce/reduceRight/some/sort没有return的时候报错; + *block-scoped-var*: error, //变量在定义块的外部使用时,规则会生成警告 + *complexity*: [error, 30], //循环复杂度测量程序源代码中线性独立路径的数量 + *for-direction*: error, //无限循环代码报错 + *func-call-spacing*: [error, "never"], //调用的方法前边不允许有空格并修复 + *func-name-matching*: [error, "never"], //函数名称与它们所分配的变量或属性的名称相匹配 + *eqeqeq*: [error, "smart"], //运算规则符号===/!==校验 + *lines-between-class-members*: [error, "always"], //同一个class方法中间空行 + *max-depth*: [error, 4], //最深的层级,其他可以另写方法 + *max-lines*: [error, 5000], // **主要是限于老版本改造量大所以放的比较宽,新建项目引入的时候建议覆盖为500** + *max-params*: [error, 4], //单个方法的入参数虽多4个 + *max-statements-per-line*: [error, { "max": 2 }], //每行允许有几个方法 + *no-bitwise*: error, //运算符检查'||',error'|' + *no-else-return*: error, //if有return else不需要使用并且自动修复 + *no-empty*: error, //方法块里边没有执行其他语句 + *no-empty-function*: error, //空方法报错 + *no-lonely-if*: error, //如果一个if陈述是该else块中唯一的陈述,那么使用一个else if表格通常会更清晰 + *no-mixed-spaces-and-tabs*: error, //不允许使用混合空格和制表符进行缩进 + *no-multiple-empty-lines*: [error, { "max": 1, "maxEOF": 1 }], //允许文件结尾处强制执行最大数量的连续空1行并且自动修复 + *no-nested-ternary*: error, //规则不允许嵌套的三元表达式 + *no-template-curly-in-string*: error, //它会在发现一个包含模板文字 place holder(${something})的字符串时发出警告 + *no-trailing-spaces*: error, //不允许在行尾添加尾随空白git对比差异产生冲突,自动修复 + *no-unreachable*: error, //不允许可达代码后return,throw,continue,和break语句 + *no-useless-concat*: error, //标记2个文字的连接,当它们可以合并成一个文字时 + *no-var*: error, //阻止var使用或鼓励改为使用const或let,并且自动修复 + *require-await*: error, //警告不具有await表达式的异步函数 + *semi-spacing*: [error, { "before": false, "after": true }], //防止在表达式中使用分号之前的空格。 + *space-before-blocks*: [error, "always"], //blocks块必须至少有一个先前的空间 + *space-before-function-paren*: [error, "never"], //关键字与开始参数之间不允许有空格,匿名函数的关键字之后可能需要一个空格并且自动修复 + *spaced-comment*: [error, "always", { "block": { "balanced": true } }], //强制间距的一致性//或/* + *template-curly-spacing*: error, //模板文字内部空间的一致性 + *no-duplicate-imports*: [error, { "includeExports": true }], + *no-self-compare*: warn, + *no-unmodified-loop-condition*: warn, + *no-use-before-define*: [error, "nofunc"], + *default-case*: error, + *curly*: error, + *default-param-last*: error, + *no-caller*: warn, + *no-invalid-this*: warn, + *no-return-assign*: [error, "always"], + *no-shadow*: error, + *no-unneeded-ternary*: warn, + *no-useless-return*: warn, + *prefer-const*: warn, + *prefer-object-spread*: warn, + *dot-notation*: error, + *no-eval*: error, + *prefer-template*: warn, + *no-new-func*: error, + *no-param-reassign*: warn, + *arrow-body-style*: [error, "as-needed"], + *simple-import-sort/imports*: error, + *indent*: ["error", 2, { "SwitchCase": 1 }], + *vue/require-default-prop*: off, + *vue/html-closing-bracket-newline*: [error, { "singleline": "never", "multiline": "never" }], + *vue/attributes-order*: [error, { "order": [ "DEFINITION", "LIST_RENDERING", "CONDITIONALS", "RENDER_MODIFIERS", "GLOBAL", ["UNIQUE", "SLOT"], "TWO_WAY_BINDING", "OTHER_DIRECTIVES", "OTHER_ATTR", "EVENTS", "CONTENT" ], "alphabetical": false }], + *vue/max-attributes-per-line*: [error, { "singleline": { "max": 3}, "multiline*: { "max": 1 } }], + *vue/html-indent*: [error, 2, { "attribute": 1, "baseIndent": 1,"closeBracket": 0, "alignAttributesVertically": true, "ignores": [] }], + *no-unused-vars*: [error, { "argsIgnorePattern": "_", "args":"after-used", "var": "all", "ignoreRestSiblings": true }]