| /** |
| * @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." |
| }); |
| } |
| }); |
| } |
| }; |
| } |
| }; |