| /** | |
| * @fileoverview Rule to check for tabs inside a file | |
| * @author Gyandeep Singh | |
| */ | |
| "use strict"; | |
| //------------------------------------------------------------------------------ | |
| // Helpers | |
| //------------------------------------------------------------------------------ | |
| const tabRegex = /\t+/gu; | |
| const anyNonWhitespaceRegex = /\S/u; | |
| //------------------------------------------------------------------------------ | |
| // Public Interface | |
| //------------------------------------------------------------------------------ | |
| module.exports = { | |
| meta: { | |
| type: "layout", | |
| docs: { | |
| description: "disallow all tabs", | |
| category: "Stylistic Issues", | |
| recommended: false, | |
| url: "https://eslint.org/docs/rules/no-tabs" | |
| }, | |
| schema: [{ | |
| type: "object", | |
| properties: { | |
| allowIndentationTabs: { | |
| type: "boolean", | |
| default: false | |
| } | |
| }, | |
| additionalProperties: false | |
| }] | |
| }, | |
| create(context) { | |
| const sourceCode = context.getSourceCode(); | |
| const allowIndentationTabs = context.options && context.options[0] && context.options[0].allowIndentationTabs; | |
| return { | |
| Program(node) { | |
| sourceCode.getLines().forEach((line, index) => { | |
| let match; | |
| while ((match = tabRegex.exec(line)) !== null) { | |
| if (allowIndentationTabs && !anyNonWhitespaceRegex.test(line.slice(0, match.index))) { | |
| continue; | |
| } | |
| context.report({ | |
| node, | |
| loc: { | |
| line: index + 1, | |
| column: match.index | |
| }, | |
| message: "Unexpected tab character." | |
| }); | |
| } | |
| }); | |
| } | |
| }; | |
| } | |
| }; |