Skip to content

Commit

Permalink
Merge pull request #122 from github/set-correct-meta-info-on-rules
Browse files Browse the repository at this point in the history
Add info into the `meta` property of rules
  • Loading branch information
koddsson committed Apr 1, 2021
2 parents 25c29a0 + bc687f5 commit 737cee6
Show file tree
Hide file tree
Showing 17 changed files with 124 additions and 32 deletions.
6 changes: 5 additions & 1 deletion lib/rules/array-foreach.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
module.exports = {
meta: {
docs: {},
type: 'suggestion',
docs: {
description: 'enforce `for..of` loops over `Array.forEach`',
url: require('../url')(module)
},
schema: []
},

Expand Down
6 changes: 5 additions & 1 deletion lib/rules/async-currenttarget.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
module.exports = {
meta: {
docs: {},
type: 'problem',
docs: {
description: 'disallow `event.currentTarget` calls inside of async functions',
url: require('../url')(module)
},
schema: []
},

Expand Down
6 changes: 5 additions & 1 deletion lib/rules/async-preventdefault.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
module.exports = {
meta: {
docs: {},
type: 'problem',
docs: {
description: 'disallow `event.preventDefault` calls inside of async functions',
url: require('../url')(module)
},
schema: []
},

Expand Down
6 changes: 5 additions & 1 deletion lib/rules/authenticity-token.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
module.exports = {
meta: {
docs: {},
type: 'problem',
docs: {
description: 'disallow usage of CSRF tokens in JavaScript',
url: require('../url')(module)
},
schema: []
},

Expand Down
8 changes: 7 additions & 1 deletion lib/rules/get-attribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,13 @@ function isValidAttribute(name) {

module.exports = {
meta: {
fixable: 'code'
type: 'problem',
docs: {
description: 'disallow wrong usage of attribute names',
url: require('../url')(module)
},
fixable: 'code',
schema: []
},
create(context) {
return {
Expand Down
6 changes: 5 additions & 1 deletion lib/rules/js-class-name.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
module.exports = {
meta: {
docs: {},
type: 'suggestion',
docs: {
description: 'enforce a naming convention for js- prefixed classes',
url: require('../url')(module)
},
schema: []
},

Expand Down
10 changes: 8 additions & 2 deletions lib/rules/no-blur.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
module.exports = function (context) {
return {
meta: {
type: 'problem',
docs: {
description: 'disallow usage of `Element.prototype.blur()`',
url: require('../url')(module)
},
schema: []
},
CallExpression(node) {
if (node.callee.property && node.callee.property.name === 'blur') {
context.report(node, 'Do not use element.blur(), instead restore the focus of a previous element.')
}
}
}
}

module.exports.schema = []
8 changes: 8 additions & 0 deletions lib/rules/no-d-none.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
module.exports = {
meta: {
type: 'problem',
docs: {
description: 'disallow usage the `d-none` CSS class',
url: require('../url')(module)
},
schema: []
},
create(context) {
return {
CallExpression(node) {
Expand Down
6 changes: 5 additions & 1 deletion lib/rules/no-dataset.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
module.exports = {
meta: {
docs: {},
type: 'problem',
docs: {
description: 'enforce usage of `Element.prototype.getAttribute` instead of `Element.prototype.datalist`',
url: require('../url')(module)
},
schema: []
},

Expand Down
6 changes: 5 additions & 1 deletion lib/rules/no-implicit-buggy-globals.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
module.exports = {
meta: {
docs: {},
type: 'problem',
docs: {
description: 'disallow implicit global variables',
url: require('../url')(module)
},
schema: []
},

Expand Down
9 changes: 7 additions & 2 deletions lib/rules/no-innerText.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
module.exports = {
meta: {
docs: {},
fixable: 'code'
type: 'problem',
docs: {
description: 'disallow `Element.prototype.innerText` in favor of `Element.prototype.textContent`',
url: require('../url')(module)
},
fixable: 'code',
schema: []
},

create(context) {
Expand Down
7 changes: 6 additions & 1 deletion lib/rules/no-then.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
module.exports = {
meta: {
docs: {}
type: 'suggestion',
docs: {
description: 'enforce using `async/await` syntax over Promises',
url: require('../url')(module)
},
schema: []
},

create(context) {
Expand Down
9 changes: 7 additions & 2 deletions lib/rules/no-useless-passive.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,13 @@ const propIsPassiveTrue = prop => prop.key && prop.key.name === 'passive' && pro

module.exports = {
meta: {
docs: {},
fixable: 'code'
type: 'suggestion',
docs: {
description: 'disallow marking a event handler as passive when it has no effect',
url: require('../url')(module)
},
fixable: 'code',
schema: []
},

create(context) {
Expand Down
8 changes: 6 additions & 2 deletions lib/rules/prefer-observers.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,12 @@ const observerMap = {
}
module.exports = {
meta: {
docs: {},
fixable: 'code'
type: 'suggestion',
docs: {
description: 'disallow poorly performing event listeners',
url: require('../url')(module)
},
schema: []
},

create(context) {
Expand Down
7 changes: 6 additions & 1 deletion lib/rules/require-passive-events.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ const propIsPassiveTrue = prop => prop.key && prop.key.name === 'passive' && pro

module.exports = {
meta: {
docs: {}
type: 'suggestion',
docs: {
description: 'enforce marking high frequency event handlers as passive',
url: require('../url')(module)
},
schema: []
},

create(context) {
Expand Down
39 changes: 25 additions & 14 deletions lib/rules/unescaped-html-literal.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,35 @@
module.exports = function (context) {
const htmlOpenTag = /^<[a-zA-Z]/
const message = 'Unescaped HTML literal. Use html`` tag template literal for secure escaping.'
module.exports = {
meta: {
type: 'problem',
docs: {
description: 'disallow unesaped HTML literals',
url: require('../url')(module)
},
schema: []
},

return {
Literal(node) {
if (!htmlOpenTag.test(node.value)) return
create(context) {
const htmlOpenTag = /^<[a-zA-Z]/
const message = 'Unescaped HTML literal. Use html`` tag template literal for secure escaping.'

context.report({
node,
message
})
},
TemplateLiteral(node) {
if (!htmlOpenTag.test(node.quasis[0].value.raw)) return
return {
Literal(node) {
if (!htmlOpenTag.test(node.value)) return

if (!node.parent.tag || node.parent.tag.name !== 'html') {
context.report({
node,
message
})
},
TemplateLiteral(node) {
if (!htmlOpenTag.test(node.quasis[0].value.raw)) return

if (!node.parent.tag || node.parent.tag.name !== 'html') {
context.report({
node,
message
})
}
}
}
}
Expand Down
9 changes: 9 additions & 0 deletions lib/url.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const {homepage, version} = require('../package.json')
const path = require('path')
module.exports = ({id}) => {
const url = new URL(homepage)
const rule = path.basename(id, '.js')
url.hash = ''
url.pathname += `/blob/v${version}/docs/rules/${rule}.md`
return url.toString()
}

0 comments on commit 737cee6

Please sign in to comment.