简体   繁体   English

Angular 装饰字段的 ESLint 成员排序问题

[英]Angular ESLint Member Ordering issue with Decorated fields

I've been migrating a TSLint Angular project to ESLint and I encountered an issue when trying to configure @typescript-eslint/member-ordering .我一直在将 TSLint Angular 项目迁移到 ESLint,我在尝试配置@typescript-eslint/member-ordering时遇到了问题。 I want to keep the decorated setters after the other decorated fields:我想在其他装饰字段之后保留装饰设置器:

// place before decorated setter
@Input() foo: boolean;
@Input() bar: boolean;

// place after decorated field
@Input() set fooBar(val: number) { ... }

To achieve this I tried the following rule:为此,我尝试了以下规则:

"@typescript-eslint/member-ordering": [
    "warn",
    {
        "default": [
          "signature",
          ...
          "decorated-field",
          "decorated-set", // throws an error
          "field",
          ...
        ]
    }
]

But when I add the "decorated-set" I get this error in the ESLint output console:但是当我添加"decorated-set"时,我在 ESLint output 控制台中收到此错误:

Configuration for rule "@typescript-eslint/member-ordering" is invalid: Value [...] should be string.规则“@typescript-eslint/member-ordering”的配置无效:值 [...] 应该是字符串。 Value [...] should be equal to one of the allowed values.值 [...] 应等于允许值之一。 Value "decorated-set" should be equal to one of the allowed values.值“decorated-set”应等于允许值之一。 Value [...] should be object. Value [...] should match exactly one schema in oneOf.值 [...] 应为 object。值 [...] 应与 oneOf 中的一个模式完全匹配。

This error happens with any of the following members types:以下任何成员类型都会发生此错误:

"public-decorated-set", "protected-decorated-set", "private-decorated-set", "set", "public-decorated-get", "protected-decorated-get", "private-decorated-get", "get" "public-decorated-set", "protected-decorated-set", "private-decorated-set", "set", "public-decorated-get", "protected-decorated-get", "private-decorated-get “, “得到”

What am I doing wrong?我究竟做错了什么? How can I apply the intended settings?如何应用预期的设置?

[UPDATE] Complete ESLint output error: [更新] 完整的 ESLint output 错误:

Uncaught exception received.
Error: spawn C:\Program Files\Microsoft VS Code\Code.exe ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
    at onErrorNT (internal/child_process.js:465:16)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)
Uncaught exception received.
Error: spawn C:\Program Files\Microsoft VS Code\Code.exe ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
    at onErrorNT (internal/child_process.js:465:16)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)
Uncaught exception received.
Error: spawn C:\Program Files\Microsoft VS Code\Code.exe ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
    at onErrorNT (internal/child_process.js:465:16)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)
    at runNextTicks (internal/process/task_queues.js:62:3)
    at processImmediate (internal/timers.js:434:9)
Uncaught exception received.
Error: spawn C:\Program Files\Microsoft VS Code\Code.exe ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
    at onErrorNT (internal/child_process.js:465:16)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)
    at runNextTicks (internal/process/task_queues.js:62:3)
    at processImmediate (internal/timers.js:434:9)
(node:24588) UnhandledPromiseRejectionWarning: Error: apps\testApp\.eslintrc.json » ../../.eslintrc.json#overrides[0]:
    Configuration for rule "@typescript-eslint/member-ordering" is invalid:
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be string.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be equal to one of the allowed values.
    Value "decorated-set" should be equal to one of the allowed values.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be object.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should match exactly one schema in oneOf.

    at ConfigValidator.validateRuleOptions (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:144:23)
    at c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:199:18
    at Array.forEach (<anonymous>)
    at ConfigValidator.validateRules (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:196:34)
    at ConfigValidator.validateConfigArray (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:322:18)
    at CascadingConfigArrayFactory._finalizeConfigArray (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\cascading-config-array-factory.js:493:23)
    at CascadingConfigArrayFactory.getConfigArrayForFile (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\cascading-config-array-factory.js:299:21)
    at CLIEngine.getConfigForFile (c:\__PROJECTS\test-app\node_modules\eslint\lib\cli-engine\cli-engine.js:953:14)
    at A.calculateConfigForFile (c:\Users\ricky\.vscode\extensions\dbaeumer.vscode-eslint-2.2.2\server\out\eslintServer.js:1:167786)
    at c:\Users\ricky\.vscode\extensions\dbaeumer.vscode-eslint-2.2.2\server\out\eslintServer.js:1:176344
(Use `Code --trace-warnings ...` to show where the warning was created)
(node:24588) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 32)
(node:24588) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:24588) UnhandledPromiseRejectionWarning: Error: apps\testApp\.eslintrc.json » ../../.eslintrc.json#overrides[0]:
    Configuration for rule "@typescript-eslint/member-ordering" is invalid:
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be string.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be equal to one of the allowed values.
    Value "decorated-set" should be equal to one of the allowed values.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be object.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should match exactly one schema in oneOf.

    at ConfigValidator.validateRuleOptions (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:144:23)
    at c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:199:18
    at Array.forEach (<anonymous>)
    at ConfigValidator.validateRules (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:196:34)
    at ConfigValidator.validateConfigArray (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:322:18)
    at CascadingConfigArrayFactory._finalizeConfigArray (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\cascading-config-array-factory.js:493:23)
    at CascadingConfigArrayFactory.getConfigArrayForFile (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\cascading-config-array-factory.js:299:21)
    at CLIEngine.isPathIgnored (c:\__PROJECTS\test-app\node_modules\eslint\lib\cli-engine\cli-engine.js:973:18)
    at A.isPathIgnored (c:\Users\ricky\.vscode\extensions\dbaeumer.vscode-eslint-2.2.2\server\out\eslintServer.js:1:167532)
    at c:\Users\ricky\.vscode\extensions\dbaeumer.vscode-eslint-2.2.2\server\out\eslintServer.js:1:177304
(node:24588) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 34)
(node:24588) UnhandledPromiseRejectionWarning: Error: apps\testApp\.eslintrc.json » ../../.eslintrc.json#overrides[0]:
    Configuration for rule "@typescript-eslint/member-ordering" is invalid:
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be string.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be equal to one of the allowed values.
    Value "decorated-set" should be equal to one of the allowed values.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be object.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should match exactly one schema in oneOf.

    at ConfigValidator.validateRuleOptions (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:144:23)
    at c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:199:18
    at Array.forEach (<anonymous>)
    at ConfigValidator.validateRules (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:196:34)
    at ConfigValidator.validateConfigArray (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:322:18)
    at CascadingConfigArrayFactory._finalizeConfigArray (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\cascading-config-array-factory.js:493:23)
    at CascadingConfigArrayFactory.getConfigArrayForFile (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\cascading-config-array-factory.js:299:21)
    at CLIEngine.getConfigForFile (c:\__PROJECTS\test-app\node_modules\eslint\lib\cli-engine\cli-engine.js:953:14)
    at A.calculateConfigForFile (c:\Users\ricky\.vscode\extensions\dbaeumer.vscode-eslint-2.2.2\server\out\eslintServer.js:1:167786)
    at c:\Users\ricky\.vscode\extensions\dbaeumer.vscode-eslint-2.2.2\server\out\eslintServer.js:1:176344
(node:24588) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 37)
(node:24588) UnhandledPromiseRejectionWarning: Error: apps\testApp\.eslintrc.json » ../../.eslintrc.json#overrides[0]:
    Configuration for rule "@typescript-eslint/member-ordering" is invalid:
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be string.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be equal to one of the allowed values.
    Value "decorated-set" should be equal to one of the allowed values.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should be object.
    Value ["signature","private-static-field","protected-static-field","private-instance-field","protected-instance-field","private-abstract-field","protected-abstract-field","private-field","protected-field","static-field","instance-field","abstract-field","decorated-field","decorated-set","field","public-static-field","public-instance-field","public-abstract-field","public-field","public-constructor","protected-constructor","private-constructor","constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method","public-method","protected-method","private-method","static-method","instance-method","abstract-method","decorated-method","method"] should match exactly one schema in oneOf.

    at ConfigValidator.validateRuleOptions (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:144:23)
    at c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:199:18
    at Array.forEach (<anonymous>)
    at ConfigValidator.validateRules (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:196:34)
    at ConfigValidator.validateConfigArray (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\shared\config-validator.js:322:18)
    at CascadingConfigArrayFactory._finalizeConfigArray (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\cascading-config-array-factory.js:493:23)
    at CascadingConfigArrayFactory.getConfigArrayForFile (c:\__PROJECTS\test-app\node_modules\@eslint\eslintrc\lib\cascading-config-array-factory.js:299:21)
    at CLIEngine.getConfigForFile (c:\__PROJECTS\test-app\node_modules\eslint\lib\cli-engine\cli-engine.js:953:14)
    at A.calculateConfigForFile (c:\Users\ricky\.vscode\extensions\dbaeumer.vscode-eslint-2.2.2\server\out\eslintServer.js:1:167786)
    at c:\Users\ricky\.vscode\extensions\dbaeumer.vscode-eslint-2.2.2\server\out\eslintServer.js:1:176344
(node:24588) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 40)

This is the configuration I am currently using that works without errors:这是我目前使用的配置,没有错误:

"@typescript-eslint/member-ordering": [
  "error",
  {
    "default": {
      "memberTypes": [
        "public-decorated-field",
        "protected-decorated-field",
        "private-decorated-field",
        "public-static-field",
        "protected-static-field",
        "private-static-field",
        "public-instance-field",
        "public-abstract-field",
        "protected-instance-field",
        "protected-abstract-field",
        "private-instance-field",
        "private-abstract-field",
        "static-field",
        "public-field",
        "instance-field",
        "protected-field",
        "private-field",
        "abstract-field",
        "constructor",
        "public-static-method",
        "protected-static-method",
        "private-static-method",
        "public-method",
        "protected-method",
        "private-method"
      ]
    }
  }
]

It's not as complete as I would like to, but it does the job.它没有我想要的那么完整,但它完成了工作。 If I use the recommended configuration from the official documentation I get the same error you are reporting.如果我使用官方文档中的推荐配置,我会收到与您报告的相同的错误。

Could you try adding memberTypes ?您可以尝试添加memberTypes吗?

"@typescript-eslint/member-ordering": [
  "warn",
  {
    "default": {
      "memberTypes": [
        "signature",
        ...
        "decorated-field",
        "decorated-set",
        "field",
        ...
      ]
    }
  }
]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM