英文:
The code formatted by Prettier is being flagged as non-compliant
问题
我使用 ESLint 和 Prettier 自动格式化 TypeScript 代码,但格式化后的代码仍然被标记为不符合 Prettier 的规则。
我的 eslint 配置:
module.exports = {
  root: true,
  env: { browser: true, es2020: true },
  settings: {
    'import/resolver': {
      'typescript': {}
    }
  },
  extends: [
    'prettier',
  ],
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    project: true,
    tsconfigRootDir: __dirname,
  },
  plugins: ['react-refresh', 'prettier'],
  rules: {
    'max-len': ['error', { code: 120 }],
    'prettier/prettier': [
      'error',
      {
        printWidth: 120,
        tabWidth: 2,
        useTabs: false,
        semi: false,
        singleQuote: true,
        quoteProps: 'as-needed',
        jsxSingleQuote: false,
        trailingComma: 'all',
        bracketSpacing: true,
        bracketSameLine: false,
        jsxBracketSameLine: false,
        arrowParens: 'avoid',
        requirePragma: false,
        insertPragma: false,
        proseWrap: 'preserve',
        htmlWhitespaceSensitivity: 'ignore',
        endOfLine: 'lf',
        singleAttributePerLine: true,
      }
    ],
    'no-confusing-arrow': 'off',
    'arrow-body-style': 'off',
    'prefer-arrow-callback': 'off',
  },
}
我的一个代码示例是:
type BasicDataStructureType = 'Integer' | 'Float' | 'Double' | 'Enumeration' | 'Boolean' | 'Array' | 'Struct'
Prettier 将其格式化为:
type BasicDataStructureType =
  | 'Integer'
  | 'Float'
  | 'Double'
  | 'Enumeration'
  | 'Boolean'
  | 'Array'
  | 'Struct'
格式化后的代码被标记为:将 ⏎  | 'Integer'⏎  | 'Float'⏎  | 'Double'⏎  | 'Enumeration'⏎  | 'Boolean'⏎  | 'Array'⏎ 替换为   | 'Integer'  | 'Float'  | 'Double'  | 'Enumeration'  | 'Boolean'  | 'Array'
另一个格式化后不符合规则的代码是:
const Api = {
  getDataStructureVersions: (param: { name: string; namespaceId: number }) =>
    request({ url: `/struct/version/list?${queryString.stringify(param)}`, method: 'GET' }),
}
它被标记为:删除 ⏎   
我的 eslint 或 prettier 配置是否正确?有人可以帮助我解决这个问题吗?否则,我将不得不移除 Prettier。
英文:
I use ESLint and Prettier to automatically format TypeScript code, but the formatted code is still being flagged as not compliant with Prettier's rules.
My eslint config:
module.exports = {
  root: true,
  env: { browser: true, es2020: true },
  settings: {
    'import/resolver': {
      'typescript': {}
    }
  },
  extends: [
    'prettier',
  ],
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    project: true,
    tsconfigRootDir: __dirname,
  },
  plugins: ['react-refresh', 'prettier'],
  rules: {
    'max-len': ['error', { code: 120 }],
    'prettier/prettier': [
      'error',
      {
        printWidth: 120,
        tabWidth: 2,
        useTabs: false,
        semi: false,
        singleQuote: true,
        quoteProps: 'as-needed',
        jsxSingleQuote: false,
        trailingComma: 'all',
        bracketSpacing: true,
        bracketSameLine: false,
        jsxBracketSameLine: false,
        arrowParens: 'avoid',
        requirePragma: false,
        insertPragma: false,
        proseWrap: 'preserve',
        htmlWhitespaceSensitivity: 'ignore',
        endOfLine: 'lf',
        singleAttributePerLine: true,
      }
    ],
    'no-confusing-arrow': 'off',
    'arrow-body-style': 'off',
    'prefer-arrow-callback': 'off',
  },
}
One of my code is like:
type BasicDataStructureType = 'Integer' | 'Float' | 'Double' | 'Enumeration' | 'Boolean' | 'Array' | 'Struct'
Prettier format it into:
type BasicDataStructureType =
  | 'Integer'
  | 'Float'
  | 'Double'
  | 'Enumeration'
  | 'Boolean'
  | 'Array'
  | 'Struct'
The formated code is flagged: Replace ⏎··|·'Integer'⏎··|·'Float'⏎··|·'Double'⏎··|·'Enumeration'⏎··|·'Boolean'⏎··|·'Array'⏎· with ·'Integer'·|·'Float'·|·'Double'·|·'Enumeration'·|·'Boolean'·|·'Array'
Another formatted non-compliant code is:
const Api = {
  getDataStructureVersions: (param: { name: string; namespaceId: number }) =>
    request({ url: `/struct/version/list?${queryString.stringify(param)}`, method: 'GET' }),
}
It is flagged as: Delete ⏎···
Is my eslint or prettier not configured properly? Can someone help me solve this issue? Otherwise, I'll have to remove Prettier.
答案1
得分: 1
OK,我自己解决了。
我使用了 Prettier 的 VSCode 插件,而不是 eslint-plugin-prettier。
但我仍然不知道为什么 eslint-plugin-prettier 不适用于我的 prettier 配置。只要我将 printWidth 设置为 105 或将 singleAttributePerLine 设置为 true,我的代码就会被标记为不合规。
英文:
OK,I solved myself.
I use Prettier vscode plugin instead of eslint-plugin-prettier.
But I still don't know why eslint-plugin-prettier doesn't work around with my prettier config. As long as I set printWidth to 105 or set singleAttributePerLine to true, my code was flagged as not compliant.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论