引言:最近在寫一個繁體項目,因爲初期設計沒有國際化的規劃,單純是一個繁體的項目,可是繁體和簡體經常使用語和字仍是有差別的,因此作了一個
eslint
高頻詞彙校驗器、記錄一下ESLint 使用規則javascript
自定義Eslint!非向官方Eslint提交官方rule,因此對文件夾沒有要求,若是你想官方提供請看APIjava
// 第一步
touch my-rules.js
// 第二步
module.exports = {
meta: {
type: 'suggestion', // 規則說明
docs: {}, // rule相關說明
// .eslintrc rules 相關options定義
// 校驗傳入的options是否符合規則
schema: [
{
type: 'object',
properties: {
xxx: {
type: 'boolean'
}
},
additionalProperties: false
}
],
fixable: 'code' // npm run eslint fix提供自動修復的選項
},
// create 必需要返回一個object
create: (context) {
// 獲取schema定義數組數據
// context 能夠拿到比較多的數據 好比 .eslintrc setting 共享數據
const opt = context.options
return {
// 獲取AST 節點 並回調這個節點的信息
[AST節點(JSXText)](node){
// .... 對節點作一些校驗
context.report({
node, //獲取的節點
message: '{{ s }} 錯了', // eslint 報錯顯示的信息
data: {
s: '我錯了'
},
// 若是 meta設置了fixable: 'code' 經過這個函數去自動修復
fix(fixer){
return fixer.replaceTextRange() // API 好幾個 主要是拿到AST 對節點進行範圍替換 仍是向前(後)追加
}
})
}
}
}
}
複製代碼
經過上面的代碼 就完成了一個基本ESlint,咱們有兩種方式進行測試node
eslint [須要校驗的文件] --rulesdir [eslint_rules 存在rules的文件夾]
複製代碼
// 引入RuleTester
const RuleTester = require('eslint').RuleTester
// 引入自定義規則
const rule = require('../lib/a.js')['規則名']
// 導入必要的eslint options 下面是針對react
const parserOptions = {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
jsx: true
}
}
const ruleTester = new RuleTester({ parserOptions })
ruleTester.run('規則名', rule, {
// 正確的測試用例
valid: [
{ code: "<App foo={'哈哈'} />;", options: [{ a: true }] }
],
// 錯誤的測試用例
invalid: [
{
code: "<App foo={'哈哈'} />;",
output: "<App foo={'嘿嘿'} />;",
errors: [
{ message: 'foo ---> 視頻 是包含錯用錯別字 請修改 (づ ̄3 ̄)づ╭❤~' }
]
}
]
})
注意:valid、invalid要同時存在 且 錯誤errors是個數組 說明你的錯誤用例有幾個錯誤 你就要把錯誤都寫出來
複製代碼
// 插件文件 必須以eslint-plugin-<xx> 開頭
touch eslint-plugin-simple-text-convert.js
// 直接將咱們的自定義規則導出就行了
// 須要注意 *千萬不要以eslint-plugin-<rules>命名rules文件名* 會找不到rules
module.exports = {
rules: {
'simple-text-convert': require('./my-rules')
}
}
複製代碼
// .eslintrc
plugins:['simple-text-convert']
rules: {
"simple-text-convert/simple-text-convert":"error"
}
複製代碼