ESLint 规则 no-mixed-spaces-and-tabs 详解:禁止缩进混用空格与制表符

发布时间:2026/11/12 9:07:49

ESLint 规则 no-mixed-spaces-and-tabs 详解:禁止缩进混用空格与制表符 ESLint 规则 no-mixed-spaces-and-tabs 详解禁止缩进混用空格与制表符【免费下载链接】eslintFind and fix problems in your JavaScript code.项目地址: https://gitcode.com/GitHub_Trending/es/eslint本规则用于在 JavaScript 代码中检测并报告**同一行缩进中混用空格与制表符Tab**的问题是 ESLint 核心库中的一条布局类layout规则。绝大多数团队规范都会要求缩进要么统一使用空格、要么统一使用 Tab混用会导致代码在不同编辑器、不同 Tab 宽度设置下显示错位破坏可读性与 diff 整洁度。阅读本文后你将掌握该规则的配置方式、smart-tabs对齐豁免模式的使用场景、其源码级判定原理与边界行为以及它在 ESLint 8.53.0 之后被弃用并迁移到 ESLint Stylistic 的完整脉络。规则背景为什么禁止混用缩进大多数代码规范都会规定代码缩进必须使用空格或制表符中的一种。这是因为Tab 的实际显示宽度由编辑器决定常见为 2、4、8 个空格宽度混用时同一段代码在不同环境下显示效果完全不同混用缩进的行在代码审查Code Review与 git diff 中容易产生看似对齐实则错位的视觉干扰团队协作中混用意味着没有统一的缩进约定代码风格难以自动格式化与校验。因此ESLint 提供了no-mixed-spaces-and-tabs规则如果一行代码的缩进部分同时出现了空格与 Tab就视为错误。规则详情与判定示例该规则会检查每一行源码开头的空白字符序列只要缩进中同时存在空格与 Tab就报告一条mixedSpacesAndTabs错误错误消息为Mixed spaces and tabs.见 lib/rules/no-mixed-spaces-and-tabs.js 中的meta.messages。不正确的代码示例以下代码中return行使用了 Tab 加一个空格混合缩进var y 7行则在 Tab 缩进后又用空格做了额外对齐均属于违规/*eslint no-mixed-spaces-and-tabs: error*/ function add(x, y) { return x y; // Tab 空格 混用 } function main() { var x 5, y 7; // Tab 多个空格 混用 }正确的代码示例只要一行缩进全部由 Tab 组成或全部由空格组成即为合规/*eslint no-mixed-spaces-and-tabs: error*/ function add(x, y) { return x y; // 仅 Tab 缩进 } function main() { var x 5, y 7; // 仅空格缩进 }注意此规则只检查行首缩进不检查行内、代码之后的空白。例如foo \t代码后跟空格和 Tab不会被报告——这一行为在 tests/lib/rules/no-mixed-spaces-and-tabs.js 的有效用例foo \t、foo\t 中得到了明确验证。Options 配置说明该规则接受一个字符串选项schema 定义为枚举值[smart-tabs, true, false]见 lib/rules/no-mixed-spaces-and-tabs.js 中的meta.schema配置值行为默认不传任何行首缩进中同时出现空格与 Tab 都报错smart-tabs允许Tab 缩进 空格对齐即 Tab 之后跟随的空格若仅用于对齐则不报错true历史遗留写法等价于smart-tabs源码中case true与case smart-tabs走同一分支见 lib/rules/no-mixed-spaces-and-tabs.jsfalse显式关闭该选项等价于默认行为smart-tabs 模式smart-tabs允许混用空格与 Tab前提是空格被用于对齐alignment而非缩进。这是源自 Emacs Smart Tabs 方案参见原文档的further_reading指向的 emacswiki.org SmartTabs 概念的一种折中策略缩进用 Tab跨行对齐用空格。启用方式/*eslint no-mixed-spaces-and-tabs: [error, smart-tabs]*/启用后以下代码被认为是正确的——第一行用 Tab 缩进后续行用空格对齐到同一层级/*eslint no-mixed-spaces-and-tabs: [error, smart-tabs]*/ function main() { var x 5, y 7; // Tab 缩进 空格对齐合法 }而空格之后又出现 Tab的序列如\t \tfoo、\t\t\t \tfoo在smart-tabs模式下依然会报错对应测试见 tests/lib/rules/no-mixed-spaces-and-tabs.js 中options: [smart-tabs]的无效用例。源码实现判定正则与报告位置从 lib/rules/no-mixed-spaces-and-tabs.js 的create方法可以看到规则在Program:exit事件中对sourceCode.lines逐行执行正则匹配其核心逻辑如下默认模式的正则^(?( |\t))\1(?:\t| )要求行首至少有一个空格或一组 Tab紧接着出现相反类型的空白字符——即至少一个空格后跟 Tab或至少一个 Tab 后跟空格smart-tabs 模式的正则^(?(\t*))\1(?( ))\2\t只匹配若干 Tab含零个之后出现空格空格之后又出现 Tab的序列从而放行Tab 空格对齐。匹配成功后报告位置定位在首次发生混用的两个字符处column: match[0].length - 2到match[0].length这一列信息与 tests/lib/rules/no-mixed-spaces-and-tabs.js 中各类无效用例断言的行列号如\t return报告在第 1 列到第 3 列完全吻合。边界情况注释、字符串与模板字面量该规则并非对所有文本一律报告实现中内置了两类豁免这是阅读源码时最值得注意的细节多行注释的内部行对每个注释节点将其loc.start.line 1到loc.end.line之间的行加入ignoredCommentLines集合这些注释体内部行不参与混用检测见 lib/rules/no-mixed-spaces-and-tabs.js。因此/*\n\t * Hello\n\t */这类注释排版是合法的。Literal 与 TemplateElement 节点内部规则通过sourceCode.getNodeByRangeIndex()找到混用发生处所在的 AST 节点若该节点类型属于Literal或TemplateElement即混用发生在字符串字面量、模板字符串内容里则不报告见 lib/rules/no-mixed-spaces-and-tabs.js。这与测试中的用例var foo \\t /* comment inside template\t */;、 \n\t ; 等保持一致——模板字符串内部的空白是内容而非缩进不应被误报。测试用例验证lib/rules/no-mixed-spaces-and-tabs.js 的完整测试集位于 tests/lib/rules/no-mixed-spaces-and-tabs.js覆盖了有效用例纯 Tab 缩进\tvar x 5;、纯空格缩进 var x 5;、代码尾部空白foo \t、多行注释排版、模板字符串内部空白以及smart-tabs模式下的\tvar x 5,\n\t y 2;无效用例\t return x y;、 \t/* comment */、\t // comment、 \t;、\t\t\t foo等并逐一断言错误消息 ID、行列号与结束行列号。这些用例精确刻画了规则的行为边界是理解本规则最直接的规格说明书。弃用状态与迁移建议需要特别提醒从源码 lib/rules/no-mixed-spaces-and-tabs.js 的meta.deprecated字段可以看到该规则已在 ESLint v8.53.0 起被标记为弃用availableUntil为11.0.0即从 ESLint 11.0.0 起将从核心包中移除。弃用原因是格式类规则正在从 ESLint 核心迁移出去。弃用期间规则仍可正常使用但不再被推荐用于新项目官方推荐的替代方案是ESLint Stylistic插件中的同名规则no-mixed-spaces-and-tabs来自stylistic/eslint-plugin迁移方式可参考 docs/src/contribute/core-rules.md 所述的规则演进流程及 ESLint 官方格式化规则弃用公告若你仍在维护旧配置可将原配置中的该规则条目平滑迁移到 Stylistic 插件配置语义保持一致。总结no-mixed-spaces-and-tabs是 ESLint 布局类规则中实现简洁、边界处理考究的一条它用两个正则区分默认严格模式与smart-tabs 对齐豁免模式并对多行注释、字符串与模板字面量做了精准豁免。虽然它已随 ESLint 8.53.0 进入弃用流程并被 ESLint Stylistic 承接但其判定思想——缩进必须纯粹、对齐可以例外——至今仍是团队统一缩进风格、避免跨编辑器错位的有效手段。【免费下载链接】eslintFind and fix problems in your JavaScript code.项目地址: https://gitcode.com/GitHub_Trending/es/eslint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/11 10:28:08

微信聊天记录导出与永久保存:WeChatMsg完整指南

微信聊天记录导出与永久保存:WeChatMsg完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …

2026/11/10 13:30:30

WT系列语音芯片原理与实战:存储-解码-驱动一体化设计

1. 语音芯片不是“会说话的黑盒子”,而是可编程的声音执行器 你拆过玩具里的发声模块吗?按一下按钮,“欢迎光临”就响了;插上USB小音箱,通电自动播报“设备已连接”。这些声音背后,大概率不是单片机跑音频解…

2026/11/10 13:36:28

Java 17 Var 局部变量类型推断最佳实践:从入门到放弃再到真香## 重构老代码的时候发现这块可以优化,顺手整理成了这篇文章。 这篇文章主要讲Java 17 var关键字在实际项目中怎么用,包

重构老代码的时候发现这块可以优化,顺手整理成了这篇文章。 这篇文章主要讲Java 17 var关键字在实际项目中怎么用,包括一些我踩过的坑和总结的经验。 为什么关注这个技术 说实话刚开始接触的时候觉得没什么特别的,直到后来在生产环境遇到了实…

2026/11/12 9:04:37

附近哪里办到电工证在哪考,学历不高也能拿证拿高薪

附近哪里办到电工证在哪考,学历不高也能拿证拿高薪 你是不是也担心学历不高,连电工证都报不了名?别急,电工证其实对学历要求并不高,关键是你得知道 在哪考 ,才能顺利拿证。今天就来聊聊 附近哪里办到电工证…

2026/11/12 9:04:37

低压电工证色弱能考吗保姆级教程:郑州金水区小白也能看懂

低压电工证色弱能考吗保姆级教程:郑州金水区小白也能看懂 你是不是也遇到过这种情况:想考低压电工证,但听说色弱不能考,心里一慌,不知道从哪儿下手,更怕被那些中介坑了钱还办不成证?别急,这篇保姆级教程专为像你这样的郑州金水区初次报考人员量身打造…

2026/11/12 9:04:37

丽江市考电工证报名费多少钱?良心建议帮你少走弯路

丽江市考电工证报名费多少钱?良心建议帮你少走弯路 急需特种作业证才能上岗找工作,这是很多在丽江准备入行或转行的小伙伴的真实写照。特别是电工证,不仅关系到能否顺利上岗,还直接决定了你未来的职业发展空间。很多人一上来就问“丽江市考电工证报名费多…

2026/11/12 9:04:37

武警特种装备维修工官方报名入口在哪里?学历不高也能考吗

武警特种装备维修工官方报名入口在哪里?学历不高也能考吗 你是不是也在纠结, 学历不高怕报不上名 ?其实, 武警特种装备维修工 这个证,对学历的要求并不高,但它的含金量和就业前景却十分可观。很多像你一样的人,其实都是从零基础起步,通过…

2026/11/12 9:04:37

_电工证如何报考实操考试考什么

电工证如何报考网上查询外省证能不能转 之前考的证在外省能不能转过来?这几乎是每个想要报考或正在准备复审的电工同行都会问的问题。尤其是在河南信阳浉河区从事水利工程的电工朋友,很多时候需要跨区域施工,证书能否跨省使用直接关系到能不能顺利上岗。好…

2026/11/12 8:59:36

哪种电工证工资最高培训机构怎么选

电工证工资哪家高?实操考试心里没底怕挂科,良心建议来了 实操考试心里没底怕挂科,这是很多准备考电工证的朋友最真实的感受。尤其是面对【哪种电工证工资最高】这个问题,很多人不仅关心证书种类,更关心考哪一种能真正拿到高工资。但很多人也担心,培训费…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑