eslint-plugin-chai-friendly 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +4 -1
- package/.eslintignore +1 -0
- package/.eslintrc.js +10 -4
- package/.nyc_output/fd38766d-533f-46d0-9f65-df594829ca11.json +1 -0
- package/.nyc_output/processinfo/fd38766d-533f-46d0-9f65-df594829ca11.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -0
- package/README.md +1 -1
- package/lib/index.js +11 -11
- package/lib/rules/no-unused-expressions.js +3 -1
- package/package.json +5 -3
- package/tests/lib/rules/no-unused-expressions.js +4 -0
- package/lib/rules/og-rule.js +0 -126
package/.editorconfig
CHANGED
package/.eslintignore
CHANGED
package/.eslintrc.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"/Users/user/repos/eslint-plugin-chai-friendly/lib/rules/no-unused-expressions.js":{"path":"/Users/user/repos/eslint-plugin-chai-friendly/lib/rules/no-unused-expressions.js","statementMap":{"0":{"start":{"line":12,"column":0},"end":{"line":212,"column":2}},"1":{"start":{"line":41,"column":21},"end":{"line":41,"column":45}},"2":{"start":{"line":42,"column":32},"end":{"line":42,"column":65}},"3":{"start":{"line":43,"column":27},"end":{"line":43,"column":55}},"4":{"start":{"line":44,"column":35},"end":{"line":44,"column":71}},"5":{"start":{"line":52,"column":12},"end":{"line":53,"column":96}},"6":{"start":{"line":62,"column":12},"end":{"line":66,"column":13}},"7":{"start":{"line":62,"column":25},"end":{"line":62,"column":26}},"8":{"start":{"line":63,"column":16},"end":{"line":65,"column":17}},"9":{"start":{"line":64,"column":20},"end":{"line":64,"column":44}},"10":{"start":{"line":67,"column":12},"end":{"line":67,"column":32}},"11":{"start":{"line":75,"column":12},"end":{"line":75,"column":60}},"12":{"start":{"line":84,"column":25},"end":{"line":84,"column":56}},"13":{"start":{"line":85,"column":30},"end":{"line":85,"column":61}},"14":{"start":{"line":87,"column":12},"end":{"line":89,"column":58}},"15":{"start":{"line":98,"column":12},"end":{"line":104,"column":13}},"16":{"start":{"line":101,"column":16},"end":{"line":103,"column":17}},"17":{"start":{"line":102,"column":20},"end":{"line":102,"column":99}},"18":{"start":{"line":105,"column":12},"end":{"line":109,"column":13}},"19":{"start":{"line":106,"column":16},"end":{"line":108,"column":17}},"20":{"start":{"line":107,"column":20},"end":{"line":107,"column":57}},"21":{"start":{"line":111,"column":12},"end":{"line":113,"column":13}},"22":{"start":{"line":112,"column":16},"end":{"line":112,"column":28}},"23":{"start":{"line":115,"column":12},"end":{"line":116,"column":100}},"24":{"start":{"line":126,"column":29},"end":{"line":126,"column":44}},"25":{"start":{"line":127,"column":12},"end":{"line":129,"column":13}},"26":{"start":{"line":128,"column":16},"end":{"line":128,"column":29}},"27":{"start":{"line":131,"column":33},"end":{"line":131,"column":75}},"28":{"start":{"line":133,"column":12},"end":{"line":133,"column":33}},"29":{"start":{"line":143,"column":12},"end":{"line":145,"column":13}},"30":{"start":{"line":144,"column":16},"end":{"line":144,"column":28}},"31":{"start":{"line":148,"column":12},"end":{"line":150,"column":13}},"32":{"start":{"line":149,"column":16},"end":{"line":149,"column":51}},"33":{"start":{"line":151,"column":12},"end":{"line":153,"column":13}},"34":{"start":{"line":152,"column":16},"end":{"line":152,"column":51}},"35":{"start":{"line":156,"column":12},"end":{"line":156,"column":24}},"36":{"start":{"line":166,"column":29},"end":{"line":166,"column":44}},"37":{"start":{"line":167,"column":12},"end":{"line":169,"column":13}},"38":{"start":{"line":168,"column":16},"end":{"line":168,"column":29}},"39":{"start":{"line":171,"column":32},"end":{"line":171,"column":74}},"40":{"start":{"line":173,"column":12},"end":{"line":173,"column":33}},"41":{"start":{"line":183,"column":12},"end":{"line":185,"column":13}},"42":{"start":{"line":184,"column":16},"end":{"line":184,"column":28}},"43":{"start":{"line":188,"column":12},"end":{"line":190,"column":13}},"44":{"start":{"line":189,"column":16},"end":{"line":189,"column":51}},"45":{"start":{"line":191,"column":12},"end":{"line":193,"column":13}},"46":{"start":{"line":192,"column":16},"end":{"line":192,"column":51}},"47":{"start":{"line":196,"column":12},"end":{"line":196,"column":24}},"48":{"start":{"line":200,"column":8},"end":{"line":210,"column":10}},"49":{"start":{"line":202,"column":28},"end":{"line":205,"column":45}},"50":{"start":{"line":206,"column":16},"end":{"line":208,"column":17}},"51":{"start":{"line":207,"column":20},"end":{"line":207,"column":115}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":40,"column":12},"end":{"line":40,"column":13}},"loc":{"start":{"line":40,"column":31},"end":{"line":211,"column":5}},"line":40},"1":{"name":"looksLikeDirective","decl":{"start":{"line":51,"column":17},"end":{"line":51,"column":35}},"loc":{"start":{"line":51,"column":42},"end":{"line":54,"column":9}},"line":51},"2":{"name":"takeWhile","decl":{"start":{"line":61,"column":17},"end":{"line":61,"column":26}},"loc":{"start":{"line":61,"column":44},"end":{"line":68,"column":9}},"line":61},"3":{"name":"directives","decl":{"start":{"line":74,"column":17},"end":{"line":74,"column":27}},"loc":{"start":{"line":74,"column":34},"end":{"line":76,"column":9}},"line":74},"4":{"name":"isDirective","decl":{"start":{"line":83,"column":17},"end":{"line":83,"column":28}},"loc":{"start":{"line":83,"column":46},"end":{"line":90,"column":9}},"line":83},"5":{"name":"isValidExpression","decl":{"start":{"line":97,"column":17},"end":{"line":97,"column":34}},"loc":{"start":{"line":97,"column":41},"end":{"line":117,"column":9}},"line":97},"6":{"name":"isChaiExpectCall","decl":{"start":{"line":125,"column":17},"end":{"line":125,"column":33}},"loc":{"start":{"line":125,"column":40},"end":{"line":134,"column":9}},"line":125},"7":{"name":"findExpectCall","decl":{"start":{"line":141,"column":17},"end":{"line":141,"column":31}},"loc":{"start":{"line":141,"column":38},"end":{"line":157,"column":9}},"line":141},"8":{"name":"isChaiShouldCall","decl":{"start":{"line":165,"column":17},"end":{"line":165,"column":33}},"loc":{"start":{"line":165,"column":40},"end":{"line":174,"column":9}},"line":165},"9":{"name":"findShouldCall","decl":{"start":{"line":181,"column":17},"end":{"line":181,"column":31}},"loc":{"start":{"line":181,"column":38},"end":{"line":197,"column":9}},"line":181},"10":{"name":"(anonymous_10)","decl":{"start":{"line":201,"column":33},"end":{"line":201,"column":34}},"loc":{"start":{"line":201,"column":48},"end":{"line":209,"column":13}},"line":201}},"branchMap":{"0":{"loc":{"start":{"line":41,"column":21},"end":{"line":41,"column":45}},"type":"binary-expr","locations":[{"start":{"line":41,"column":21},"end":{"line":41,"column":39}},{"start":{"line":41,"column":43},"end":{"line":41,"column":45}}],"line":41},"1":{"loc":{"start":{"line":42,"column":32},"end":{"line":42,"column":65}},"type":"binary-expr","locations":[{"start":{"line":42,"column":32},"end":{"line":42,"column":56}},{"start":{"line":42,"column":60},"end":{"line":42,"column":65}}],"line":42},"2":{"loc":{"start":{"line":43,"column":27},"end":{"line":43,"column":55}},"type":"binary-expr","locations":[{"start":{"line":43,"column":27},"end":{"line":43,"column":46}},{"start":{"line":43,"column":50},"end":{"line":43,"column":55}}],"line":43},"3":{"loc":{"start":{"line":44,"column":35},"end":{"line":44,"column":71}},"type":"binary-expr","locations":[{"start":{"line":44,"column":35},"end":{"line":44,"column":62}},{"start":{"line":44,"column":66},"end":{"line":44,"column":71}}],"line":44},"4":{"loc":{"start":{"line":52,"column":19},"end":{"line":53,"column":95}},"type":"binary-expr","locations":[{"start":{"line":52,"column":19},"end":{"line":52,"column":54}},{"start":{"line":53,"column":16},"end":{"line":53,"column":50}},{"start":{"line":53,"column":54},"end":{"line":53,"column":95}}],"line":52},"5":{"loc":{"start":{"line":63,"column":16},"end":{"line":65,"column":17}},"type":"if","locations":[{"start":{"line":63,"column":16},"end":{"line":65,"column":17}},{"start":{"line":63,"column":16},"end":{"line":65,"column":17}}],"line":63},"6":{"loc":{"start":{"line":87,"column":19},"end":{"line":89,"column":57}},"type":"binary-expr","locations":[{"start":{"line":87,"column":20},"end":{"line":87,"column":45}},{"start":{"line":87,"column":49},"end":{"line":87,"column":81}},{"start":{"line":88,"column":21},"end":{"line":88,"column":54}},{"start":{"line":89,"column":20},"end":{"line":89,"column":57}}],"line":87},"7":{"loc":{"start":{"line":98,"column":12},"end":{"line":104,"column":13}},"type":"if","locations":[{"start":{"line":98,"column":12},"end":{"line":104,"column":13}},{"start":{"line":98,"column":12},"end":{"line":104,"column":13}}],"line":98},"8":{"loc":{"start":{"line":101,"column":16},"end":{"line":103,"column":17}},"type":"if","locations":[{"start":{"line":101,"column":16},"end":{"line":103,"column":17}},{"start":{"line":101,"column":16},"end":{"line":103,"column":17}}],"line":101},"9":{"loc":{"start":{"line":102,"column":27},"end":{"line":102,"column":98}},"type":"binary-expr","locations":[{"start":{"line":102,"column":27},"end":{"line":102,"column":61}},{"start":{"line":102,"column":65},"end":{"line":102,"column":98}}],"line":102},"10":{"loc":{"start":{"line":105,"column":12},"end":{"line":109,"column":13}},"type":"if","locations":[{"start":{"line":105,"column":12},"end":{"line":109,"column":13}},{"start":{"line":105,"column":12},"end":{"line":109,"column":13}}],"line":105},"11":{"loc":{"start":{"line":106,"column":16},"end":{"line":108,"column":17}},"type":"if","locations":[{"start":{"line":106,"column":16},"end":{"line":108,"column":17}},{"start":{"line":106,"column":16},"end":{"line":108,"column":17}}],"line":106},"12":{"loc":{"start":{"line":111,"column":12},"end":{"line":113,"column":13}},"type":"if","locations":[{"start":{"line":111,"column":12},"end":{"line":113,"column":13}},{"start":{"line":111,"column":12},"end":{"line":113,"column":13}}],"line":111},"13":{"loc":{"start":{"line":111,"column":16},"end":{"line":111,"column":80}},"type":"binary-expr","locations":[{"start":{"line":111,"column":16},"end":{"line":111,"column":36}},{"start":{"line":111,"column":40},"end":{"line":111,"column":80}}],"line":111},"14":{"loc":{"start":{"line":115,"column":19},"end":{"line":116,"column":99}},"type":"binary-expr","locations":[{"start":{"line":115,"column":19},"end":{"line":115,"column":98}},{"start":{"line":116,"column":17},"end":{"line":116,"column":48}},{"start":{"line":116,"column":52},"end":{"line":116,"column":98}}],"line":115},"15":{"loc":{"start":{"line":127,"column":12},"end":{"line":129,"column":13}},"type":"if","locations":[{"start":{"line":127,"column":12},"end":{"line":129,"column":13}},{"start":{"line":127,"column":12},"end":{"line":129,"column":13}}],"line":127},"16":{"loc":{"start":{"line":143,"column":12},"end":{"line":145,"column":13}},"type":"if","locations":[{"start":{"line":143,"column":12},"end":{"line":145,"column":13}},{"start":{"line":143,"column":12},"end":{"line":145,"column":13}}],"line":143},"17":{"loc":{"start":{"line":143,"column":16},"end":{"line":143,"column":116}},"type":"binary-expr","locations":[{"start":{"line":143,"column":16},"end":{"line":143,"column":46}},{"start":{"line":143,"column":50},"end":{"line":143,"column":83}},{"start":{"line":143,"column":87},"end":{"line":143,"column":116}}],"line":143},"18":{"loc":{"start":{"line":148,"column":12},"end":{"line":150,"column":13}},"type":"if","locations":[{"start":{"line":148,"column":12},"end":{"line":150,"column":13}},{"start":{"line":148,"column":12},"end":{"line":150,"column":13}}],"line":148},"19":{"loc":{"start":{"line":151,"column":12},"end":{"line":153,"column":13}},"type":"if","locations":[{"start":{"line":151,"column":12},"end":{"line":153,"column":13}},{"start":{"line":151,"column":12},"end":{"line":153,"column":13}}],"line":151},"20":{"loc":{"start":{"line":167,"column":12},"end":{"line":169,"column":13}},"type":"if","locations":[{"start":{"line":167,"column":12},"end":{"line":169,"column":13}},{"start":{"line":167,"column":12},"end":{"line":169,"column":13}}],"line":167},"21":{"loc":{"start":{"line":183,"column":12},"end":{"line":185,"column":13}},"type":"if","locations":[{"start":{"line":183,"column":12},"end":{"line":185,"column":13}},{"start":{"line":183,"column":12},"end":{"line":185,"column":13}}],"line":183},"22":{"loc":{"start":{"line":183,"column":16},"end":{"line":183,"column":100}},"type":"binary-expr","locations":[{"start":{"line":183,"column":16},"end":{"line":183,"column":48}},{"start":{"line":183,"column":52},"end":{"line":183,"column":65}},{"start":{"line":183,"column":69},"end":{"line":183,"column":100}}],"line":183},"23":{"loc":{"start":{"line":188,"column":12},"end":{"line":190,"column":13}},"type":"if","locations":[{"start":{"line":188,"column":12},"end":{"line":190,"column":13}},{"start":{"line":188,"column":12},"end":{"line":190,"column":13}}],"line":188},"24":{"loc":{"start":{"line":191,"column":12},"end":{"line":193,"column":13}},"type":"if","locations":[{"start":{"line":191,"column":12},"end":{"line":193,"column":13}},{"start":{"line":191,"column":12},"end":{"line":193,"column":13}}],"line":191},"25":{"loc":{"start":{"line":202,"column":28},"end":{"line":205,"column":45}},"type":"binary-expr","locations":[{"start":{"line":202,"column":28},"end":{"line":202,"column":62}},{"start":{"line":203,"column":23},"end":{"line":203,"column":64}},{"start":{"line":204,"column":23},"end":{"line":204,"column":45}},{"start":{"line":205,"column":23},"end":{"line":205,"column":45}}],"line":202},"26":{"loc":{"start":{"line":206,"column":16},"end":{"line":208,"column":17}},"type":"if","locations":[{"start":{"line":206,"column":16},"end":{"line":208,"column":17}},{"start":{"line":206,"column":16},"end":{"line":208,"column":17}}],"line":206}},"s":{"0":1,"1":62,"2":62,"3":62,"4":62,"5":56,"6":42,"7":42,"8":56,"9":41,"10":1,"11":42,"12":44,"13":44,"14":44,"15":83,"16":15,"17":5,"18":78,"19":14,"20":6,"21":72,"22":1,"23":71,"24":35,"25":35,"26":27,"27":8,"28":8,"29":35,"30":2,"31":33,"32":24,"33":9,"34":3,"35":6,"36":33,"37":33,"38":27,"39":6,"40":6,"41":19,"42":3,"43":16,"44":11,"45":5,"46":2,"47":3,"48":62,"49":69,"50":69,"51":30},"f":{"0":62,"1":56,"2":42,"3":42,"4":44,"5":83,"6":35,"7":35,"8":33,"9":19,"10":69},"b":{"0":[62,45],"1":[62,55],"2":[62,56],"3":[62,59],"4":[56,52,16],"5":[41,15],"6":[44,10,10,42],"7":[15,68],"8":[5,10],"9":[5,3],"10":[14,64],"11":[6,8],"12":[1,71],"13":[72,3],"14":[71,46,4],"15":[27,8],"16":[2,33],"17":[35,5,2],"18":[24,9],"19":[3,6],"20":[27,6],"21":[3,16],"22":[19,14,14],"23":[11,5],"24":[2,3],"25":[69,44,35,33],"26":[30,39]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"05973dc07792da4b010cbf63b0206f454d6787a3","contentHash":"d41ee3dc8a8706e57c6465dd74c3a83be88f133f2d09a982d81644df7fffac22"}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"parent":null,"pid":73645,"argv":["/usr/local/bin/node","/Users/user/repos/eslint-plugin-chai-friendly/node_modules/.bin/mocha","tests","--recursive"],"execArgv":[],"cwd":"/Users/user/repos/eslint-plugin-chai-friendly","time":1587732197220,"ppid":73644,"coverageFilename":"/Users/user/repos/eslint-plugin-chai-friendly/.nyc_output/fd38766d-533f-46d0-9f65-df594829ca11.json","externalId":"","uuid":"fd38766d-533f-46d0-9f65-df594829ca11","files":["/Users/user/repos/eslint-plugin-chai-friendly/lib/rules/no-unused-expressions.js"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"processes":{"fd38766d-533f-46d0-9f65-df594829ca11":{"parent":null,"children":[]}},"files":{"/Users/user/repos/eslint-plugin-chai-friendly/lib/rules/no-unused-expressions.js":["fd38766d-533f-46d0-9f65-df594829ca11"]},"externalIds":{}}
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# eslint-plugin-chai-friendly
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/eslint-plugin-chai-friendly) [](https://www.npmjs.com/package/eslint-plugin-chai-friendly) [](https://www.npmjs.com/package/eslint-plugin-chai-friendly)
|
|
4
4
|
|
|
5
5
|
This plugin overrides `no-unused-expressions` to make it friendly towards chai `expect` and `should` statements.
|
|
6
6
|
|
package/lib/index.js
CHANGED
|
@@ -5,16 +5,16 @@
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
7
|
module.exports = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
configs: {
|
|
9
|
+
recommended: {
|
|
10
|
+
plugins: ['chai-friendly'],
|
|
11
|
+
rules: {
|
|
12
|
+
'chai-friendly/no-unused-expressions': 'error',
|
|
13
|
+
'no-unused-expressions': 'off'
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
rules: {
|
|
18
|
+
'no-unused-expressions': require('./rules/no-unused-expressions')
|
|
15
19
|
}
|
|
16
|
-
},
|
|
17
|
-
rules: {
|
|
18
|
-
'no-unused-expressions': require('./rules/no-unused-expressions')
|
|
19
|
-
}
|
|
20
20
|
};
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
|
|
12
12
|
module.exports = {
|
|
13
13
|
meta: {
|
|
14
|
+
type: "suggestion",
|
|
15
|
+
|
|
14
16
|
docs: {
|
|
15
17
|
description: "disallow unused expressions",
|
|
16
18
|
category: "Best Practices",
|
|
@@ -110,7 +112,7 @@ module.exports = {
|
|
|
110
112
|
return true;
|
|
111
113
|
}
|
|
112
114
|
|
|
113
|
-
return /^(?:Assignment|Call|New|Update|Yield|Await)Expression$/.test(node.type) ||
|
|
115
|
+
return /^(?:Assignment|Call|New|Update|Yield|Await|Import)Expression$/.test(node.type) ||
|
|
114
116
|
(node.type === "UnaryExpression" && ["delete", "void"].indexOf(node.operator) >= 0);
|
|
115
117
|
}
|
|
116
118
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-chai-friendly",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "This plugin makes 'no-unused-expressions' rule friendly towards chai expect statements.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -24,15 +24,17 @@
|
|
|
24
24
|
"main": "lib/index.js",
|
|
25
25
|
"scripts": {
|
|
26
26
|
"lint": "eslint .",
|
|
27
|
-
"test": "mocha tests --recursive"
|
|
27
|
+
"test": "nyc mocha tests --recursive"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"eslint": ">=3.0.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
+
"babel-eslint": "^10.1.0",
|
|
34
35
|
"eslint": "~6.6.0",
|
|
35
|
-
"mocha": "^
|
|
36
|
+
"mocha": "^7.1.1",
|
|
37
|
+
"nyc": "^15.0.1"
|
|
36
38
|
},
|
|
37
39
|
"engines": {
|
|
38
40
|
"node": ">=0.10.0"
|
package/lib/rules/og-rule.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Flag expressions in statement position that do not side effect
|
|
3
|
-
* @author Michael Ficarra
|
|
4
|
-
*/
|
|
5
|
-
"use strict";
|
|
6
|
-
|
|
7
|
-
//------------------------------------------------------------------------------
|
|
8
|
-
// Rule Definition
|
|
9
|
-
//------------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
module.exports = {
|
|
12
|
-
meta: {
|
|
13
|
-
docs: {
|
|
14
|
-
description: "disallow unused expressions",
|
|
15
|
-
category: "Best Practices",
|
|
16
|
-
recommended: false
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
schema: [
|
|
20
|
-
{
|
|
21
|
-
type: "object",
|
|
22
|
-
properties: {
|
|
23
|
-
allowShortCircuit: {
|
|
24
|
-
type: "boolean"
|
|
25
|
-
},
|
|
26
|
-
allowTernary: {
|
|
27
|
-
type: "boolean"
|
|
28
|
-
},
|
|
29
|
-
allowTaggedTemplates: {
|
|
30
|
-
type: "boolean"
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
additionalProperties: false
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
create(context) {
|
|
39
|
-
const config = context.options[0] || {},
|
|
40
|
-
allowShortCircuit = config.allowShortCircuit || false,
|
|
41
|
-
allowTernary = config.allowTernary || false,
|
|
42
|
-
allowTaggedTemplates = config.allowTaggedTemplates || false;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @param {ASTNode} node - any node
|
|
46
|
-
* @returns {boolean} whether the given node structurally represents a directive
|
|
47
|
-
*/
|
|
48
|
-
function looksLikeDirective(node) {
|
|
49
|
-
return node.type === "ExpressionStatement" &&
|
|
50
|
-
node.expression.type === "Literal" && typeof node.expression.value === "string";
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* @param {Function} predicate - ([a] -> Boolean) the function used to make the determination
|
|
55
|
-
* @param {a[]} list - the input list
|
|
56
|
-
* @returns {a[]} the leading sequence of members in the given list that pass the given predicate
|
|
57
|
-
*/
|
|
58
|
-
function takeWhile(predicate, list) {
|
|
59
|
-
for (let i = 0; i < list.length; ++i) {
|
|
60
|
-
if (!predicate(list[i])) {
|
|
61
|
-
return list.slice(0, i);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return list.slice();
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* @param {ASTNode} node - a Program or BlockStatement node
|
|
69
|
-
* @returns {ASTNode[]} the leading sequence of directive nodes in the given node's body
|
|
70
|
-
*/
|
|
71
|
-
function directives(node) {
|
|
72
|
-
return takeWhile(looksLikeDirective, node.body);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* @param {ASTNode} node - any node
|
|
77
|
-
* @param {ASTNode[]} ancestors - the given node's ancestors
|
|
78
|
-
* @returns {boolean} whether the given node is considered a directive in its current position
|
|
79
|
-
*/
|
|
80
|
-
function isDirective(node, ancestors) {
|
|
81
|
-
const parent = ancestors[ancestors.length - 1],
|
|
82
|
-
grandparent = ancestors[ancestors.length - 2];
|
|
83
|
-
|
|
84
|
-
return (parent.type === "Program" || parent.type === "BlockStatement" &&
|
|
85
|
-
(/Function/.test(grandparent.type))) &&
|
|
86
|
-
directives(parent).indexOf(node) >= 0;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Determines whether or not a given node is a valid expression. Recurses on short circuit eval and ternary nodes if enabled by flags.
|
|
91
|
-
* @param {ASTNode} node - any node
|
|
92
|
-
* @returns {boolean} whether the given node is a valid expression
|
|
93
|
-
*/
|
|
94
|
-
function isValidExpression(node) {
|
|
95
|
-
if (allowTernary) {
|
|
96
|
-
|
|
97
|
-
// Recursive check for ternary and logical expressions
|
|
98
|
-
if (node.type === "ConditionalExpression") {
|
|
99
|
-
return isValidExpression(node.consequent) && isValidExpression(node.alternate);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
if (allowShortCircuit) {
|
|
104
|
-
if (node.type === "LogicalExpression") {
|
|
105
|
-
return isValidExpression(node.right);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (allowTaggedTemplates && node.type === "TaggedTemplateExpression") {
|
|
110
|
-
return true;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return /^(?:Assignment|Call|New|Update|Yield|Await)Expression$/.test(node.type) ||
|
|
114
|
-
(node.type === "UnaryExpression" && ["delete", "void"].indexOf(node.operator) >= 0);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return {
|
|
118
|
-
ExpressionStatement(node) {
|
|
119
|
-
if (!isValidExpression(node.expression) && !isDirective(node, context.getAncestors())) {
|
|
120
|
-
context.report({ node, message: "Expected an assignment or function call and instead saw an expression." });
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
};
|