Eslint expected indentation of 1 tab but found 4 spaces error

时间:2017-04-08 22:32:02

标签: node.js config eslint

I am using VScode with latest version of Eslint. It is my first time using a linter.

I keep getting this linting error when using a tab as indentation:

severity: 'Error' message: 'Expected indentation of 1 tab but found 4 spaces. (indent)' at: '4,5' source: 'eslint'

Here is my config file

{
"env": {
    "browser": true,
    "commonjs": true,
    "es6": true,
    "node": true
},
"extends": "eslint:recommended",
"rules": {
    "indent": [
        "error",
        "tab"
    ],
    "linebreak-style": [
        "error",
        "unix"
    ],
    "quotes": [
        "error",
        "single"
    ],
    "semi": [
        "error",
        "always"
    ]
}
}

I don't understand why this error is being thrown as I indicated tabs for indentation. It is obviously calculating my 1 tab as 4 spaced but I don't understand why it is doing that when I am pressing tab for indentation.

update: The reason is because in VScode using ctrl + shift + i to beautify code will actually use spaces and not tabs. That is the reason.

8 个答案:

答案 0 :(得分:5)

在VSCODE中,转到菜单:

File / Preferences / Settings然后Text Editor(或仅在搜索设置框中搜索“标签”)

然后从以下设置中删除刻度:

  • Insert Spaces
  • Detect Indentation

还可以使用默认的VSCode键盘快捷键自动设置文档格式:

Shift + Alt + f

答案 1 :(得分:4)

是的,正是它所说的。你有你的配置"缩进":["错误","标签" ],所以它希望tab为缩进。但是在你的文件中发现了4个空格。删除空格并在您的文件中放置标签

答案 2 :(得分:2)

尝试在 .eslintrc.js 文件中禁用缩进

class paddle(object):
    def __init__(self, x, y, width, height):
        self.rect = pygame.Rect(x, y, width, height)

    def draw(self, win):
        pygame.draw.rect(win, (255,255,255), self.rect)

class ball(object):
    def __init__(self, x, y, side):
        self.rect = pygame.Rect(x, y, side, side)

    def draw(self, win):
        pygame.draw.rect(win, (255,255,255), self.rect)

这对我来说很好

答案 3 :(得分:2)

我遇到了类似的问题并使用此代码解决了:

rules: {
    ...
    indent: [2, "tab"],
    "no-tabs": 0,
    ...
}

答案 4 :(得分:1)

我使用VScode解决了这个问题。您所要做的就是将鼠标悬停在出现错误的部分上。 enter image description here

然后... enter image description here

答案 5 :(得分:0)

如果您同时使用 eslintprettier,请不要通过在规则对象中使用 {'indent': 'off'} 来禁用缩进。为了保证你的代码风格的一致性,你必须使用这个规则。

解决方案:

这个问题很可能是由于 eslint 和 prettier 冲突而发生的。 尝试在 .eslintrc 文件中使用不同的 eslint 选项。

如果您将鼠标悬停在 vsCode 中的错误行上,您可以在错误描述的末尾单击该链接以查看 eslint 文档。

例如,如果 indent 文档在此链接中:

Eslint Indent Docs

对我来说,通过添加这一行来解决错误(对于三元表达式):

...
rules: {
    indent: [
  'error',
  2,
  {
    SwitchCase: 1,
    ignoredNodes: ['ConditionalExpression'], <-- I add this line
  },
],
...

对于三元表达式,您也可以尝试使用 flatTernaryExpressionsoffsetTernaryExpressions

答案 6 :(得分:0)

我遇到了同样的问题,我用文档解决了我的问题。除了禁用 eslint 缩进,您可以按照文档中所示添加它。

Docs

简单:

rules: {
  indent: ['error', 2, { "MemberExpression": 1 }],
}

答案 7 :(得分:0)

您可以使用

自动修复问题
npm run lint -- --fix