Skip to content

Commit 6776fd9

Browse files
committed
Add "no-submit" rule
Disallows `$(form).submit()` expressions in favor of dispatchEvent + native `form.submit()`.
1 parent 07fa204 commit 6776fd9

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ module.exports = {
3636
'no-serialize': require('./rules/no-serialize'),
3737
'no-show': require('./rules/no-show'),
3838
'no-slide': require('./rules/no-slide'),
39+
'no-submit': require('./rules/no-submit'),
3940
'no-text': require('./rules/no-text'),
4041
'no-toggle': require('./rules/no-toggle'),
4142
'no-trigger': require('./rules/no-trigger'),
@@ -80,6 +81,7 @@ module.exports = {
8081
"jquery/no-size": 2,
8182
"jquery/no-sizzle": 2,
8283
"jquery/no-slide": 2,
84+
"jquery/no-submit": 2,
8385
"jquery/no-text": 2,
8486
"jquery/no-toggle": 2,
8587
"jquery/no-trigger": 2,

rules/no-submit.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict';
2+
3+
const utils = require('./utils.js')
4+
5+
module.exports = function(context) {
6+
return {
7+
CallExpression: function(node) {
8+
if (node.callee.type !== 'MemberExpression') return
9+
if (node.callee.property.name !== 'submit') return
10+
11+
if (utils.isjQuery(node)) {
12+
context.report({
13+
node: node,
14+
message: 'Prefer dispatchEvent + form.submit() to $.submit'
15+
})
16+
}
17+
}
18+
}
19+
}
20+
21+
module.exports.schema = []

tests/no-submit.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
'use strict';
2+
3+
const rule = require('../rules/no-submit')
4+
const RuleTester = require('eslint').RuleTester
5+
6+
const error = 'Prefer dispatchEvent + form.submit() to $.submit'
7+
8+
const ruleTester = new RuleTester()
9+
ruleTester.run('no-submit', rule, {
10+
valid: [
11+
'submit()',
12+
'[].submit()',
13+
'form.submit()',
14+
'form.submit'
15+
],
16+
invalid: [
17+
{
18+
code: '$("form").submit()',
19+
errors: [{message: error, type: 'CallExpression'}]
20+
},
21+
{
22+
code: '$form.submit()',
23+
errors: [{message: error, type: 'CallExpression'}]
24+
},
25+
{
26+
code: '$("form").first().submit()',
27+
errors: [{message: error, type: 'CallExpression'}]
28+
},
29+
{
30+
code: '$("form").append($("input").submit())',
31+
errors: [{message: error, type: 'CallExpression'}]
32+
}
33+
]
34+
})

0 commit comments

Comments
 (0)