eslint$prettier 记录

发布时间 2023-11-01 11:30:02作者: 涼皮Herr
module.exports = {
  // eslint 配置
  eslintJSON: {
    root: true, // 当前配置为根配置,将不再从上级文件夹查找配置
    parserOptions: {
      parser: 'babel-eslint', // 采用 babel-eslint 作为语法解析器
      sourceType: 'module', // 指定来源的类型,有两种script或module
      ecmaVersion: 6 // 指定ECMAScript支持的版本,6为ES6
    },
    env: {
      browser: true, // 设置为所需检查的代码是在浏览器环境运行的
      es6: true // 设置所需检查代码为 es6 语法书写
    },
    extends: ['plugin:vue/recommended', 'eslint:recommended'], // 扩展使用 vue 检查规则和eslint推荐规则
    rules: {
      'vue/attribute-hyphenation': 0, // 忽略属性连字
      'vue/max-attributes-per-line': [2, { singleline: 10, multiline: { max: 1, allowFirstLine: false } }], // 每行最大属性
      'vue/singleline-html-element-content-newline': 'off', // 单行html元素内容在新的一行
      'vue/multiline-html-element-content-newline': 'off', // 多行html元素内容在新的一行
      'vue/html-closing-bracket-newline': 'off', // html右括号在新的一行
      'vue/no-v-html': 'off', // 不使用v-html
      'vue/html-self-closing': 0, // 忽略html标签自闭合
      'accessor-pairs': 2, // 应同时设置setter和getter
      'arrow-spacing': [2, { before: true, after: true }], // 箭头间距
      'vue/require-default-prop': 0, // 不检查默认属性
      'vue/require-prop-types': 0, // 不检查默认类型
      'block-spacing': [2, 'always'], // 块间距
      'brace-style': [2, '1tbs', { allowSingleLine: true }], // 大括号样式允许单行
      camelcase: [2, { properties: 'always' }], // 为属性强制执行驼峰命名
      'comma-dangle': [2, 'never'], // 逗号不使用悬挂
      'comma-spacing': [2, { before: false, after: true }], // 逗号间距
      'comma-style': [2, 'last'], // (默认)与数组元素,对象属性或变量声明在同一行之后和同一行需要逗号
      'constructor-super': 2,
      'consistent-this': [2, 'that'], // 强制this别名为that
      curly: [2, 'multi-line'], // 当一个块只包含一条语句时,不允许省略花括号。
      'dot-location': [2, 'property'], // 成员表达式中的点应与属性部分位于同一行
      'eol-last': 2, // 强制文件以换行符结束(LF)
      eqeqeq: ['error', 'always', { null: 'ignore' }], // 强制使用全等
      'generator-star-spacing': [2, { before: true, after: true }], // 生成器中'*'两侧都要有间距
      'global-require': 1, // 所有调用require()都位于模块的顶层
      indent: [2, 2, { SwitchCase: 2 }], // 缩进风格
      'key-spacing': [2, { beforeColon: false, afterColon: true }], // 强制在对象字面量属性中的键和值之间保持一致的间距
      'keyword-spacing': [2, { before: true, after: true }], // 关键字如if/function等的间距
      'new-cap': [2, { newIsCap: true, capIsNew: false }], // 允许在没有new操作符的情况下调用大写启动的函数;(默认)要求new使用大写启动函数调用所有操作符
      'new-parens': 2, // JavaScript通过new关键字调用函数时允许省略括号
      'no-array-constructor': 1, // 不允许使用Array构造函数。除非要指定生成数组的长度
      'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', // 只有开发环境可以使用console
      // 'no-console': 1, // 禁用 console
      'no-class-assign': 2, // 不允许修改类声明的变量
      // 'no-class-assign': 0, // 禁止给类赋值

      'no-const-assign': 2, // 不能修改使用const关键字声明的变量
      // 'no-const-assign': 0, // 禁止修改const声明的变量

      'no-control-regex': 0, // 不允许正则表达式中的控制字符
      // 'no-control-regex': 2, // 禁止在正则表达式中使用控制字符

      'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', // 只有开发环境可以使用debugger
      'no-delete-var': 2, // 不允许在变量上使用delete操作符
      // 'no-delete-var': 2, // 不能对var声明的变量使用delete操作符

      'no-dupe-args': 2, // 不允许在函数声明或表达式中使用重复的参数名称
      'no-dupe-class-members': 2, // 不允许在类成员中使用重复的参数名称
      'no-dupe-keys': 2, // 不允许在对象文字中使用重复键
      // 'no-dupe-keys': 2, // 在创建对象字面量时不允许键重复 {a:1,a:1}

      'no-duplicate-case': 2, // 不允许在switch语句的case子句中使用重复的测试表达式
      // 'no-duplicate-case': 2, // switch中的case标签不能重复

      'no-empty-character-class': 2, // 不允许在正则表达式中使用空字符类
      // 'no-empty-character-class': 2, // 正则表达式中的[]内容不能为空

      'no-empty-pattern': 2, // 不允许空块语句
      'no-eval': 2, // 不允许使用eval
      'no-ex-assign': 2, // 不允许在catch子句中重新分配例外
      // 'no-ex-assign': 2, // 禁止给catch语句中的异常参数赋值
      'no-extend-native': 2, // 不允许直接修改内建对象的原型
      // 'no-extend-native': 0, // 禁止扩展native对象
      'no-extra-boolean-cast': 2, // 禁止不必要的布尔转换
      // 'no-extra-boolean-cast': 2, // 禁止不必要的bool转换
      'no-extra-parens': [2, 'functions'], // 仅在函数表达式附近禁止不必要的括号
      // 'no-extra-parens': 2, // 禁止非必要的括号
      'no-fallthrough': 2, // 消除一个案件无意中掉到另一个案件
      // 'no-fallthrough': 1, // 禁止switch穿透
      'no-floating-decimal': 2, // 消除浮点小数点,并在数值有小数点但在其之前或之后缺少数字时发出警告
      // 'no-floating-decimal': 2, // 禁止省略浮点数中的0 .5 3.
      'no-func-assign': 2, // 允许重新分配function声明
      // 'no-func-assign': 2, // 禁止重复的函数声明
      'no-implied-eval': 2, // 消除隐含eval()
      // 'no-implied-eval': 2, // 禁止使用隐式eval
      'no-inner-declarations': [2, 'functions'], // 不允许function嵌套块中的声明
      // 'no-inner-declarations': [0, 'functions'], // 禁止在块语句中使用声明(变量或函数)

      'no-invalid-regexp': 2, // 不允许RegExp构造函数中的无效正则表达式字符串
      // 'no-invalid-regexp': 2, // 禁止无效的正则表达式

      'no-irregular-whitespace': 2, // 捕获无效的空格
      // 'no-irregular-whitespace': 2, // 不能有不规则的空格

      'no-iterator': 2, // 消除阴影变量声明
      // 'no-iterator': 0, // 禁止使用__iterator__ 属性

      'no-label-var': 2, // 禁止创建与范围内的变量共享名称的标签
      // 'no-label-var': 2, // label名不能与var声明的变量名相同

      'no-labels': [2, { allowLoop: false, allowSwitch: false }], // 消除 JavaScript 中使用带标签的语句
      // 'no-labels': 0, // 禁止标签声明

      'no-lone-blocks': 2, // 消除脚本顶层或其他块中不必要的和可能混淆的块
      // 'no-lone-blocks': 2, // 禁止不必要的嵌套块

      'no-mixed-spaces-and-tabs': 2, // 不允许使用混合空格和制表符进行缩进
      // 'no-mixed-spaces-and-tabs': [2, false], // 禁止混用tab和空格

      'no-multi-spaces': 2, // 禁止在逻辑表达式,条件表达式,声明,数组元素,对象属性,序列和函数参数周围使用多个空格
      // 'no-multi-spaces': 1, // 不能用多余的空格

      'no-multi-str': 2, // 防止使用多行字符串
      // 'no-multi-str': 2, // 字符串不能用\换行

      'no-multiple-empty-lines': [2, { max: 1 }], // 最多一个空行
      // 'no-multiple-empty-lines': [1, { max: 2 }], // 空行最多不能超过2行

      'no-native-reassign': 2, // 不允许修改只读全局变量
      // 'no-native-reassign': 0, // 不能重写native对象

      'no-new-object': 2, // 不允许使用Object构造函数
      'no-new-require': 2, // 消除new require表达的使用
      'no-new-symbol': 2, // 防止Symbol与new 同时使用的意外错误
      'no-new-wrappers': 2, // 杜绝使用String,Number以及Boolean与new操作
      'no-obj-calls': 2, // 不允许调用Math,JSON和Reflect对象作为功能
      'no-octal': 2, // 不允许使用八进制文字
      'no-octal-escape': 2, // 不允许字符串文字中的八进制转义序列
      // 'no-new-object': 1, // 禁止使用new Object()
      // 'no-new-require': 1, // 禁止使用new require
      // 'no-new-wrappers': 1, // 禁止使用new创建包装实例,new String new Boolean new Number
      // 'no-obj-calls': 0, // 不能调用内置的全局对象,比如Math() JSON()
      // 'no-octal': 2, // 禁止使用八进制数字
      // 'no-octal-escape': 2, // 禁止使用八进制转义序列
      'no-path-concat': 2, // 防止 Node.js 中的目录路径字符串连接无效
      // 'no-path-concat': 0, // node中不能使用__dirname或__filename做路径拼接

      'no-redeclare': 2, // 消除在同一范围内具有多个声明的变量
      // 'no-redeclare': 2, // 禁止重复声明变量

      'no-regex-spaces': 2, // 在正则表达式文字中不允许有多个空格
      'no-return-assign': [2, 'except-parens'], // 消除return陈述中的任务,除非用括号括起来
      // 'no-return-assign': 1, // return 语句中不能有赋值表达式

      'no-self-assign': 2, // 消除自我分配
      'no-self-compare': 2, // 禁止比较变量与自身
      // 'no-self-compare': 2, // 不能比较自身

      'no-sequences': 2, // 禁止使用逗号运算符
      // 'no-sequences': 0, // 禁止使用逗号运算符

      'no-sparse-arrays': 2, // 不允许稀疏数组文字
      // 'no-sparse-arrays': 2, // 禁止稀疏数组, [1,,2]

      'no-this-before-super': 2, // 在呼call前标记this/super关键字super()
      'no-throw-literal': 2, // 不允许抛出不可能是Error对象的文字和其他表达式
      'no-trailing-spaces': 2, // 不允许在行尾添加尾随空白
      'no-undef': 2, // 任何对未声明的变量的引用都会导致错误
      // 'no-trailing-spaces': 1, // 一行结束后面不要有空格
      // 'no-this-before-super': 0, // 在调用super()之前不能使用this或super
      // 'no-throw-literal': 1, // 禁止抛出字面量错误 throw "error";
      // 'no-undef': 1, // 不能有未定义的变量
      'no-undef-init': 1, // 变量初始化时不能直接给它赋值为undefined
      // 'no-undef-init': 2, // 消除初始化为undefined的变量声明
      'no-underscore-dangle': 2, // 标识符不能以_开头或结尾
      'no-unexpected-multiline': 2, // 不允许混淆多行表达式
      'no-unmodified-loop-condition': 2, // 查找循环条件内的引用,然后检查这些引用的变量是否在循环中被修改
      'no-unneeded-ternary': [2, { defaultAssignment: false }], // 不允许将条件表达式作为默认的分配模式
      'no-unreachable': 2, // 不允许可达代码return,throw,continue,和break语句后面还有语句。
      // 'no-unexpected-multiline': 2, // 避免多行表达式
      // 'no-underscore-dangle': 1, // 标识符不能以_开头或结尾
      // 'no-unneeded-ternary': 1, // 禁止不必要的嵌套 var isYes = answer === 1 ? true : false;
      // 'no-unreachable': 2, // 不能有无法执行的代码
      'no-unsafe-finally': 2, // 不允许return,throw,break,和continue里面的语句finally块
      'no-unused-vars': [2, { vars: 'all', args: 'after-used' }], // 消除未使用的变量,函数和函数的参数 // vars: 'all' 检查所有变量的使用情况,包括全局范围内的变量。这是默认设置。 args: 'after-used' 只有最后一个参数必须使用。例如,这允许您为函数使用两个命名参数,并且只要您使用第二个参数,ESLint 就不会警告您第一个参数。这是默认设置。
      // 'no-unused-vars': [2, { vars: 'all', args: 'after-used' }], // 不能有声明后未被使用的变量或参数

      'no-useless-call': 2, // 标记使用情况,Function.prototype.call()并且Function.prototype.apply()可以用正常的函数调用来替代
      // 'no-useless-call': 2, // 禁止不必要的call和apply

      'no-useless-computed-key': 2, // 禁止不必要地使用计算属性键
      'no-useless-constructor': 2, // 在不改变类的工作方式的情况下安全地移除的类构造函数
      'no-useless-escape': 0, // 禁用不必要的转义字符
      'no-whitespace-before-property': 2, // 如果对象的属性位于同一行上,不允许围绕点或在开头括号之前留出空白
      'no-with': 2, // 禁用with 'no-var': 2, // 禁用var
      'one-var': [2, { initialized: 'never' }], // 强制将变量声明为每个函数(对于var)或块(对于let和const)范围一起声明或单独声明。 initialized: 'never' 每个作用域要求多个变量声明用于初始化变量
      'operator-linebreak': [2, 'after', { overrides: { '?': 'before', ':': 'before' } }], // 实施一致的换行
      'padded-blocks': [2, 'never'], // 在块内强制执行一致的空行填充
      'prefer-destructuring': ['error', { object: false, array: false }], // 此规则强制使用解构而不是通过成员表达式访问属性。
      quotes: [2, 'single', { avoidEscape: true, allowTemplateLiterals: true }], // avoidEscape: true 允许字符串使用单引号或双引号,只要字符串包含必须以其他方式转义的引号 ;allowTemplateLiterals: true 允许字符串使用反引号
      radix: 2, // parseInt必须指定第二个参数
      semi: [2, 'never'], // 不使用分号
      'semi-spacing': [2, { before: false, after: true }], // 强制分号间隔
      'space-before-blocks': [2, 'always'], // 块必须至少有一个先前的空间
      'space-before-function-paren': [2, 'never'], // 在(参数后面不允许任何空格
      'space-in-parens': [2, 'never'], // 禁止或要求(或)左边的一个或多个空格
      'space-infix-ops': 2, // 强制二元运算符左右各有一个空格
      'space-unary-ops': [2, { words: true, nonwords: false }], // words: true 如:new,delete,typeof,void,yield 左右必须有空格 // nonwords: false 一元运算符,如:-,+,--,++,!,!!左右不能有空格
      'spaced-comment': [2, 'always', { markers: ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] }], // 注释开始后,此规则将强制间距的一致性//或/*
      'template-curly-spacing': [2, 'never'], // 不允许大括号内的空格
      'use-isnan': 2, // 禁止比较时使用NaN,只能用isNaN()
      'valid-typeof': 2, // 必须使用合法的typeof的值
      'wrap-iife': [2, 'any'], // 立即执行函数表达式的小括号风格
      'yield-star-spacing': [2, 'both'], // 强制执行*周围 yield*表达式的间距,两侧都必须有空格
      yoda: [2, 'never'],
      'prefer-const': 2, // 使用let关键字声明的变量,但在初始分配后从未重新分配变量,应改为const声明
      'object-curly-spacing': [2, 'always', { objectsInObjects: false }], // 不允许以对象元素开始和/或以对象元素结尾的对象的大括号内的间距
      'array-bracket-spacing': [2, 'never'], // 不允许数组括号内的空格

      // 补充
      'no-async-promise-executor': 1, // 禁止使用异步函数作为 Promise executor
      'no-await-in-loop': 1, // 禁止使用 await async

      'default-case': 2, // switch语句最后必须有default
      'no-alert': 0, // 禁止使用alert confirm prompt
      'no-bitwise': 0, // 禁止使用按位运算符
      'no-caller': 0, // 禁止使用arguments.caller或arguments.callee
      'no-catch-shadow': 2, // 禁止catch子句参数与外部作用域变量同名
      'no-cond-assign': 0, // 禁止在条件表达式中使用赋值语
      'no-constant-condition': 0, // 禁止在条件中使用常量表达式 if(true) if(1)
      'no-continue': 0, // 禁止使用continue
      'no-div-regex': 1, // 不能使用看起来像除法的正则表达式/=foo/
      'no-else-return': 0, // 如果if语句里面有return,后面不能跟else语句
      'no-empty': 2, // 块语句中的内容不能为空
      'no-eq-null': 1, // 禁止对null使用==或!=运算符
      'no-extra-bind': 2, // 禁止不必要的函数绑定
      'no-extra-semi': 2, // 禁止多余的冒号
      'no-implicit-coercion': 1, // 禁止隐式转换
      'no-inline-comments': 1, // 禁止行内备注
      'no-invalid-this': 2, // 禁止无效的this,只能用在构造器,类,对象字面量
      'no-lonely-if': 1, // 禁止else语句内只有if语句
      'no-loop-func': 1, // 禁止在循环中使用函数(如果没有引用外部变量不形成闭包就可以)
      'no-mixed-requires': [0, false], // 声明时不能混用声明类型
      'linebreak-style': [0, 'windows'], // 换行风格
      'no-negated-in-lhs': 2, // in 操作符的左边不能有!
      'no-nested-ternary': 0, // 禁止使用嵌套的三目运算
      'no-new': 1, // 禁止在使用new构造一个实例后不赋值
      'no-new-func': 1, // 禁止使用new Function

      'no-param-reassign': 0, // 禁止给参数重新赋值
      'no-plusplus': 1, // 禁止使用++,--
      'no-process-env': 0, // 禁止使用process.env
      'no-process-exit': 0, // 禁止使用process.exit()
      'no-proto': 0, // 禁止使用__proto__属性
      'no-restricted-modules': 0, // 如果禁用了指定模块,使用就会报错
      'no-script-url': 0, // 禁止使用javascript:void(0)
      'no-shadow': 2, // 外部作用域中的变量不能与它所包含的作用域中的变量或参数同名
      'no-shadow-restricted-names': 2, // 严格模式中规定的限制标识符不能作为声明时的变量名使用
      'no-spaced-func': 2, // 函数调用时 函数名与()之间不能有空格
      'no-sync': 0, // nodejs 禁止同步方法
      'no-ternary': 0, // 禁止使用三目运算符

      'no-undefined': 1, // 不能使用undefined

      'no-unused-expressions': 2, // 禁止无用的表达式
      'no-use-before-define': 2, // 未定义前不能使用
      'no-void': 2, // 禁用void操作符
      'no-var': 0 // 禁用var,用let和const代替
    }
  },
  // prettier 配置
  prettierJSON: {
    printWidth: 80, // 每行代码长度(默认80)
    tabWidth: 2, // 每个tab相当于多少个空格(默认2)
    useTabs: false, // 是否使用tab进行缩进(默认false)
    singleQuote: true, // 使用单引号(默认false)
    semi: true, // 声明结尾使用分号(默认true)
    trailingComma: 'all', // 多行使用拖尾逗号(默认none)
    bracketSpacing: true, // 对象字面量的大括号间使用空格(默认true)
    jsxBracketSameLine: false, // 多行JSX中的>放置在最后一行的结尾,而不是另起一行(默认false)
    arrowParens: 'avoid' // 只有一个参数的箭头函数的参数是否带圆括号(默认avoid)
  },
  // setting.json配置
  settingJSON: {
    /* 开启保存时自动格式化 */
    'editor.formatOnSave': true,
    /* eslint的配置 */
    'eslint.enable': true,
    'eslint.run': 'onSave',
    'eslint.options': { extensions: ['.js', '.vue'] },
    'editor.codeActionsOnSave': {
      'source.fixAll.eslint': true // 保存时自动修复
    },
    // 关闭 vscode 默认的检查工具
    'html.validate.scripts': false,
    'javascript.validate.enable': false,
    'eslint.alwaysShowStatus': true,
    'eslint.format.enable': true,
    'scss.lint.duplicateProperties': 'error',
    'css.lint.duplicateProperties': 'error',
    'less.lint.zeroUnits': 'error',
    'eslint.validate': ['javascript', 'javascriptreact', 'vue-html', 'vue', 'html'],
    /* prettier的配置 */
    'prettier.printWidth': 120, // 超过最大值换行
    'prettier.tabWidth': 2, // 缩进字节数
    'prettier.useTabs': true, // 缩进使用tab
    'prettier.semi': false, // 句尾添加分号
    'prettier.singleQuote': true, // 使用单引号代替双引号
    'prettier.proseWrap': 'preserve', // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行
    'prettier.arrowParens': 'avoid', // (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号
    'prettier.bracketSpacing': true, // 在对象,数组括号与文字之间加空格 "{ foo: bar }"
    'prettier.endOfLine': 'auto', // 结尾是 \n \r \n\r auto
    'prettier.htmlWhitespaceSensitivity': 'ignore',
    'prettier.ignorePath': '.prettierignore', // 不使用prettier格式化的文件填写在项目的.prettierignore文件中
    'prettier.requireConfig': false, // Require a "prettierconfig" to format prettier
    'prettier.trailingComma': 'none', // 在对象或数组最后一个元素后面是否加逗号
    /* 每种语言默认的格式化规则 */
    '[html]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' },
    '[css]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' },
    '[scss]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' },
    '[javascript]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' },
    '[vue]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' },
    '[json]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' }
  }
}