feat(eslint-plugin): add no-click-event rule to discourage click handlers#801
Merged
feat(eslint-plugin): add no-click-event rule to discourage click handlers#801
Conversation
Add @d-zero/eslint-plugin package that provides custom ESLint rules.
Implement no-click-event rule to discourage click event handlers in favor of Invoker Commands API.
Detected patterns:
- addEventListener("click", ...)
- element.onclick = ...
- jQuery .on("click", ...) and .click()
- React onClick={...}
- Vue @click and v-on:click
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add @d-zero/eslint-plugin dependency and configure no-click-event rule in base config. The rule is enabled at warn level across all configs (standard, base, node, frontend). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add test fixture and CLI test case to verify no-click-event rule detects all patterns. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Update root README to include new eslint-plugin package in custom rules section. Add dzero and TSES to cspell dictionary. Update yarn.lock with new dependencies. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
arktds
requested changes
Feb 13, 2026
| }); | ||
| }, | ||
|
|
||
| // Pattern 3: jQuery .on('click', ...) and .click() |
Contributor
There was a problem hiding this comment.
document.body.click(); など jQuery オブジェクト以外の click() メソッド(クリック実行)も誤検知されているようなので、jQuery オブジェクトの click() メソッド(イベントリスナーの登録メソッド)だけ検知されるようにしたほうが良さそうです!
Member
Author
There was a problem hiding this comment.
修正しました! jQuery オブジェクト($element.click()、$(...).click()、jQuery(...).click())のみ検知するようにし、document.body.click() などネイティブの .click() は検知対象外にしています。
Contributor
There was a problem hiding this comment.
一貫性とルールの責務のために、jQuery オブジェクトの引数なし click()(クリック実行)は JavaScript と同様に許可するのはどうでしょうか?
| 言語 | コード | 意味 | リント |
|---|---|---|---|
| JavaScript | click() |
クリック実行 | 許可 |
| jQuery | click() |
クリック実行 | 許可 |
| jQuery | click(handler) |
イベントハンドラの追加 | 不許可 |
| @@ -0,0 +1,3 @@ | |||
| export const NAMESPACE = '@d-zero'; | |||
Member
Author
There was a problem hiding this comment.
修正しました! 未使用の NAMESPACE を削除しています。
- Remove unused NAMESPACE export from const.ts - Only detect jQuery .click() ($element.click(), $(...).click(), jQuery(...).click()) - Allow native .click() calls like document.body.click() - Add test cases for non-jQuery .click() as valid Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…mmatic click execution Only report jQuery .click(handler) with arguments (event handler registration). Allow .click() without arguments as it triggers a click rather than adding an event listener, consistent with native element.click() behavior. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Contributor
|
@YusukeHirao |
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
@d-zero/eslint-pluginpackage withno-click-eventrule@d-zero/eslint-configat warn levelChanges
New Package:
@d-zero/eslint-pluginCreated a new ESLint plugin package following monorepo conventions:
no-click-event- Discourages click event handlers in favor of Invoker Commands APIaddEventListener('click', ...)element.onclick = ....on('click', ...)and.click()onClick={...}@clickandv-on:clickIntegration
@d-zero/eslint-plugindependency to@d-zero/eslint-configbase.jswithwarnlevelTesting
test/fixtures/eslint/no-click-event.tsDocumentation
dzero,TSESto cspell dictionaryTest Plan
index.spec.tsNotes
The Invoker Commands API is a new web standard (Chrome/Edge 135+, Safari TP) that provides a declarative way to handle interactions without JavaScript, improving accessibility and performance.
🤖 Generated with Claude Code