Skip to content

[space-infix-ops] Ignored around field initializers #1699

@dandv

Description

@dandv

I've setup my project with the recommended settings. ESLint rules defined in .eslintrc.cjs are triggered correctly, e.g 'space-infix-ops': 'error' triggers on const first='John'. What I don't see happen is that rule triggering on field initializers, but if I understand correctly the marriage between TypeScript and ESLint, this rule should be implemented separately; however, I haven't found a relevant rule under the supported rules, so maybe one should be made and hence the title of my bug is incorrect? Apologies for the confusion.

Repro

{
  "rules": {
    'space-infix-ops': 'error'
  }
}
class Person {
  first='John'
}

Expected Result
ESLint: Operator '=' must be spaced.(space-infix-ops)

Actual Result
Only the obvious warning, 1:7 warning 'Person' is defined but never used @typescript-eslint/no-unused-vars.

Additional Info

> prg@1.0.0 lint /home/dandv/prg/ts-eslint
> eslint err.ts --debug

  eslint:cli CLI args: [ 'err.ts', '--debug' ] +0ms
  eslint:cli Running on files +2ms
  eslint:config-array-factory Loading JSON config file: /home/dandv/prg/ts-eslint/package.json +0ms
  eslint:ignore-pattern Create with: [ IgnorePattern { patterns: [ '/node_modules/*', '/bower_components/*' ], basePath: '/home/dandv/prg/ts-eslint', loose: false } ] +0ms
  eslint:ignore-pattern   processed: { basePath: '/home/dandv/prg/ts-eslint', patterns: [ '/node_modules/*', '/bower_components/*' ] } +1ms
  eslint:ignore-pattern Create with: [ IgnorePattern { patterns: [ '/node_modules/*', '/bower_components/*' ], basePath: '/home/dandv/prg/ts-eslint', loose: false } ] +0ms
  eslint:ignore-pattern   processed: { basePath: '/home/dandv/prg/ts-eslint', patterns: [ '/node_modules/*', '/bower_components/*' ] } +0ms
  eslint:file-enumerator Start to iterate files: [ 'err.ts' ] +0ms
  eslint:file-enumerator File: /home/dandv/prg/ts-eslint/err.ts +0ms
  eslint:cascading-config-array-factory Load config files for /home/dandv/prg/ts-eslint. +0ms
  eslint:cascading-config-array-factory No cache found: /home/dandv/prg/ts-eslint. +0ms
  eslint:config-array-factory Loading JS config file: /home/dandv/prg/ts-eslint/.eslintrc.cjs +3ms
  eslint:config-array-factory Config file found: /home/dandv/prg/ts-eslint/.eslintrc.cjs +1ms
  eslint:config-array-factory Loading {extends:"eslint:recommended"} relative to /home/dandv/prg/ts-eslint/.eslintrc.cjs +0ms
  eslint:config-array-factory Loading JS config file: /home/dandv/prg/ts-eslint/node_modules/eslint/conf/eslint-recommended.js +0ms
  eslint:config-array-factory Loading {extends:"plugin:@typescript-eslint/eslint-recommended"} relative to /home/dandv/prg/ts-eslint/.eslintrc.cjs +2ms
  eslint:config-array-factory Loading plugin "@typescript-eslint" from /home/dandv/prg/ts-eslint/.eslintrc.cjs +0ms
  eslint:config-array-factory Loaded: @typescript-eslint/eslint-plugin@2.22.0 (/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js) +1ms
  eslint:config-array-factory Plugin /home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js loaded in: 135ms +135ms
  eslint:config-array-factory Loading {extends:"plugin:@typescript-eslint/recommended"} relative to /home/dandv/prg/ts-eslint/.eslintrc.cjs +1ms
  eslint:config-array-factory Loading plugin "@typescript-eslint" from /home/dandv/prg/ts-eslint/.eslintrc.cjs +0ms
  eslint:config-array-factory Loaded: @typescript-eslint/eslint-plugin@2.22.0 (/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js) +0ms
  eslint:config-array-factory Plugin /home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js loaded in: 0ms +0ms
  eslint:config-array-factory Loading {extends:"./configs/base.json"} relative to /home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js +1ms
  eslint:config-array-factory package.json was not found: Cannot find module './configs/base.json/package.json'
Require stack:
- /home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js +0ms
  eslint:config-array-factory Loaded: ./configs/base.json (/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.json) +0ms
  eslint:config-array-factory Loading JSON config file: /home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.json +0ms
  eslint:config-array-factory Loading parser "@typescript-eslint/parser" from /home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.json +0ms
  eslint:config-array-factory Loaded: @typescript-eslint/parser@2.22.0 (/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/parser/dist/parser.js) +0ms
  eslint:config-array-factory Loading plugin "@typescript-eslint" from /home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.json +23ms
  eslint:config-array-factory Loaded: @typescript-eslint/eslint-plugin@2.22.0 (/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js) +0ms
  eslint:config-array-factory Plugin /home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js loaded in: 0ms +0ms
  eslint:config-array-factory Loading parser "@typescript-eslint/parser" from /home/dandv/prg/ts-eslint/.eslintrc.cjs +0ms
  eslint:config-array-factory Loaded: @typescript-eslint/parser@2.22.0 (/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/parser/dist/parser.js) +0ms
  eslint:config-array-factory Loading plugin "@typescript-eslint" from /home/dandv/prg/ts-eslint/.eslintrc.cjs +0ms
  eslint:config-array-factory Loaded: @typescript-eslint/eslint-plugin@2.22.0 (/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js) +0ms
  eslint:config-array-factory Plugin /home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js loaded in: 0ms +0ms
  eslint:cascading-config-array-factory No cache found: /home/dandv/prg. +164ms
  eslint:config-array-factory Config file not found on /home/dandv/prg +0ms
  eslint:cascading-config-array-factory No cache found: /home/dandv. +0ms
  eslint:cascading-config-array-factory Stop traversing because of considered root. +0ms
  eslint:rules Loading rule 'constructor-super' (remaining=274) +0ms
  eslint:rules Loading rule 'for-direction' (remaining=273) +1ms
  eslint:rules Loading rule 'getter-return' (remaining=272) +0ms
  eslint:rules Loading rule 'no-async-promise-executor' (remaining=271) +1ms
  eslint:rules Loading rule 'no-case-declarations' (remaining=270) +0ms
  eslint:rules Loading rule 'no-class-assign' (remaining=269) +0ms
  eslint:rules Loading rule 'no-compare-neg-zero' (remaining=268) +1ms
  eslint:rules Loading rule 'no-cond-assign' (remaining=267) +0ms
  eslint:rules Loading rule 'no-const-assign' (remaining=266) +0ms
  eslint:rules Loading rule 'no-constant-condition' (remaining=265) +1ms
  eslint:rules Loading rule 'no-control-regex' (remaining=264) +0ms
  eslint:rules Loading rule 'no-debugger' (remaining=263) +1ms
  eslint:rules Loading rule 'no-delete-var' (remaining=262) +1ms
  eslint:rules Loading rule 'no-dupe-args' (remaining=261) +0ms
  eslint:rules Loading rule 'no-dupe-class-members' (remaining=260) +0ms
  eslint:rules Loading rule 'no-dupe-keys' (remaining=259) +0ms
  eslint:rules Loading rule 'no-duplicate-case' (remaining=258) +0ms
  eslint:rules Loading rule 'no-empty' (remaining=257) +1ms
  eslint:rules Loading rule 'no-empty-character-class' (remaining=256) +0ms
  eslint:rules Loading rule 'no-empty-pattern' (remaining=255) +1ms
  eslint:rules Loading rule 'no-ex-assign' (remaining=254) +0ms
  eslint:rules Loading rule 'no-extra-boolean-cast' (remaining=253) +0ms
  eslint:rules Loading rule 'no-extra-semi' (remaining=252) +0ms
  eslint:rules Loading rule 'no-fallthrough' (remaining=251) +0ms
  eslint:rules Loading rule 'no-func-assign' (remaining=250) +1ms
  eslint:rules Loading rule 'no-global-assign' (remaining=249) +0ms
  eslint:rules Loading rule 'no-inner-declarations' (remaining=248) +1ms
  eslint:rules Loading rule 'no-invalid-regexp' (remaining=247) +1ms
  eslint:rules Loading rule 'no-irregular-whitespace' (remaining=246) +0ms
  eslint:rules Loading rule 'no-misleading-character-class' (remaining=245) +1ms
  eslint:rules Loading rule 'no-mixed-spaces-and-tabs' (remaining=244) +1ms
  eslint:rules Loading rule 'no-new-symbol' (remaining=243) +1ms
  eslint:rules Loading rule 'no-obj-calls' (remaining=242) +0ms
  eslint:rules Loading rule 'no-octal' (remaining=241) +1ms
  eslint:rules Loading rule 'no-prototype-builtins' (remaining=240) +0ms
  eslint:rules Loading rule 'no-redeclare' (remaining=239) +0ms
  eslint:rules Loading rule 'no-regex-spaces' (remaining=238) +1ms
  eslint:rules Loading rule 'no-self-assign' (remaining=237) +0ms
  eslint:rules Loading rule 'no-shadow-restricted-names' (remaining=236) +1ms
  eslint:rules Loading rule 'no-sparse-arrays' (remaining=235) +0ms
  eslint:rules Loading rule 'no-this-before-super' (remaining=234) +0ms
  eslint:rules Loading rule 'no-undef' (remaining=233) +1ms
  eslint:rules Loading rule 'no-unexpected-multiline' (remaining=232) +0ms
  eslint:rules Loading rule 'no-unreachable' (remaining=231) +0ms
  eslint:rules Loading rule 'no-unsafe-finally' (remaining=230) +1ms
  eslint:rules Loading rule 'no-unsafe-negation' (remaining=229) +0ms
  eslint:rules Loading rule 'no-unused-labels' (remaining=228) +1ms
  eslint:rules Loading rule 'no-unused-vars' (remaining=227) +0ms
  eslint:rules Loading rule 'no-useless-catch' (remaining=226) +1ms
  eslint:rules Loading rule 'no-useless-escape' (remaining=225) +1ms
  eslint:rules Loading rule 'no-with' (remaining=224) +0ms
  eslint:rules Loading rule 'require-yield' (remaining=223) +0ms
  eslint:rules Loading rule 'use-isnan' (remaining=222) +0ms
  eslint:rules Loading rule 'valid-typeof' (remaining=221) +1ms
  eslint:rules Loading rule 'camelcase' (remaining=220) +2ms
  eslint:rules Loading rule 'no-array-constructor' (remaining=219) +6ms
  eslint:rules Loading rule 'no-empty-function' (remaining=218) +1ms
  eslint:rules Loading rule 'no-use-before-define' (remaining=217) +2ms
  eslint:rules Loading rule 'no-var' (remaining=216) +4ms
  eslint:rules Loading rule 'prefer-const' (remaining=215) +0ms
  eslint:rules Loading rule 'prefer-rest-params' (remaining=214) +1ms
  eslint:rules Loading rule 'prefer-spread' (remaining=213) +0ms
  eslint:rules Loading rule 'space-infix-ops' (remaining=212) +2ms
  eslint:cascading-config-array-factory Configuration was determined: ConfigArray(7) [ { name: 'DefaultIgnorePattern', filePath: '', criteria: null, env: undefined, globals: undefined, ignorePattern: IgnorePattern { patterns: [Array], basePath: '/home/dandv/prg/ts-eslint', loose: false }, noInlineConfig: undefined, parser: undefined, parserOptions: undefined, plugins: undefined, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: undefined, settings: undefined }, { name: '.eslintrc.cjs » eslint:recommended', filePath: '/home/dandv/prg/ts-eslint/node_modules/eslint/conf/eslint-recommended.js', criteria: null, env: undefined, globals: undefined, ignorePattern: undefined, noInlineConfig: undefined, parser: undefined, parserOptions: undefined, plugins: undefined, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: { 'constructor-super': 'error', 'for-direction': 'error', 'getter-return': 'error', 'no-async-promise-executor': 'error', 'no-case-declarations': 'error', 'no-class-assign': 'error', 'no-compare-neg-zero': 'error', 'no-cond-assign': 'error', 'no-const-assign': 'error', 'no-constant-condition': 'error', 'no-control-regex': 'error', 'no-debugger': 'error', 'no-delete-var': 'error', 'no-dupe-args': 'error', 'no-dupe-class-members': 'error', 'no-dupe-keys': 'error', 'no-duplicate-case': 'error', 'no-empty': 'error', 'no-empty-character-class': 'error', 'no-empty-pattern': 'error', 'no-ex-assign': 'error', 'no-extra-boolean-cast': 'error', 'no-extra-semi': 'error', 'no-fallthrough': 'error', 'no-func-assign': 'error', 'no-global-assign': 'error', 'no-inner-declarations': 'error', 'no-invalid-regexp': 'error', 'no-irregular-whitespace': 'error', 'no-misleading-character-class': 'error', 'no-mixed-spaces-and-tabs': 'error', 'no-new-symbol': 'error', 'no-obj-calls': 'error', 'no-octal': 'error', 'no-prototype-builtins': 'error', 'no-redeclare': 'error', 'no-regex-spaces': 'error', 'no-self-assign': 'error', 'no-shadow-restricted-names': 'error', 'no-sparse-arrays': 'error', 'no-this-before-super': 'error', 'no-undef': 'error', 'no-unexpected-multiline': 'error', 'no-unreachable': 'error', 'no-unsafe-finally': 'error', 'no-unsafe-negation': 'error', 'no-unused-labels': 'error', 'no-unused-vars': 'error', 'no-useless-catch': 'error', 'no-useless-escape': 'error', 'no-with': 'error', 'require-yield': 'error', 'use-isnan': 'error', 'valid-typeof': 'error' }, settings: undefined }, { name: '.eslintrc.cjs » plugin:@typescript-eslint/eslint-recommended', filePath: '/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js', criteria: null, env: undefined, globals: undefined, ignorePattern: undefined, noInlineConfig: undefined, parser: undefined, parserOptions: undefined, plugins: undefined, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: undefined, settings: undefined }, { name: '.eslintrc.cjs » plugin:@typescript-eslint/eslint-recommended#overrides[0]', filePath: '/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js', criteria: { includes: [Array], excludes: null, basePath: '/home/dandv/prg/ts-eslint' }, env: undefined, globals: undefined, ignorePattern: undefined, noInlineConfig: undefined, parser: undefined, parserOptions: undefined, plugins: undefined, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: { 'getter-return': 'off', 'no-dupe-args': 'off', 'no-dupe-keys': 'off', 'no-unreachable': 'off', 'valid-typeof': 'off', 'no-const-assign': 'off', 'no-new-symbol': 'off', 'no-this-before-super': 'off', 'no-undef': 'off', 'no-dupe-class-members': 'off', 'no-redeclare': 'off' }, settings: undefined }, { name: '.eslintrc.cjs » plugin:@typescript-eslint/recommended » ./configs/base.json', filePath: '/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.json', criteria: null, env: undefined, globals: undefined, ignorePattern: undefined, noInlineConfig: undefined, parser: { error: null, filePath: '/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/parser/dist/parser.js', id: '@typescript-eslint/parser', importerName: '.eslintrc.cjs » plugin:@typescript-eslint/recommended » ./configs/base.json', importerPath: '/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/configs/base.json' }, parserOptions: { sourceType: 'module' }, plugins: { '@typescript-eslint': [Object] }, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: undefined, settings: undefined }, { name: '.eslintrc.cjs » plugin:@typescript-eslint/recommended', filePath: '/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/eslint-plugin/dist/index.js', criteria: null, env: undefined, globals: undefined, ignorePattern: undefined, noInlineConfig: undefined, parser: undefined, parserOptions: undefined, plugins: undefined, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: { '@typescript-eslint/adjacent-overload-signatures': 'error', '@typescript-eslint/ban-ts-ignore': 'error', '@typescript-eslint/ban-types': 'error', camelcase: 'off', '@typescript-eslint/camelcase': 'error', '@typescript-eslint/class-name-casing': 'error', '@typescript-eslint/consistent-type-assertions': 'error', '@typescript-eslint/explicit-function-return-type': 'warn', '@typescript-eslint/interface-name-prefix': 'error', '@typescript-eslint/member-delimiter-style': 'error', 'no-array-constructor': 'off', '@typescript-eslint/no-array-constructor': 'error', 'no-empty-function': 'off', '@typescript-eslint/no-empty-function': 'error', '@typescript-eslint/no-empty-interface': 'error', '@typescript-eslint/no-explicit-any': 'warn', '@typescript-eslint/no-inferrable-types': 'error', '@typescript-eslint/no-misused-new': 'error', '@typescript-eslint/no-namespace': 'error', '@typescript-eslint/no-non-null-assertion': 'warn', '@typescript-eslint/no-this-alias': 'error', 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': 'warn', 'no-use-before-define': 'off', '@typescript-eslint/no-use-before-define': 'error', '@typescript-eslint/no-var-requires': 'error', '@typescript-eslint/prefer-namespace-keyword': 'error', '@typescript-eslint/triple-slash-reference': 'error', '@typescript-eslint/type-annotation-spacing': 'error', 'no-var': 'error', 'prefer-const': 'error', 'prefer-rest-params': 'error', 'prefer-spread': 'error' }, settings: undefined }, { name: '.eslintrc.cjs', filePath: '/home/dandv/prg/ts-eslint/.eslintrc.cjs', criteria: null, env: undefined, globals: undefined, ignorePattern: undefined, noInlineConfig: undefined, parser: { error: null, filePath: '/home/dandv/prg/ts-eslint/node_modules/@typescript-eslint/parser/dist/parser.js', id: '@typescript-eslint/parser', importerName: '.eslintrc.cjs', importerPath: '/home/dandv/prg/ts-eslint/.eslintrc.cjs' }, parserOptions: { ecmaVersion: 2019, sourceType: 'module' }, plugins: { '@typescript-eslint': [Object] }, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: { 'space-infix-ops': 'error' }, settings: undefined } ] on /home/dandv/prg/ts-eslint +42ms
  eslint:ignore-pattern Create with: [ IgnorePattern { patterns: [ '/node_modules/*', '/bower_components/*' ], basePath: '/home/dandv/prg/ts-eslint', loose: false } ] +210ms
  eslint:ignore-pattern   processed: { basePath: '/home/dandv/prg/ts-eslint', patterns: [ '/node_modules/*', '/bower_components/*' ] } +1ms
  eslint:ignore-pattern Check {
  filePath: '/home/dandv/prg/ts-eslint/err.ts',
  dot: false,
  relativePath: 'err.ts',
  result: false
} +0ms
  eslint:cli-engine Lint /home/dandv/prg/ts-eslint/err.ts +0ms
  eslint:linter Linting code for /home/dandv/prg/ts-eslint/err.ts (pass 1) +0ms
  eslint:linter Verify +0ms
  eslint:linter With ConfigArray: /home/dandv/prg/ts-eslint/err.ts +0ms
  eslint:linter Generating fixed text for /home/dandv/prg/ts-eslint/err.ts (pass 1) +30ms
  eslint:source-code-fixer Applying fixes +0ms
  eslint:source-code-fixer shouldFix parameter was false, not attempting fixes +0ms
  eslint:file-enumerator Complete iterating files: ["err.ts"] +240ms
  eslint:cli-engine Linting complete in: 241ms +30ms

/home/dandv/prg/ts-eslint/err.ts
  1:7  warning  'Person' is defined but never used  @typescript-eslint/no-unused-vars

✖ 1 problem (0 errors, 1 warning)

Versions

package version
@typescript-eslint/eslint-plugin 2.22.0
@typescript-eslint/parser 2.22.0
TypeScript 3.8.3
ESLint 6.8.0
node 13.9.0
npm 6.3.17

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions