meteor / eslint-plugin-meteor

🧐 Meteor specific linting rules for ESLint
https://medium.com/@dferber90/8f229ebc7942
MIT License
118 stars 20 forks source link

validateEventDefinition is receiving undefined node, then trying to reference value on undefined #781

Closed jhyman2 closed 3 years ago

jhyman2 commented 3 years ago

Hello kind eslint-plugin-meteor folks,

I love this plugin, but I have recently encountered an issue that I'd love to help fix if I can. I am using Meteor, and I am using eslint. I am consolidating our eslint config files into one, and I just tried running eslint via the CLI. I ran into an eslint crash that I cannot figure out how to fix. If you'd like, I can dig into this and try to submit a PR.

My codebase has millions of lines of code, and this is the only line in the entire codebase that is crashing. If I remove it, then eslint runs successfully and I find out I have 74266 problems (68248 errors, 6018 warnings).

The line that is crashing is this: ...SharedFeatures.EVENT_HANDLERS.

The object that it's referencing is defined like this

const SharedFeature = Template.SharedFeatures;

Template.SharedFeatures = {
  EVENT_HANDLERS: {
    'click .some-classname': function (e, tmpl) {
      //
    },
  },
}

This line doesn't seem to have anything unusual that the rest of the codebase doesn't have. I can't share too much because of proprietary information.

Thank you for all your hard work you put into this plugin!

Here is the debug output:

> my_app@1.0.0 lint /Users/me/my_app/app
> eslint --debug -c ../.eslintrc.json ./my_file.ts

  eslint:cli CLI args: [ '--debug', '-c', '../.eslintrc.json', './my_file.ts ] +0ms
  eslint:cli Running on files +5ms
  eslint:ignore-pattern Create with: [ IgnorePattern { patterns: [ '/**/node_modules/*' ], basePath: '/Users/me/my_app/app', loose: false } ] +0ms
  eslint:ignore-pattern   processed: { basePath:  '/Users/me/my_app/app', patterns: [ '/**/node_modules/*' ] } +2ms
  eslint:ignore-pattern Create with: [ IgnorePattern { patterns: [ '/**/node_modules/*' ], basePath:  '/Users/me/my_app/app', loose: false } ] +0ms
  eslint:ignore-pattern   processed: { basePath:  '/Users/me/my_app/app', patterns: [ '/**/node_modules/*' ] } +0ms
  eslint:file-enumerator Start to iterate files: [ './my_file.ts' ] +0ms
  eslint:file-enumerator File:  '/Users/me/my_app/app/my_file.ts +0ms
  eslint:rules Loading rule 'accessor-pairs' (remaining=281) +0ms
  eslint:rules Loading rule 'array-callback-return' (remaining=280) +6ms
  eslint:rules Loading rule 'block-scoped-var' (remaining=279) +3ms
  eslint:rules Loading rule 'complexity' (remaining=278) +1ms
  eslint:rules Loading rule 'class-methods-use-this' (remaining=277) +1ms
  eslint:rules Loading rule 'consistent-return' (remaining=276) +5ms
  eslint:rules Loading rule 'curly' (remaining=275) +2ms
  eslint:rules Loading rule 'default-case' (remaining=274) +2ms
  eslint:rules Loading rule 'default-case-last' (remaining=273) +2ms
  eslint:rules Loading rule 'default-param-last' (remaining=272) +0ms
  eslint:rules Loading rule 'dot-notation' (remaining=271) +1ms
  eslint:rules Loading rule 'dot-location' (remaining=270) +3ms
  eslint:rules Loading rule 'eqeqeq' (remaining=269) +1ms
  eslint:rules Loading rule 'grouped-accessor-pairs' (remaining=268) +2ms
  eslint:rules Loading rule 'guard-for-in' (remaining=267) +2ms
  eslint:rules Loading rule 'max-classes-per-file' (remaining=266) +0ms
  eslint:rules Loading rule 'no-alert' (remaining=265) +2ms
  eslint:rules Loading rule 'no-caller' (remaining=264) +1ms
  eslint:rules Loading rule 'no-case-declarations' (remaining=263) +1ms
  eslint:rules Loading rule 'no-constructor-return' (remaining=262) +0ms
  eslint:rules Loading rule 'no-div-regex' (remaining=261) +1ms
  eslint:rules Loading rule 'no-else-return' (remaining=260) +1ms
  eslint:rules Loading rule 'no-empty-function' (remaining=259) +3ms
  eslint:rules Loading rule 'no-empty-pattern' (remaining=258) +2ms
  eslint:rules Loading rule 'no-eq-null' (remaining=257) +1ms
  eslint:rules Loading rule 'no-eval' (remaining=256) +1ms
  eslint:rules Loading rule 'no-extend-native' (remaining=255) +1ms
  eslint:rules Loading rule 'no-extra-bind' (remaining=254) +4ms
  eslint:rules Loading rule 'no-extra-label' (remaining=253) +0ms
  eslint:rules Loading rule 'no-fallthrough' (remaining=252) +1ms
  eslint:rules Loading rule 'no-floating-decimal' (remaining=251) +1ms
  eslint:rules Loading rule 'no-global-assign' (remaining=250) +1ms
  eslint:rules Loading rule 'no-native-reassign' (remaining=249) +1ms
  eslint:rules Loading rule 'no-implicit-coercion' (remaining=248) +1ms
  eslint:rules Loading rule 'no-implicit-globals' (remaining=247) +1ms
  eslint:rules Loading rule 'no-implied-eval' (remaining=246) +1ms
  eslint:rules Loading rule 'no-invalid-this' (remaining=245) +1ms
  eslint:rules Loading rule 'no-iterator' (remaining=244) +1ms
  eslint:rules Loading rule 'no-labels' (remaining=243) +1ms
  eslint:rules Loading rule 'no-lone-blocks' (remaining=242) +1ms
  eslint:rules Loading rule 'no-loop-func' (remaining=241) +1ms
  eslint:rules Loading rule 'no-magic-numbers' (remaining=240) +5ms
  eslint:rules Loading rule 'no-multi-spaces' (remaining=239) +1ms
  eslint:rules Loading rule 'no-multi-str' (remaining=238) +1ms
  eslint:rules Loading rule 'no-new' (remaining=237) +1ms
  eslint:rules Loading rule 'no-new-func' (remaining=236) +6ms
  eslint:rules Loading rule 'no-new-wrappers' (remaining=235) +0ms
  eslint:rules Loading rule 'no-octal' (remaining=234) +1ms
  eslint:rules Loading rule 'no-octal-escape' (remaining=233) +1ms
  eslint:rules Loading rule 'no-param-reassign' (remaining=232) +1ms
  eslint:rules Loading rule 'no-proto' (remaining=231) +3ms
  eslint:rules Loading rule 'no-redeclare' (remaining=230) +2ms
  eslint:rules Loading rule 'no-restricted-properties' (remaining=229) +9ms
  eslint:rules Loading rule 'no-return-assign' (remaining=228) +5ms
  eslint:rules Loading rule 'no-return-await' (remaining=227) +1ms
  eslint:rules Loading rule 'no-script-url' (remaining=226) +1ms
  eslint:rules Loading rule 'no-self-assign' (remaining=225) +0ms
  eslint:rules Loading rule 'no-self-compare' (remaining=224) +2ms
  eslint:rules Loading rule 'no-sequences' (remaining=223) +0ms
  eslint:rules Loading rule 'no-throw-literal' (remaining=222) +1ms
  eslint:rules Loading rule 'no-unmodified-loop-condition' (remaining=221) +1ms
  eslint:rules Loading rule 'no-unused-expressions' (remaining=220) +1ms
  eslint:rules Loading rule 'no-unused-labels' (remaining=219) +3ms
  eslint:rules Loading rule 'no-useless-call' (remaining=218) +1ms
  eslint:rules Loading rule 'no-useless-catch' (remaining=217) +1ms
  eslint:rules Loading rule 'no-useless-concat' (remaining=216) +0ms
  eslint:rules Loading rule 'no-useless-escape' (remaining=215) +1ms
  eslint:rules Loading rule 'no-useless-return' (remaining=214) +1ms
  eslint:rules Loading rule 'no-void' (remaining=213) +1ms
  eslint:rules Loading rule 'no-warning-comments' (remaining=212) +2ms
  eslint:rules Loading rule 'no-with' (remaining=211) +1ms
  eslint:rules Loading rule 'prefer-promise-reject-errors' (remaining=210) +0ms
  eslint:rules Loading rule 'prefer-named-capture-group' (remaining=209) +7ms
  eslint:rules Loading rule 'prefer-regex-literals' (remaining=208) +6ms
  eslint:rules Loading rule 'radix' (remaining=207) +1ms
  eslint:rules Loading rule 'require-await' (remaining=206) +1ms
  eslint:rules Loading rule 'require-unicode-regexp' (remaining=205) +1ms
  eslint:rules Loading rule 'vars-on-top' (remaining=204) +0ms
  eslint:rules Loading rule 'wrap-iife' (remaining=203) +1ms
  eslint:rules Loading rule 'yoda' (remaining=202) +2ms
  eslint:rules Loading rule 'for-direction' (remaining=201) +1ms
  eslint:rules Loading rule 'getter-return' (remaining=200) +1ms
  eslint:rules Loading rule 'no-async-promise-executor' (remaining=199) +1ms
  eslint:rules Loading rule 'no-await-in-loop' (remaining=198) +1ms
  eslint:rules Loading rule 'no-compare-neg-zero' (remaining=197) +1ms
  eslint:rules Loading rule 'no-cond-assign' (remaining=196) +2ms
  eslint:rules Loading rule 'no-console' (remaining=195) +1ms
  eslint:rules Loading rule 'no-constant-condition' (remaining=194) +2ms
  eslint:rules Loading rule 'no-control-regex' (remaining=193) +1ms
  eslint:rules Loading rule 'no-debugger' (remaining=192) +1ms
  eslint:rules Loading rule 'no-dupe-args' (remaining=191) +1ms
  eslint:rules Loading rule 'no-dupe-else-if' (remaining=190) +4ms
  eslint:rules Loading rule 'no-dupe-keys' (remaining=189) +1ms
  eslint:rules Loading rule 'no-duplicate-case' (remaining=188) +1ms
  eslint:rules Loading rule 'no-empty' (remaining=187) +2ms
  eslint:rules Loading rule 'no-empty-character-class' (remaining=186) +2ms
  eslint:rules Loading rule 'no-ex-assign' (remaining=185) +0ms
  eslint:rules Loading rule 'no-extra-boolean-cast' (remaining=184) +1ms
  eslint:rules Loading rule 'no-extra-parens' (remaining=183) +1ms
  eslint:rules Loading rule 'no-extra-semi' (remaining=182) +1ms
  eslint:rules Loading rule 'no-func-assign' (remaining=181) +1ms
  eslint:rules Loading rule 'no-import-assign' (remaining=180) +1ms
  eslint:rules Loading rule 'no-inner-declarations' (remaining=179) +1ms
  eslint:rules Loading rule 'no-invalid-regexp' (remaining=178) +2ms
  eslint:rules Loading rule 'no-irregular-whitespace' (remaining=177) +2ms
  eslint:rules Loading rule 'no-loss-of-precision' (remaining=176) +2ms
  eslint:rules Loading rule 'no-misleading-character-class' (remaining=175) +0ms
  eslint:rules Loading rule 'no-obj-calls' (remaining=174) +12ms
  eslint:rules Loading rule 'no-promise-executor-return' (remaining=173) +1ms
  eslint:rules Loading rule 'no-prototype-builtins' (remaining=172) +0ms
  eslint:rules Loading rule 'no-regex-spaces' (remaining=171) +1ms
  eslint:rules Loading rule 'no-setter-return' (remaining=170) +1ms
  eslint:rules Loading rule 'no-sparse-arrays' (remaining=169) +1ms
  eslint:rules Loading rule 'no-template-curly-in-string' (remaining=168) +1ms
  eslint:rules Loading rule 'no-unexpected-multiline' (remaining=167) +1ms
  eslint:rules Loading rule 'no-unreachable' (remaining=166) +1ms
  eslint:rules Loading rule 'no-unreachable-loop' (remaining=165) +1ms
  eslint:rules Loading rule 'no-unsafe-finally' (remaining=164) +0ms
  eslint:rules Loading rule 'no-unsafe-negation' (remaining=163) +1ms
  eslint:rules Loading rule 'no-useless-backreference' (remaining=162) +2ms
  eslint:rules Loading rule 'no-negated-in-lhs' (remaining=161) +2ms
  eslint:rules Loading rule 'require-atomic-updates' (remaining=160) +0ms
  eslint:rules Loading rule 'use-isnan' (remaining=159) +1ms
  eslint:rules Loading rule 'valid-jsdoc' (remaining=158) +2ms
  eslint:rules Loading rule 'valid-typeof' (remaining=157) +5ms
  eslint:rules Loading rule 'callback-return' (remaining=156) +2ms
  eslint:rules Loading rule 'global-require' (remaining=155) +1ms
  eslint:rules Loading rule 'handle-callback-err' (remaining=154) +0ms
  eslint:rules Loading rule 'no-buffer-constructor' (remaining=153) +1ms
  eslint:rules Loading rule 'no-mixed-requires' (remaining=152) +1ms
  eslint:rules Loading rule 'no-new-require' (remaining=151) +0ms
  eslint:rules Loading rule 'no-path-concat' (remaining=150) +1ms
  eslint:rules Loading rule 'no-process-env' (remaining=149) +1ms
  eslint:rules Loading rule 'no-process-exit' (remaining=148) +0ms
  eslint:rules Loading rule 'no-restricted-modules' (remaining=147) +1ms
  eslint:rules Loading rule 'no-sync' (remaining=146) +1ms
  eslint:rules Loading rule 'array-bracket-newline' (remaining=145) +0ms
  eslint:rules Loading rule 'array-element-newline' (remaining=144) +1ms
  eslint:rules Loading rule 'array-bracket-spacing' (remaining=143) +1ms
  eslint:rules Loading rule 'block-spacing' (remaining=142) +1ms
  eslint:rules Loading rule 'brace-style' (remaining=141) +1ms
  eslint:rules Loading rule 'camelcase' (remaining=140) +2ms
  eslint:rules Loading rule 'capitalized-comments' (remaining=139) +2ms
  eslint:rules Loading rule 'comma-dangle' (remaining=138) +1ms
  eslint:rules Loading rule 'comma-spacing' (remaining=137) +2ms
  eslint:rules Loading rule 'comma-style' (remaining=136) +2ms
  eslint:rules Loading rule 'computed-property-spacing' (remaining=135) +2ms
  eslint:rules Loading rule 'consistent-this' (remaining=134) +2ms
  eslint:rules Loading rule 'eol-last' (remaining=133) +1ms
  eslint:rules Loading rule 'function-call-argument-newline' (remaining=132) +1ms
  eslint:rules Loading rule 'func-call-spacing' (remaining=131) +0ms
  eslint:rules Loading rule 'func-name-matching' (remaining=130) +2ms
  eslint:rules Loading rule 'func-names' (remaining=129) +2ms
  eslint:rules Loading rule 'func-style' (remaining=128) +1ms
  eslint:rules Loading rule 'function-paren-newline' (remaining=127) +1ms
  eslint:rules Loading rule 'id-blacklist' (remaining=126) +1ms
  eslint:rules Loading rule 'id-denylist' (remaining=125) +1ms
  eslint:rules Loading rule 'id-length' (remaining=124) +1ms
  eslint:rules Loading rule 'id-match' (remaining=123) +0ms
  eslint:rules Loading rule 'implicit-arrow-linebreak' (remaining=122) +1ms
  eslint:rules Loading rule 'indent' (remaining=121) +1ms
  eslint:rules Loading rule 'jsx-quotes' (remaining=120) +13ms
  eslint:rules Loading rule 'key-spacing' (remaining=119) +1ms
  eslint:rules Loading rule 'keyword-spacing' (remaining=118) +7ms
  eslint:rules Loading rule 'line-comment-position' (remaining=117) +32ms
  eslint:rules Loading rule 'linebreak-style' (remaining=116) +1ms
  eslint:rules Loading rule 'lines-between-class-members' (remaining=115) +1ms
  eslint:rules Loading rule 'lines-around-comment' (remaining=114) +1ms
  eslint:rules Loading rule 'lines-around-directive' (remaining=113) +1ms
  eslint:rules Loading rule 'max-depth' (remaining=112) +2ms
  eslint:rules Loading rule 'max-len' (remaining=111) +0ms
  eslint:rules Loading rule 'max-lines' (remaining=110) +8ms
  eslint:rules Loading rule 'max-lines-per-function' (remaining=109) +1ms
  eslint:rules Loading rule 'max-nested-callbacks' (remaining=108) +1ms
  eslint:rules Loading rule 'max-params' (remaining=107) +1ms
  eslint:rules Loading rule 'max-statements' (remaining=106) +0ms
  eslint:rules Loading rule 'max-statements-per-line' (remaining=105) +1ms
  eslint:rules Loading rule 'multiline-comment-style' (remaining=104) +0ms
  eslint:rules Loading rule 'multiline-ternary' (remaining=103) +1ms
  eslint:rules Loading rule 'new-cap' (remaining=102) +1ms
  eslint:rules Loading rule 'new-parens' (remaining=101) +2ms
  eslint:rules Loading rule 'newline-after-var' (remaining=100) +1ms
  eslint:rules Loading rule 'newline-before-return' (remaining=99) +1ms
  eslint:rules Loading rule 'newline-per-chained-call' (remaining=98) +0ms
  eslint:rules Loading rule 'no-array-constructor' (remaining=97) +1ms
  eslint:rules Loading rule 'no-bitwise' (remaining=96) +1ms
  eslint:rules Loading rule 'no-continue' (remaining=95) +1ms
  eslint:rules Loading rule 'no-inline-comments' (remaining=94) +1ms
  eslint:rules Loading rule 'no-lonely-if' (remaining=93) +0ms
  eslint:rules Loading rule 'no-mixed-operators' (remaining=92) +1ms
  eslint:rules Loading rule 'no-mixed-spaces-and-tabs' (remaining=91) +2ms
  eslint:rules Loading rule 'no-multi-assign' (remaining=90) +1ms
  eslint:rules Loading rule 'no-multiple-empty-lines' (remaining=89) +1ms
  eslint:rules Loading rule 'no-negated-condition' (remaining=88) +2ms
  eslint:rules Loading rule 'no-nested-ternary' (remaining=87) +0ms
  eslint:rules Loading rule 'no-new-object' (remaining=86) +1ms
  eslint:rules Loading rule 'no-plusplus' (remaining=85) +0ms
  eslint:rules Loading rule 'no-restricted-syntax' (remaining=84) +2ms
  eslint:rules Loading rule 'no-spaced-func' (remaining=83) +1ms
  eslint:rules Loading rule 'no-tabs' (remaining=82) +1ms
  eslint:rules Loading rule 'no-ternary' (remaining=81) +1ms
  eslint:rules Loading rule 'no-trailing-spaces' (remaining=80) +0ms
  eslint:rules Loading rule 'no-underscore-dangle' (remaining=79) +2ms
  eslint:rules Loading rule 'no-unneeded-ternary' (remaining=78) +2ms
  eslint:rules Loading rule 'no-whitespace-before-property' (remaining=77) +1ms
  eslint:rules Loading rule 'nonblock-statement-body-position' (remaining=76) +1ms
  eslint:rules Loading rule 'object-curly-spacing' (remaining=75) +2ms
  eslint:rules Loading rule 'object-curly-newline' (remaining=74) +2ms
  eslint:rules Loading rule 'object-property-newline' (remaining=73) +5ms
  eslint:rules Loading rule 'one-var' (remaining=72) +1ms
  eslint:rules Loading rule 'one-var-declaration-per-line' (remaining=71) +2ms
  eslint:rules Loading rule 'operator-assignment' (remaining=70) +0ms
  eslint:rules Loading rule 'operator-linebreak' (remaining=69) +1ms
  eslint:rules Loading rule 'padded-blocks' (remaining=68) +2ms
  eslint:rules Loading rule 'padding-line-between-statements' (remaining=67) +2ms
  eslint:rules Loading rule 'prefer-exponentiation-operator' (remaining=66) +2ms
  eslint:rules Loading rule 'prefer-object-spread' (remaining=65) +0ms
  eslint:rules Loading rule 'quote-props' (remaining=64) +1ms
  eslint:rules Loading rule 'quotes' (remaining=63) +3ms
  eslint:rules Loading rule 'require-jsdoc' (remaining=62) +1ms
  eslint:rules Loading rule 'semi' (remaining=61) +1ms
  eslint:rules Loading rule 'semi-spacing' (remaining=60) +2ms
  eslint:rules Loading rule 'semi-style' (remaining=59) +1ms
  eslint:rules Loading rule 'sort-keys' (remaining=58) +1ms
  eslint:rules Loading rule 'sort-vars' (remaining=57) +1ms
  eslint:rules Loading rule 'space-before-blocks' (remaining=56) +1ms
  eslint:rules Loading rule 'space-before-function-paren' (remaining=55) +2ms
  eslint:rules Loading rule 'space-in-parens' (remaining=54) +2ms
  eslint:rules Loading rule 'space-infix-ops' (remaining=53) +2ms
  eslint:rules Loading rule 'space-unary-ops' (remaining=52) +2ms
  eslint:rules Loading rule 'spaced-comment' (remaining=51) +1ms
  eslint:rules Loading rule 'switch-colon-spacing' (remaining=50) +3ms
  eslint:rules Loading rule 'template-tag-spacing' (remaining=49) +1ms
  eslint:rules Loading rule 'unicode-bom' (remaining=48) +0ms
  eslint:rules Loading rule 'wrap-regex' (remaining=47) +1ms
  eslint:rules Loading rule 'init-declarations' (remaining=46) +1ms
  eslint:rules Loading rule 'no-catch-shadow' (remaining=45) +0ms
  eslint:rules Loading rule 'no-delete-var' (remaining=44) +1ms
  eslint:rules Loading rule 'no-label-var' (remaining=43) +0ms
  eslint:rules Loading rule 'no-restricted-globals' (remaining=42) +5ms
  eslint:rules Loading rule 'no-shadow' (remaining=41) +2ms
  eslint:rules Loading rule 'no-shadow-restricted-names' (remaining=40) +2ms
  eslint:rules Loading rule 'no-undef' (remaining=39) +0ms
  eslint:rules Loading rule 'no-undef-init' (remaining=38) +1ms
  eslint:rules Loading rule 'no-undefined' (remaining=37) +1ms
  eslint:rules Loading rule 'no-unused-vars' (remaining=36) +0ms
  eslint:rules Loading rule 'no-use-before-define' (remaining=35) +2ms
  eslint:rules Loading rule 'arrow-body-style' (remaining=34) +2ms
  eslint:rules Loading rule 'arrow-parens' (remaining=33) +2ms
  eslint:rules Loading rule 'arrow-spacing' (remaining=32) +2ms
  eslint:rules Loading rule 'constructor-super' (remaining=31) +1ms
  eslint:rules Loading rule 'generator-star-spacing' (remaining=30) +1ms
  eslint:rules Loading rule 'no-class-assign' (remaining=29) +2ms
  eslint:rules Loading rule 'no-confusing-arrow' (remaining=28) +1ms
  eslint:rules Loading rule 'no-const-assign' (remaining=27) +1ms
  eslint:rules Loading rule 'no-dupe-class-members' (remaining=26) +0ms
  eslint:rules Loading rule 'no-duplicate-imports' (remaining=25) +1ms
  eslint:rules Loading rule 'no-new-symbol' (remaining=24) +0ms
  eslint:rules Loading rule 'no-restricted-exports' (remaining=23) +1ms
  eslint:rules Loading rule 'no-restricted-imports' (remaining=22) +0ms
  eslint:rules Loading rule 'no-this-before-super' (remaining=21) +1ms
  eslint:rules Loading rule 'no-useless-computed-key' (remaining=20) +0ms
  eslint:rules Loading rule 'no-useless-constructor' (remaining=19) +1ms
  eslint:rules Loading rule 'no-useless-rename' (remaining=18) +1ms
  eslint:rules Loading rule 'no-var' (remaining=17) +1ms
  eslint:rules Loading rule 'object-shorthand' (remaining=16) +0ms
  eslint:rules Loading rule 'prefer-arrow-callback' (remaining=15) +3ms
  eslint:rules Loading rule 'prefer-const' (remaining=14) +1ms
  eslint:rules Loading rule 'prefer-destructuring' (remaining=13) +2ms
  eslint:rules Loading rule 'prefer-numeric-literals' (remaining=12) +2ms
  eslint:rules Loading rule 'prefer-reflect' (remaining=11) +0ms
  eslint:rules Loading rule 'prefer-rest-params' (remaining=10) +1ms
  eslint:rules Loading rule 'prefer-spread' (remaining=9) +1ms
  eslint:rules Loading rule 'prefer-template' (remaining=8) +0ms
  eslint:rules Loading rule 'require-yield' (remaining=7) +1ms
  eslint:rules Loading rule 'rest-spread-spacing' (remaining=6) +1ms
  eslint:rules Loading rule 'sort-imports' (remaining=5) +0ms
  eslint:rules Loading rule 'symbol-description' (remaining=4) +1ms
  eslint:rules Loading rule 'template-curly-spacing' (remaining=3) +0ms
  eslint:rules Loading rule 'yield-star-spacing' (remaining=2) +1ms
  eslint:rules Loading rule 'strict' (remaining=1) +12ms
  eslint:rules Loading rule 'indent-legacy' (remaining=0) +56ms
  eslint:ignore-pattern Create with: [ IgnorePattern { patterns: [ '/**/node_modules/*' ], basePath: '/Users/me/my_app/app', loose: false } ] +527ms
  eslint:ignore-pattern   processed: { basePath: '/Users/me/my_app/app', patterns: [ '/**/node_modules/*' ] } +1ms
  eslint:ignore-pattern Check { filePath:
   '/Users/me/my_app/app/my_file.ts',
  dot: false,
  relativePath:
   'my_file.ts',
  result: false } +0ms
  eslint:cli-engine Lint /Users/me/my_app/app/my_file.ts +0ms
  eslint:linter Linting code for /Users/me/my_app/app/my_file.ts (pass 1) +0ms
  eslint:linter Verify +0ms
  eslint:linter With ConfigArray: /Users/me/my_app/app/my_file.ts +0ms
  eslint:linter An error occurred while traversing +832ms
  eslint:linter Filename: /Users/me/my_app/app/my_file.ts +0ms
  eslint:linter Line: 286 +0ms
  eslint:linter Parser Options: { ecmaFeatures:
   { globalReturn: false,
     impliedStrict: true,
     experimentalObjectRestSpread: true,
     jsx: true,
     generators: false,
     objectLiteralDuplicateProperties: false },
  ecmaVersion: 6,
  sourceType: 'module' } +0ms
  eslint:linter Parser Path: /Users/me/my_app/node_modules/@typescript-eslint/parser/dist/index.js +0ms
  eslint:linter Settings: { 'import/resolver':
   { meteor: { extensions: [Array] },
     node: { extensions: [Array] } },
  react: { pragma: 'React', version: 'detect' },
  propWrapperFunctions: [ 'forbidExtraProps', 'exact', 'Object.freeze' ],
  'import/extensions': [ '.js', '.mjs', '.jsx' ],
  'import/core-modules': [],
  'import/ignore':
   [ 'node_modules', '\\.(coffee|scss|css|less|hbs|svg|json)$' ] } +0ms

Oops! Something went wrong! :(

ESLint: 7.13.0

TypeError: Cannot read property 'type' of undefined
Occurred while linting /Users/me/my_app/app/my_file.ts:286
    at validateEventDefinition (/Users/me/my_app/node_modules/eslint-plugin-meteor/lib/rules/eventmap-params.js:60:35)
    at Array.forEach (<anonymous>)
    at CallExpression (/Users/me/my_app/node_modules/eslint-plugin-meteor/lib/rules/eventmap-params.js:96:31)
    at listeners.(anonymous function).forEach.listener (/Users/me/my_app/app/node_modules/eslint/lib/linter/safe-emitter.js:45:58)
    at Array.forEach (<anonymous>)
    at Object.emit (/Users/me/my_app/app/node_modules/eslint/lib/linter/safe-emitter.js:45:38)
    at NodeEventGenerator.applySelector (/Users/me/my_app/app/node_modules/eslint/lib/linter/node-event-generator.js:254:26)
    at NodeEventGenerator.applySelectors (/Users/me/my_app/app/node_modules/eslint/lib/linter/node-event-generator.js:283:22)
    at NodeEventGenerator.enterNode (/Users/me/my_app/app/node_modules/eslint/lib/linter/node-event-generator.js:297:14)
    at CodePathAnalyzer.enterNode (/Users/me/my_app/app/node_modules/eslint/lib/linter/code-path-analysis/code-path-analyzer.js:711:23)
dferber90 commented 3 years ago

Thanks a lot for the detailed report. That made it super easy to fix it. I really appreciate it!

This is fixed in this commit (465df2b85ca15c4d35459f4c5cceecdc9c15ab0d) and published as v7.2.2.

dferber90 commented 3 years ago

As a side note: I assume your code looks something like this:

const SharedFeature = Template.SharedFeatures;

Template.SharedFeatures = {
  EVENT_HANDLERS: {
    'click .some-classname': function (e, tmpl) {
      //
    },
  },
}

Template.foo.events({ ...SharedFeatures.EVENT_HANDLERS })

Note that the handlers defined in SharedFeatures.EVENT_HANDLERS won't be checked by the eventmap-params rule as it's too hard to resolve the value properly.

jhyman2 commented 3 years ago

As a side note: I assume your code looks something like this:

const SharedFeature = Template.SharedFeatures;

Template.SharedFeatures = {
  EVENT_HANDLERS: {
    'click .some-classname': function (e, tmpl) {
      //
    },
  },
}

Template.foo.events({ ...SharedFeatures.EVENT_HANDLERS })

Note that the handlers defined in SharedFeatures.EVENT_HANDLERS won't be checked by the eventmap-params rule as it's too hard to resolve the value properly.

@dferber90 wow thank you! And yes, that is exactly what my code looked like. I'm happy that my report was thorough enough to help. Thank you so much for the quick fix.

If this problem happens to still arise or come back in the future, I did find a semi-elegant workaround.

const SharedFeatures = Template.SharedFeatures;

const otherFeatures = {
  'click .some-classname': function (e, tmpl) {
    //
  }
};

const allFeatures = { ...SharedFeatures, ...otherFeatures };

Template.foo.events(allFeatures);