Skip to content

new cap: option capIsNewExceptionPattern is not behaving as documented #12874

Closed
@l1bbcsg

Description

@l1bbcsg

Documentation for capIsNewExceptionPattern says the following:

allows any uppercase-started function names that match the specified regex pattern to be called without the new operator.

However, the actual behaviour seems to be that entire call expression is matched against the pattern, not just the function name.

Either capIsNewExceptionPattern should match only function name, or the documentation should reflect the actual behaviour.

I believe matching code with regex is fundamentally wrong and the first option is more sane solution. So, the documentation should stay as is, behaviour corrected and example updated, but that might be a breaking change.

Additionally, the example given as "correct code for this rule" is actually producing warnings (see demo), the reason being the regex configured does not match anything in the code at all.

Also other options of this rule may be poorly documented as well, for example capIsNewExceptions also states that it matches names, while actually it can match either name or full expression.

Tell us about your environment

Node version: v12.10.0
npm version: v6.10.3
Local ESLint version: v6.8.0 (Currently used)
Global ESLint version: Not found

Also same result on whatever version is currently deployed as demo.

Please show your full configuration:

Demo links

Expected no warnings: https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgbmV3LWNhcDogW1wiZXJyb3JcIiwgeyBcImNhcElzTmV3RXhjZXB0aW9uUGF0dGVyblwiOiBcIl5CYXIkXCIgfV0qL1xuXG5mb28uQmFyKCk7Iiwib3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFWZXJzaW9uIjoxMCwic291cmNlVHlwZSI6Im1vZHVsZSIsImVjbWFGZWF0dXJlcyI6e319LCJydWxlcyI6e30sImVudiI6e319fQ==

Not expected to ignore:
https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgbmV3LWNhcDogW1wiZXJyb3JcIiwgeyBcImNhcElzTmV3RXhjZXB0aW9uUGF0dGVyblwiOiBcIl5mb29cXC5CYXIkXCIgfV0qL1xuXG5mb28uQmFyKCk7Iiwib3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFWZXJzaW9uIjoxMCwic291cmNlVHlwZSI6Im1vZHVsZSIsImVjbWFGZWF0dXJlcyI6e319LCJydWxlcyI6e30sImVudiI6e319fQ==

Documentation example, wrong on several accounts: https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgbmV3LWNhcDogW1wiZXJyb3JcIiwgeyBcImNhcElzTmV3RXhjZXB0aW9uUGF0dGVyblwiOiBcIl5QZXJzb25cXC4uXCIgfV0qL1xuXG52YXIgZnJpZW5kID0gcGVyc29uLkFjcXVhaW50YW5jZSgpO1xudmFyIGJlc3RGcmllbmQgPSBwZXJzb24uRnJpZW5kKCk7Iiwib3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFWZXJzaW9uIjoxMCwic291cmNlVHlwZSI6Im1vZHVsZSIsImVjbWFGZWF0dXJlcyI6e319LCJydWxlcyI6e30sImVudiI6e319fQ==

What did you do?

Configuration:

eslint new-cap: ["error", { "capIsNewExceptionPattern": "^Bar$" }]

Code:

foo.Bar();

What did you expect to happen?

No warnings as function named Bar should be ignored.

What actually happened? Please include the actual, raw output from ESLint.

A warning against function Bar.

Are you willing to submit a pull request to fix this bug?

Only if it's as trivial as pattern.test(calleeName), but then it's probably trivial for anyone else as well.

Metadata

Metadata

Assignees

Labels

acceptedThere is consensus among the team that this change meets the criteria for inclusionarchived due to ageThis issue has been archived; please open a new issue for any further discussiondocumentationRelates to ESLint's documentationruleRelates to ESLint's core rules

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions