精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

隱藏在 Eslint 的Fix 功能中的可以用來面試的算法題

開發 前端 算法
babel 和 eslint 都可以修改代碼,babel 是操作了 AST,打印代碼的時候就會生成不同的代碼,而 eslint 則是一部分 rule 支持自動 fix,當開啟了 --fix 的時候就會自動修復。

[[422353]]

我們知道 eslint 支持 fix,當添加了 --fix 參數部分 rule 可以自動修復問題。

有沒有想過,這種功能是怎么實現的?babel 也能轉換代碼,它和 eslint 生成代碼的原理一樣么?

babel

babel 分為 parse、transform、generate 3 步。

圖片

在 transform 階段轉換完 AST 代碼之后,在 generate 階段會遞歸打印 AST 成目標代碼。

generate 的原理就是遞歸根據每個 AST 的信息拼接字符串:

所以我們在插件里面改動了 AST,最終的代碼也會改。

eslint

eslint 的 rule 可以對 AST 進行檢查,然后通過 context.report 報錯,還可以指定如何修復:

自定義 rule 格式如下:

  1. module.exports = { 
  2.      meta: { 
  3.          fixable: true 
  4.      }, 
  5.      create(context) { 
  6.          return { 
  7.             // 指定 AST 的類型 
  8.             ObjectExpression(node) { 
  9.                 // 一系列檢查 
  10.                 context.report({ 
  11.                     node, 
  12.                     message: 'xxx 有錯誤'
  13.                     loc: node.loc, 
  14.                     *fix(fixer) { 
  15.                         yield fixer.replaceTextRange([rangeStart,rangeEnd], '替換的文本'); 
  16.                     } 
  17.                 }); 
  18.              } 
  19.          }; 
  20.      } 
  21.  }; 

其中 fix 選項就是用于問題自動修復的,通過 fixer 的 api。

fixer 有這些 api 可用:

  1. insertTextAfter(nodeOrToken, text); 
  2. insertTextAfterRange(range, text); 
  3. insertTextBefore(nodeOrToken, text); 
  4. insertTextBeforeRange(range, text); 
  5.  
  6. remove(nodeOrToken); 
  7. removeRange(range); 
  8.  
  9. replaceText(nodeOrToken, text); 
  10. replaceTextRange(range, text); 

特別容易記,就是增、刪、改 3類,增分為在前面插入和在后面插入,每一類都支持基于 token 來修改 text 或者基于 range(下標范圍)。

AST 中每個節點都保留了 range 的信息,也就是在源代碼的下標是從哪到哪,這樣就可以根據 range 來修改代碼,或者根據 AST 查到 range 再去修改代碼。

那知道了對什么 range 做什么操作之后,是怎么自動修改代碼的呢?

下面是 eslint 中 fix 代碼的源碼:

  1. // 源碼 
  2. const originalText = sourceCode.text; 
  3. // 第一個 range 的開始 
  4. const start = fixes[0].range[0]; 
  5. // 最后一個 range 的結束 
  6. const end = fixes[fixes.length - 1].range[1]; 
  7. // 替換的文本 
  8. let text = ""
  9. let lastPos = Number.MIN_SAFE_INTEGER; 
  10.  
  11. for (const fix of fixes) { 
  12.     if (fix.range[0] >= 0) { 
  13.         // 截取 range 的左邊的字符串,從當前 range 和 上一個 range 的右邊位置取大的 
  14.         text += originalText.slice(Math.max(0, start, lastPos), fix.range[0]); 
  15.     } 
  16.     // 拼接上修復的文本 
  17.     text += fix.text; 
  18.     // range 右邊的位置 
  19.     lastPos = fix.range[1]; 
  20. // 用拼接的字符串替換 range 內的字符串 
  21. text += originalText.slice(Math.max(0, start, lastPos), end); 

其中比較有意思的一個點是當兩端 range 有交集的時候:

每一個 fix 都是對一個線段(range)內文本的修復,當有交集的時候怎么處理,這其實可以作為一個算法題來考核候選人了。

從左到右應用 fix,然后記錄當前的 rangeRight,應用下一段的時候就取 rangeLeft 和上一個 rangeRight 的最大值作為 rangeLeft。

把這個問題抽象出來之后還是一個比較有意思的算法題,我覺得用來面試比較不錯,而且有真實的應用場景。

聊回正題,fix 功能的實現就是對每段 range 修改的文本進行拼接,然后替換源碼字符串就可以了。

總結

babel 和 eslint 都可以修改代碼,babel 是操作了 AST,打印代碼的時候就會生成不同的代碼,而 eslint 則是一部分 rule 支持自動 fix,當開啟了 --fix 的時候就會自動修復。

babel 生成代碼的原理是遞歸打印 AST,拼接字符串,所以改了 AST,生成的代碼就改了。

eslint 修復代碼的邏輯是對某段 range 的文本做替換,之后拼接,這個與 AST 無關,所以 eslint 的 fix 功能是可選的。

比較有意思的是 eslint 的多個 rule 返回的對多段range 的修改如何應用到對代碼修改上,當有交集的時候怎么辦,我覺得這個問題可以作為算法題來考查面試者了。

 

責任編輯:姜華 來源: 神光的編程秘籍
相關推薦

2011-06-13 09:59:21

2021-01-15 13:27:50

竊密腳本CSS惡意代碼

2016-11-21 11:43:11

Python

2018-05-09 10:40:15

云存儲數據對象存儲

2023-05-04 07:11:29

2014-05-16 10:44:57

設計交互設計

2016-12-02 10:05:49

Python彩蛋

2019-08-29 07:51:26

2018-04-24 11:06:18

云遷移數據遷移數據庫

2021-07-09 10:29:50

云計算云計算環境云應用

2023-03-06 14:12:47

深度學習

2023-04-10 11:22:34

CIOIT運營成本

2015-02-28 10:52:05

2021-03-01 11:38:06

惡意軟件macOS攻擊

2013-07-29 10:02:42

2019-11-20 15:09:25

安全威脅SSL加密

2021-10-10 12:43:44

惡意軟件加密流量網絡攻擊

2015-06-02 16:43:21

2016-12-06 12:48:32

開源設計

2011-07-22 13:43:48

點贊
收藏

51CTO技術棧公眾號

国产一区二区黄| 亚洲第一在线综合网站| 91久久精品美女高潮| 91porn在线视频| 网友自拍区视频精品| 欧美视频一区二区三区四区| 五月天激情图片| 青青草观看免费视频在线| 久久99久久99| 秋霞av国产精品一区| 糖心vlog免费在线观看| 欧美a级网站| 6080国产精品一区二区| 精品视频一区二区在线| 青青草原国产在线| 国产精品久久毛片av大全日韩| 国产乱码一区| 国产偷人妻精品一区二区在线| 久久久久久久高潮| 久久免费国产视频| 日韩国产第一页| 国产精品一线天粉嫩av| 精品久久一区二区三区| 亚欧激情乱码久久久久久久久| 欧美aa一级| 一区二区三区丝袜| 一区二区三区四区久久| 成人性爱视频在线观看| 2023国产一二三区日本精品2022| 亚洲综合av影视| 国产又粗又黄又爽| 日韩av一级电影| 日本成人免费在线| 免费日韩一级片| 国产精品v亚洲精品v日韩精品 | 精品乱色一区二区中文字幕| 国产毛片一区二区三区va在线 | 黄网站视频在线观看| 国产欧美日韩不卡免费| 欧美黑人3p| 天堂av在线7| 成人国产视频在线观看| 99国产在线观看| 精品国产av一区二区| 精品一区二区影视| 国产精品美女www| www.久久网| 青青青伊人色综合久久| 国产精品日韩久久久久| 中文字幕第一页在线播放| 天堂资源在线中文精品| 欧洲亚洲免费在线| 久久夜色精品国产噜噜亚洲av| 亚洲视频二区| 91精品国产精品| 中文字幕精品三级久久久| 亚洲在线免费| 国产精品高潮视频| 中文在线免费观看| 久久国产精品无码网站| 国产在线视频不卡| 精品人妻av一区二区三区| 国产宾馆实践打屁股91| 国产日韩精品推荐| 人成免费电影一二三区在线观看| 91视频一区二区三区| 久久精品国产第一区二区三区最新章节| 无码精品在线观看| 国产日韩欧美制服另类| 亚洲视频精品一区| а√天堂8资源在线官网| 亚洲一区二区三区四区的| 少妇人妻大乳在线视频| 中日韩脚交footjobhd| 欧美性色欧美a在线播放| 色噜噜狠狠永久免费| 视频二区欧美| 亚洲男女性事视频| 国产麻豆a毛片| 国内一区二区三区| 青草热久免费精品视频| 一级片aaaa| 成人一区二区三区视频在线观看| 久久青青草综合| 都市激情在线视频| 亚洲精品国产精华液| 91成人在线观看喷潮教学| 成人av色网站| 亚洲大胆人体视频| 2014亚洲天堂| 国产精品久久久久久久免费软件 | 日本福利视频在线| 欧美三区四区| 欧美tk—视频vk| 中文字幕在线观看免费高清| 在线电影一区二区| 日韩av毛片网| www视频在线| 国产日韩欧美高清| 国产成人永久免费视频| 成人交换视频| 亚洲精品按摩视频| 少妇人妻丰满做爰xxx| 性欧美精品高清| 亚洲a中文字幕| 国产成人天天5g影院在线观看| 亚洲蜜臀av乱码久久精品| 成年人视频观看| 一区二区在线免费播放| 中文字幕欧美日韩在线| 日韩伦理在线视频| 国产最新精品免费| 视频一区二区三区在线观看 | 欧美日韩国产免费观看| 91av在线不卡| www日本高清| 国产精品传媒在线| 国产嫩草在线观看| 亚洲涩涩av| 国内精品小视频| 精品久久国产视频| 中文字幕佐山爱一区二区免费| 999香蕉视频| 国产精品xxxav免费视频| 久久精品中文字幕| 国产亚洲久一区二区| 91丝袜美腿高跟国产极品老师| 免费极品av一视觉盛宴| 亚洲精品66| 日韩在线观看免费全| 国产在线观看第一页| 久久综合久久综合九色| 日韩欧美国产免费| 欧美三级电影在线| 国外成人在线视频| 欧美一级淫片aaaaaa| 亚洲一区二区中文在线| 中文字幕久久久久久久| 91精品在线观看国产| 国产一区二中文字幕在线看| 1pondo在线播放免费| 在线观看日产精品| 妺妺窝人体色WWW精品| 久久综合婷婷| 日韩高清国产精品| 欧美xxxx做受欧美护士| 在线视频欧美性高潮| 波多野结衣人妻| 欧美国产一区二区| 成人综合久久网| 日韩毛片视频| 91老司机精品视频| 日本三级在线观看网站| 日韩欧美www| 日本少妇激情视频| 91在线国内视频| 欧美成人免费高清视频| 不卡av一区二区| 成人免费视频在线观看超级碰| 国内外激情在线| 欧美r级电影在线观看| 精品在线免费观看视频| 成人av免费在线| 茄子视频成人免费观看| 精品在线手机视频| 国产日韩在线看片| 福利小视频在线| 精品亚洲一区二区三区在线观看| 黄色在线免费观看| 中文字幕在线不卡视频| 永久av免费在线观看| 亚洲国产婷婷| 日韩免费电影一区二区| 国产 日韩 欧美| 久久久伊人欧美| h视频网站在线观看| 欧美一级夜夜爽| 日本中文字幕在线| 《视频一区视频二区| 日韩精品一区二区三区高清免费| 久久久久久久高潮| 成年人深夜视频| 久久av综合| 亚洲综合在线做性| 成人私拍视频| 精品中文字幕在线观看| 亚洲欧洲综合在线| 在线播放/欧美激情| 日本一区二区不卡在线| 日本一区二区三区在线不卡| 日本wwwwwww| 久久久久在线| 97超碰在线视| 色135综合网| 久久伊人一区二区| 美女精品视频在线| 国产精品久久久久久亚洲影视| 欧美黑人猛交| 一区二区三区四区在线观看视频 | 亚洲人午夜色婷婷| 精品人妻一区二区三区换脸明星| 色婷婷精品大在线视频| 强乱中文字幕av一区乱码| 国产免费成人在线视频| 黄色av网址在线观看| 激情成人综合网| 国产天堂在线播放| 99视频+国产日韩欧美| 黄色免费高清视频| 欧美精品色图| 欧美一区二区三区在线免费观看 | 日本黄xxxxxxxxx100| 国产一区二区三区四区二区| 国产一区二区三区av在线| 国产精品99久久免费| 国产精品久在线观看| av资源新版天堂在线| 免费97视频在线精品国自产拍| 国产小视频在线播放| 亚洲精品99久久久久| www.日韩高清| 91精品国产入口| 亚洲熟妇无码久久精品| 在线免费视频一区二区| 久久午夜免费视频| 亚洲成人一二三| 久久久精品视频在线| 亚洲色图制服丝袜| 99热这里只有精品4| 亚洲国产经典视频| 亚洲国产天堂av| 久久综合中文字幕| 欧美 变态 另类 人妖| 99久久精品国产麻豆演员表| 2一3sex性hd| 成人性生交大合| 日本wwwwwww| av激情亚洲男人天堂| www.17c.com喷水少妇| 波多野结衣中文字幕一区| 性高潮免费视频| 成人精品一区二区三区四区| 91成人在线观看喷潮蘑菇| 国产精品亚洲成人| 不许穿内裤随时挨c调教h苏绵| 国产福利一区二区三区视频 | 91精品国产99| 欧美电影免费观看| 国产精品xxx视频| 福利视频一区| 成人网欧美在线视频| 超碰国产精品一区二页| 亚洲一区二区少妇| 永久免费精品视频| 国产综合 伊人色| 亚洲激情77| 亚洲一区二区三区四区中文| 99久久综合| 日本香蕉视频在线观看| 亚洲美女91| 日本成人中文字幕在线| 蜜臂av日日欢夜夜爽一区| 国内自拍第二页| 福利一区二区在线| 亚洲av无码一区二区三区网址| 91麻豆精品在线观看| 中国女人特级毛片| 亚洲天堂2014| 国产第100页| 91黄色小视频| av手机免费看| 日韩久久免费视频| 色综合久久久久综合一本到桃花网| 日韩一中文字幕| 999av小视频在线| 国产精品久久久| 亚洲91网站| 欧美性xxxx69| 女生裸体视频一区二区三区| 黄网站欧美内射| 看片网站欧美日韩| 国产高潮视频在线观看| 国产视频一区二区在线| 欧美性猛交xxxxx少妇| 疯狂做受xxxx高潮欧美日本 | 粉嫩一区二区三区| 亚洲mm色国产网站| 亚洲另类春色校园小说| 黄色www在线观看| 男人天堂欧美日韩| 超碰在线超碰在线| 欧美韩国日本一区| 日本熟妇色xxxxx日本免费看| 欧美三级在线看| 午夜激情小视频| 久久视频在线观看免费| 综合毛片免费视频| 成人激情直播| 成人一二三区| 国产精品秘入口18禁麻豆免会员| 国产一区二区三区不卡在线观看 | 亚洲高清视频免费| 久久久久久久久岛国免费| 一区二区成人免费视频| 在线精品观看国产| 午夜av免费在线观看| 欧美另类老女人| 国产精成人品2018| 精品乱色一区二区中文字幕| 欧美国产高清| 97超碰人人爽| 中文子幕无线码一区tr | 欧美久久一二三四区| 理论视频在线| 91精品国产九九九久久久亚洲| 欧美日韩黄网站| 中文精品视频一区二区在线观看| 亚洲欧美网站| 国产高清自拍视频| 亚洲一区二区三区自拍| 精品人妻一区二区三区换脸明星 | 日韩脚交footjobhd| 国产精品久久久久久久久久久久午夜片| 久久看人人摘| 一区二区三区 欧美| 久久久99免费| 伊人久久久久久久久久久久| 精品视频在线播放色网色视频| 美足av综合网| 成人羞羞视频免费| 欧美成人高清| 无套内谢丰满少妇中文字幕| 伊人成人在线视频| 99国精产品一二二线| 久久大综合网| 中文字幕视频在线免费观看| 久久影视一区二区| 亚洲欧美偷拍视频| 亚洲免费电影一区| 色一区二区三区| 麻豆av一区二区三区久久| 国产一区成人| 一卡二卡三卡四卡| 日韩欧美成人精品| 久久精品蜜桃| 国产精品欧美一区二区三区奶水| 国产一区二区三区电影在线观看 | 欧美日韩国产三级| 日韩电影免费| 欧美亚洲国产另类| 免费av一区| 成人亚洲视频在线观看| 国产视频在线观看一区二区三区 | 亚洲精品久久久久中文字幕欢迎你 | 亚洲一二三区视频在线观看| www日本高清| 91精品国产99| 成人毛片在线| 午夜影院免费观看视频| 亚洲一区二区中文在线| 天堂√在线中文官网在线| 日韩免费观看视频| 久久人体视频| 国产精久久久久| 黑人巨大精品欧美一区二区免费 | 欧美成人免费全部| 91国内精品| 国产免费毛卡片| 中文无字幕一区二区三区| 国产日韩精品suv| 91高清视频在线免费观看| 国产精品一在线观看| 精品国产鲁一鲁一区二区三区| 亚洲一二三区在线观看| 国产在线一二三| 亚洲va久久久噜噜噜| 亚洲国产电影| 国产一区二区三区精品在线| 这里只有精品视频在线观看| 国产探花视频在线观看| 神马影院我不卡| 懂色av噜噜一区二区三区av| 欧美超碰在线观看| 欧美成人一二三| 精品午夜久久| 日本成人在线免费| 色噜噜狠狠色综合中国| 在线视频中文字幕第一页| 欧美亚洲免费高清在线观看 | 成人精品水蜜桃| 青青青伊人色综合久久| 国产午夜激情视频| 日韩亚洲欧美中文高清在线| 欧美黑白配在线| 日本美女久久久| 欧美在线视频日韩| 9999在线视频| 一级黄色录像免费看| 久久久久久久久久久黄色| 亚洲精品中文字幕成人片|