UNPKG

1.92 kBJavaScriptView Raw
1/**
2 * Disallows sticking unary operators to the left.
3 *
4 * Types: `Array` or `Boolean`
5 *
6 * Values: Array of quoted operators or `true` to require space before postfix for all unary operators
7 * (i.e. increment/decrement operators).
8 *
9 * #### Example
10 *
11 * ```js
12 * "requireSpaceBeforePostfixUnaryOperators": ["++", "--"]
13 * ```
14 *
15 * ##### Valid
16 *
17 * ```js
18 * x = y ++; y = z --;
19 * ```
20 *
21 * ##### Invalid
22 *
23 * ```js
24 * x = y++; y = z--;
25 * ```
26 */
27
28var assert = require('assert');
29var defaultOperators = require('../utils').incrementAndDecrementOperators;
30
31module.exports = function() {};
32
33module.exports.prototype = {
34
35 configure: function(operators) {
36 var isTrue = operators === true;
37
38 assert(
39 Array.isArray(operators) || isTrue,
40 this.getOptionName() + ' option requires array or true value'
41 );
42
43 if (isTrue) {
44 operators = defaultOperators;
45 }
46
47 this._operatorIndex = {};
48 for (var i = 0, l = operators.length; i < l; i++) {
49 this._operatorIndex[operators[i]] = true;
50 }
51 },
52
53 getOptionName: function() {
54 return 'requireSpaceBeforePostfixUnaryOperators';
55 },
56
57 check: function(file, errors) {
58 var operatorIndex = this._operatorIndex;
59
60 // 'UpdateExpression' involve only ++ and -- operators
61 file.iterateNodesByType('UpdateExpression', function(node) {
62 // "!node.prefix" means postfix type of (inc|dec)rement
63 if (!node.prefix && operatorIndex[node.operator]) {
64 var operatorToken = file.getLastNodeToken(node);
65
66 errors.assert.whitespaceBetween({
67 token: file.getPrevToken(operatorToken),
68 nextToken: operatorToken,
69 message: 'Operator ' + node.operator + ' should not stick to operand'
70 });
71 }
72 });
73 }
74};