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 CHANGED
@@ -8,5 +8,8 @@ charset = utf-8
8
8
  end_of_line = lf
9
9
  insert_final_newline = true
10
10
  indent_style = space
11
- indent_size = 2
11
+ indent_size = 4
12
12
  trim_trailing_whitespace = true
13
+
14
+ [*.json]
15
+ indent_size = 2
package/.eslintignore CHANGED
@@ -1 +1,2 @@
1
1
  node_modules
2
+ !.eslintrc.js
package/.eslintrc.js CHANGED
@@ -1,6 +1,12 @@
1
+ 'use strict';
2
+
1
3
  module.exports = {
2
- extends: ['eslint:recommended'],
3
- env: {
4
- node: true
5
- }
4
+ extends: ['eslint:recommended'],
5
+ env: {
6
+ node: true
7
+ },
8
+ rules: {
9
+ strict: ['error'],
10
+ indent: ['error', 4]
11
+ }
6
12
  };
@@ -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
- [![npm](https://img.shields.io/npm/v/eslint-plugin-chai-friendly.svg)](https://www.npmjs.com/package/eslint-plugin-chai-friendly) [![npm](https://img.shields.io/npm/dm/eslint-plugin-chai-friendly.svg)](https://www.npmjs.com/package/eslint-plugin-chai-friendly)
3
+ [![npm](https://img.shields.io/npm/v/eslint-plugin-chai-friendly.svg)](https://www.npmjs.com/package/eslint-plugin-chai-friendly) [![npm](https://img.shields.io/npm/dm/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
- configs: {
9
- recommended: {
10
- plugins: ['chai-friendly'],
11
- rules: {
12
- 'chai-friendly/no-unused-expressions': 'error',
13
- 'no-unused-expressions': 'off'
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.5.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": "^6.2.2"
36
+ "mocha": "^7.1.1",
37
+ "nyc": "^15.0.1"
36
38
  },
37
39
  "engines": {
38
40
  "node": ">=0.10.0"
@@ -20,6 +20,10 @@ var ruleTester = new RuleTester();
20
20
 
21
21
  ruleTester.run("no-unused-expressions", rule, {
22
22
  valid: [
23
+ {
24
+ code: "import('./some-file.js');",
25
+ parser: require.resolve("babel-eslint")
26
+ },
23
27
  "function f(){}",
24
28
  "a = b",
25
29
  "new a",
@@ -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
- };